From 80ec8a7529a824d8822466c26b05c94ba05916b8 Mon Sep 17 00:00:00 2001 From: eleksir Date: Sun, 19 Nov 2023 18:01:40 +0300 Subject: [PATCH] Initial commit --- .gitignore | 7 + Botan/Botan.SlackBuild | 123 ++ Botan/Botan.info | 10 + Botan/README | 5 + Botan/slack-desc | 19 + CubicSDR/CubicSDR.SlackBuild | 170 ++ CubicSDR/CubicSDR.info | 12 + CubicSDR/README | 9 + CubicSDR/doinst.sh | 3 + CubicSDR/slack-desc | 19 + CubicSDR/slack-required | 4 + GeoIP/GeoIP.SlackBuild | 134 ++ GeoIP/GeoIP.info | 22 + GeoIP/README | 30 + GeoIP/slack-desc | 19 + LICENSE | 19 + SDL_sound/README | 2 + SDL_sound/SDL_sound.SlackBuild | 95 + SDL_sound/SDL_sound.info | 10 + SDL_sound/slack-desc | 19 + SoapyHackRF/SoapyHackRF.SlackBuild | 113 + SoapyHackRF/SoapyHackRF.info | 10 + SoapyHackRF/slack-desc | 19 + SoapyHackRF/slack-required | 2 + SoapySDR/README | 10 + SoapySDR/SoapySDR.SlackBuild | 114 + SoapySDR/SoapySDR.info | 10 + SoapySDR/slack-desc | 19 + axel/README | 7 + axel/axel.SlackBuild | 109 + axel/axel.info | 10 + axel/doinst.sh | 14 + axel/slack-desc | 19 + bitlbee/README | 49 + bitlbee/bitlbee.SlackBuild | 181 ++ bitlbee/bitlbee.conf | 180 ++ bitlbee/bitlbee.info | 10 + bitlbee/doinst.sh | 26 + bitlbee/rc.bitlbee | 94 + bitlbee/slack-desc | 19 + .../bluez-5.51-obexd_without_systemd-1.patch | 59 + bluez/bluez-5.70.tar.sign | 16 + bluez/bluez.SlackBuild | 199 ++ bluez/bluez.url | 1 + bluez/btusb.conf | 3 + bluez/config/defaultconfig | 9 + bluez/config/rc.bluetooth | 74 + bluez/config/uart.conf | 6 + bluez/doinst.sh | 26 + bluez/slack-desc | 19 + cabextract/README | 8 + cabextract/cabextract.SlackBuild | 117 ++ cabextract/cabextract.info | 10 + cabextract/slack-desc | 19 + chrony/10-main.conf | 17 + chrony/50-sources.conf | 1 + chrony/README | 20 + chrony/chrony.SlackBuild | 119 ++ chrony/chrony.conf | 1 + chrony/chrony.info | 10 + chrony/doinst.sh | 25 + chrony/rc.chrony | 86 + chrony/slack-desc | 19 + containerd/README | 4 + containerd/containerd.SlackBuild | 96 + containerd/containerd.info | 11 + containerd/slack-desc | 19 + containerd/slack-required | 1 + cpanminus/README | 2 + cpanminus/cpanminus.SlackBuild | 99 + cpanminus/cpanminus.info | 10 + cpanminus/slack-desc | 19 + daemonize/README | 1 + daemonize/daemonize.SlackBuild | 97 + daemonize/daemonize.info | 10 + daemonize/slack-desc | 19 + davfs2/MINI_HOWTO | 93 + davfs2/README | 11 + davfs2/davfs2.SlackBuild | 133 ++ davfs2/davfs2.info | 16 + davfs2/doinst.sh | 15 + davfs2/slack-desc | 19 + deadbeef/README | 28 + deadbeef/deadbeef.SlackBuild | 108 + deadbeef/deadbeef.info | 10 + deadbeef/doinst.sh | 10 + deadbeef/slack-desc | 19 + deadbeef/slack-required | 1 + dmenu/README | 6 + dmenu/dmenu-5.0-libdir_cflags_fixups.diff | 26 + dmenu/dmenu.SlackBuild | 101 + dmenu/dmenu.info | 10 + dmenu/slack-desc | 19 + docker-cli/README | 1 + docker-cli/bash_is_always_bin_bash.patch | 75 + docker-cli/docker-cli.SlackBuild | 95 + docker-cli/docker-cli.info | 11 + docker-cli/slack-desc | 19 + docker/README | 35 + docker/config/docker.default | 3 + docker/config/docker.logrotate | 9 + docker/config/rc.docker | 86 + docker/docker.SlackBuild | 109 + docker/docker.info | 11 + docker/doinst.sh | 32 + docker/slack-desc | 19 + docker/slack-required | 3 + dos2unix/README | 25 + dos2unix/dos2unix.SlackBuild | 103 + dos2unix/dos2unix.info | 10 + dos2unix/slack-desc | 19 + dosbox/README | 5 + dosbox/doinst.sh | 4 + dosbox/dosbox.SlackBuild | 116 + dosbox/dosbox.desktop | 11 + dosbox/dosbox.info | 11 + dosbox/slack-desc | 19 + dosbox/slack-required | 1 + dpkg/README | 7 + dpkg/dpkg.SlackBuild | 109 + dpkg/dpkg.info | 10 + dpkg/slack-desc | 19 + dunst/README | 11 + dunst/doinst.sh | 14 + dunst/dunst.SlackBuild | 105 + dunst/dunst.info | 10 + dunst/slack-desc | 19 + fceux/README | 4 + fceux/doinst.sh | 4 + fceux/fceux.SlackBuild | 107 + fceux/fceux.desktop | 9 + fceux/fceux.info | 11 + fceux/slack-desc | 19 + fceux/slack-required | 3 + feh/README | 22 + feh/doinst.sh | 9 + feh/feh.SlackBuild | 114 + feh/feh.info | 11 + feh/slack-desc | 19 + feh/slack-required | 1 + filezilla/README | 13 + filezilla/doinst.sh | 13 + filezilla/filezilla.SlackBuild | 123 ++ filezilla/filezilla.desktop | 16 + filezilla/filezilla.info | 11 + filezilla/slack-desc | 19 + filezilla/slack-required | 2 + gcc5/README | 48 + gcc5/c89.sh | 11 + gcc5/c99.sh | 11 + gcc5/ecj.sh | 5 + .../1000-fastjar-0.97-segfault.patch | 29 + .../1001-fastjar-0.97-len1.patch | 16 + .../1002-fastjar-0.97-filename0.patch | 14 + .../1003-fastjar-CVE-2010-0831.patch | 102 + gcc5/fastjar-patches/1004-fastjar-man.patch | 27 + gcc5/gcc5.SlackBuild | 593 ++++++ gcc5/gcc5.info | 16 + gcc5/libgcj-5.pc | 10 + ...struct-ix86_frame-to-machine_function.diff | 239 +++ ...nce-of-struct-ix86_frame-to-avoid-cop.diff | 72 + ...eference-of-struct-ix86_frame-to-avoi.diff | 59 + ...-t-use-reference-of-struct-ix86_frame.diff | 63 + .../0005-x86-Add-mindirect-branch-doc.diff | 279 +++ .../0005-x86-Add-mindirect-branch.diff | 1870 +++++++++++++++++ .../0006-x86-Add-mfunction-return-doc.diff | 300 +++ .../0006-x86-Add-mfunction-return.diff | 1409 +++++++++++++ ...x86-Add-mindirect-branch-register-doc.diff | 231 ++ ...007-x86-Add-mindirect-branch-register.diff | 812 +++++++ ...6-Add-V-register-operand-modifier-doc.diff | 65 + ...8-x86-Add-V-register-operand-modifier.diff | 125 ++ ...ndirect-branch-mfunction-return-with-.diff | 275 +++ ...rect-branch-mfunction-return-with-doc.diff | 102 + gcc5/patches/gcc-no_fixincludes.diff | 27 + gcc5/patches/gcc.66782.diff | 124 ++ gcc5/patches/gcc.69140.diff | 13 + gcc5/patches/glibc2.28-ustat.diff | 31 + gcc5/patches/glibc2.30-ipc_perm.diff | 12 + gcc5/patches/kernel-5.12.diff | 37 + gcc5/profile.d/gcc5.csh | 7 + gcc5/profile.d/gcc5.sh | 7 + gcc5/slack-desc | 19 + gitea/README | 25 + gitea/doinst.sh | 28 + gitea/gitea.SlackBuild | 127 ++ gitea/gitea.info | 10 + gitea/gitea.ini | 177 ++ gitea/gitea.init | 92 + gitea/gitea.logrotate | 6 + gitea/gitea.sysconfig | 17 + gitea/slack-desc | 19 + gitea/slack-required | 1 + google-go-lang/README | 55 + google-go-lang/google-go-lang.SlackBuild | 158 ++ google-go-lang/google-go-lang.info | 10 + google-go-lang/slack-desc | 19 + hackrf/README | 9 + hackrf/hackrf.SlackBuild | 120 ++ hackrf/hackrf.info | 10 + hackrf/slack-desc | 19 + hamlib/README | 46 + hamlib/doinst.sh | 6 + hamlib/hamlib.SlackBuild | 191 ++ hamlib/hamlib.info | 10 + hamlib/slack-desc | 19 + i3/README | 10 + i3/doinst.sh | 19 + i3/i3.SlackBuild | 158 ++ i3/i3.info | 10 + i3/slack-desc | 19 + i3/slack-required | 7 + i3/testcase.patch | 15 + i3/xinitrc.i3 | 20 + i3lock/README | 7 + i3lock/i3lock.SlackBuild | 120 ++ i3lock/i3lock.info | 10 + i3lock/slack-desc | 19 + i3lock/slack-required | 2 + imlib2/README | 7 + imlib2/imlib2.SlackBuild | 102 + imlib2/imlib2.info | 10 + imlib2/slack-desc | 19 + iotop/README | 9 + iotop/iotop.SlackBuild | 105 + iotop/iotop.info | 10 + iotop/slack-desc | 19 + keepassxc/README | 33 + keepassxc/doinst.sh | 13 + keepassxc/keepassxc.SlackBuild | 126 ++ keepassxc/keepassxc.info | 11 + keepassxc/slack-desc | 19 + keepassxc/slack-required | 2 + libdispatch/README | 2 + libdispatch/libdispatch.SlackBuild | 109 + libdispatch/libdispatch.info | 10 + libdispatch/slack-desc | 19 + libdispatch/slack-required | 2 + libdrm/libdrm-2.4.117.tar.xz.sig | Bin 0 -> 566 bytes libdrm/libdrm.SlackBuild | 145 ++ libdrm/libdrm.url | 1 + libdrm/slack-desc | 19 + libev/README | 12 + libev/libev.SlackBuild | 112 + libev/libev.info | 10 + libev/slack-desc | 19 + libminizip/README | 2 + libminizip/libminizip.SlackBuild | 109 + libminizip/libminizip.info | 10 + libminizip/slack-desc | 19 + libotr/README | 13 + libotr/libotr.SlackBuild | 116 + libotr/libotr.info | 10 + libotr/slack-desc | 19 + libsignal-protocol-c/README | 2 + .../libsignal-protocol-c.SlackBuild | 111 + .../libsignal-protocol-c.info | 10 + libsignal-protocol-c/slack-desc | 19 + libstrophe/README | 4 + libstrophe/libstrophe.SlackBuild | 103 + libstrophe/libstrophe.info | 10 + libstrophe/slack-desc | 19 + liquid-dsp/README | 11 + liquid-dsp/liquid-dsp.SlackBuild | 113 + liquid-dsp/liquid-dsp.info | 10 + liquid-dsp/slack-desc | 19 + llvm/clang-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/clang-tools-extra-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/clang.toolchains.i586.triple.diff | 10 + llvm/compiler-rt-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/flang-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/libcxx-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/libcxxabi-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/libunwind-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/lld-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/lldb-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/llvm-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/llvm.SlackBuild | 272 +++ llvm/llvm.polly.hack.diff | 12 + llvm/llvm.url | 25 + llvm/openmp-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/polly-13.0.0.src.tar.xz.sig | Bin 0 -> 566 bytes llvm/slack-desc | 19 + lua/README | 6 + lua/lua.SlackBuild | 122 ++ lua/lua.info | 10 + lua/path.patch | 56 + lua/path64.patch | 83 + lua/slack-desc | 19 + lzop/README | 5 + lzop/lzop.SlackBuild | 102 + lzop/lzop.info | 10 + lzop/slack-desc | 19 + meson/meson.SlackBuild | 80 + meson/meson.url | 1 + meson/slack-desc | 19 + nginx/README | 34 + nginx/doinst.sh | 35 + nginx/nginx.SlackBuild | 250 +++ nginx/nginx.info | 11 + nginx/nginx.logrotate | 13 + nginx/rc.nginx | 132 ++ nginx/slack-desc | 19 + nginx/slack-required | 1 + ngircd/README | 12 + ngircd/doinst.sh | 13 + ngircd/ngircd.SlackBuild | 116 + ngircd/ngircd.info | 10 + ngircd/slack-desc | 19 + nload/README | 5 + nload/nload.SlackBuild | 105 + nload/nload.info | 10 + nload/slack-desc | 19 + nodejs/README | 8 + nodejs/nodejs.SlackBuild | 125 ++ nodejs/nodejs.info | 10 + nodejs/npm.sh | 7 + nodejs/slack-desc | 19 + openfire/README | 19 + openfire/README.SLACKWARE | 25 + openfire/openfire.SlackBuild | 115 + openfire/openfire.info | 10 + openfire/rc.openfire | 95 + openfire/slack-desc | 19 + openfire/slack-required | 1 + openjdk7/README | 35 + openjdk7/cacerts | Bin 0 -> 192567 bytes openjdk7/openjdk7.SlackBuild | 189 ++ openjdk7/openjdk7.info | 26 + openjdk7/profile.d/openjdk7.csh | 4 + openjdk7/profile.d/openjdk7.sh | 4 + openjdk7/slack-desc | 19 + openjdk8/README | 35 + openjdk8/cacerts | Bin 0 -> 192567 bytes openjdk8/openjdk8.SlackBuild | 127 ++ openjdk8/openjdk8.info | 12 + openjdk8/profile.d/openjdk8.csh | 4 + openjdk8/profile.d/openjdk8.sh | 4 + openjdk8/slack-desc | 19 + p7zip/README | 5 + p7zip/doinst.sh | 6 + p7zip/p7zip.SlackBuild | 155 ++ p7zip/p7zip.info | 10 + p7zip/patch/0001-fix-data-null-pointer.patch | 14 + p7zip/patch/0001-fix-out-of-mem.patch | 26 + p7zip/patch/02-man.patch | 22 + p7zip/patch/05-hardening-flags.patch | 33 + p7zip/patch/14-Fix-g++-warning.patch | 24 + p7zip/patch/CVE-2016-9296.patch | 12 + p7zip/patch/CVE-2017-17969.patch | 26 + p7zip/patch/gcc10-conversion.patch | 26 + p7zip/patch/p7zip-manpages.patch | 899 ++++++++ p7zip/patch/p7zip_15.14-norar_cmake.patch | 149 ++ p7zip/slack-desc | 19 + parcellite/README | 18 + parcellite/doinst.sh | 3 + parcellite/parcellite.SlackBuild | 113 + parcellite/parcellite.info | 10 + parcellite/slack-desc | 19 + pasystray/README | 5 + pasystray/doinst.sh | 9 + pasystray/pasystray.SlackBuild | 107 + pasystray/pasystray.info | 10 + pasystray/slack-desc | 19 + pbzip2/README | 5 + pbzip2/pbzip2.SlackBuild | 91 + pbzip2/pbzip2.info | 10 + pbzip2/slack-desc | 19 + perl-AnyEvent/README | 4 + perl-AnyEvent/perl-AnyEvent.SlackBuild | 99 + perl-AnyEvent/perl-AnyEvent.info | 10 + perl-AnyEvent/slack-desc | 19 + perl-Canary-Stability/README | 1 + .../perl-Canary-Stability.SlackBuild | 110 + .../perl-Canary-Stability.info | 10 + perl-Canary-Stability/slack-desc | 19 + perl-Coro/README | 32 + perl-Coro/perl-Coro.SlackBuild | 97 + perl-Coro/perl-Coro.info | 10 + perl-Coro/slack-desc | 19 + perl-Coro/slack-required | 5 + perl-EV/README | 11 + perl-EV/perl-EV.SlackBuild | 106 + perl-EV/perl-EV.info | 10 + perl-EV/slack-desc | 19 + perl-EV/slack-required | 2 + perl-Guard/README | 7 + perl-Guard/perl-Guard.SlackBuild | 97 + perl-Guard/perl-Guard.info | 10 + perl-Guard/slack-desc | 19 + perl-JSON-XS/README | 3 + perl-JSON-XS/perl-JSON-XS.SlackBuild | 108 + perl-JSON-XS/perl-JSON-XS.info | 10 + perl-JSON-XS/slack-desc | 19 + perl-JSON-XS/slack-required | 2 + perl-Types-Serialiser/README | 5 + .../perl-Types-Serialiser.SlackBuild | 105 + .../perl-Types-Serialiser.info | 10 + perl-Types-Serialiser/slack-desc | 19 + perl-Types-Serialiser/slack-required | 1 + perl-common-sense/README | 3 + .../perl-common-sense.SlackBuild | 106 + perl-common-sense/perl-common-sense.info | 10 + perl-common-sense/slack-desc | 19 + perl-event/README | 5 + perl-event/perl-event.SlackBuild | 96 + perl-event/perl-event.info | 10 + perl-event/slack-desc | 19 + perl-local-lib/README | 8 + perl-local-lib/perl-local-lib.SlackBuild | 110 + perl-local-lib/perl-local-lib.info | 10 + perl-local-lib/slack-desc | 19 + pigz/README | 4 + pigz/pigz.SlackBuild | 104 + pigz/pigz.info | 10 + pigz/slack-desc | 19 + postgresql/README | 14 + postgresql/README.SBo | 64 + postgresql/doinst.sh | 40 + postgresql/postgresql.SlackBuild | 206 ++ postgresql/postgresql.info | 10 + postgresql/postgresql.logrotate | 9 + postgresql/rc.postgresql.new | 171 ++ postgresql/setup.postgresql | 35 + postgresql/slack-desc | 19 + profanity/README | 5 + profanity/profanity.SlackBuild | 108 + profanity/profanity.info | 10 + profanity/slack-desc | 20 + profanity/slack-required | 4 + psi-plus/README | 8 + psi-plus/doinst.sh | 8 + psi-plus/psi-plus.SlackBuild | 108 + psi-plus/psi-plus.info | 10 + psi-plus/slack-desc | 19 + psi-plus/slack-required | 3 + pv/README | 5 + pv/pv.SlackBuild | 97 + pv/pv.info | 10 + pv/slack-desc | 19 + redis/README | 7 + redis/doinst.sh | 28 + redis/rc.redis.new | 61 + redis/redis.SlackBuild | 123 ++ redis/redis.info | 10 + redis/redis.logrotate | 9 + redis/slack-desc | 19 + runc/README | 9 + runc/runc.SlackBuild | 77 + runc/runc.info | 11 + runc/slack-desc | 19 + runc/slack-required | 1 + runit/README | 7 + runit/config/etc/runit/1 | 10 + runit/config/etc/runit/2 | 8 + runit/config/etc/runit/3 | 15 + runit/config/etc/sv/agetty-tty1/finish | 2 + runit/config/etc/sv/agetty-tty1/run | 2 + runit/config/etc/sv/agetty-tty2/finish | 2 + runit/config/etc/sv/agetty-tty2/run | 2 + runit/config/etc/sv/agetty-tty3/finish | 2 + runit/config/etc/sv/agetty-tty3/run | 2 + runit/config/etc/sv/agetty-tty4/finish | 2 + runit/config/etc/sv/agetty-tty4/run | 2 + runit/config/etc/sv/agetty-tty5/finish | 2 + runit/config/etc/sv/agetty-tty5/run | 2 + runit/config/etc/sv/agetty-tty6/finish | 2 + runit/config/etc/sv/agetty-tty6/run | 2 + runit/config/usr/sbin/shutdown | 93 + ...03-utmpset.c-mixes-int32_t-and-time_t.diff | 57 + ...0006-make-buildsystem-respect-CFLAGS.patch | 21 + .../0007-move-communication-files.patch | 77 + .../0008-emulate-sysv-runlevel-5.patch | 20 + .../0009-svlogd.c_clear_dir_struct.patch | 18 + ...Initialize_all_fields_of_sockaddr_in.patch | 20 + .../0011-svlogd.c_add_missing_header.patch | 18 + .../0012-seek_set.c_add_missing_header.patch | 18 + ...13-pathexec_run.c_add_missing_header.patch | 17 + runit/patches/0014-chkshsgr.c_use_gid_t.patch | 23 + ...15-prot.c_prot.h_use_gid_t_and_uid_t.patch | 48 + ...ndefined_operation_on_sequence_point.patch | 24 + .../0017-fix_runsvdir_c_event_check.patch | 25 + ...nd_other_issues_as_reported_by_infer.patch | 89 + ...place_obsolete_usleep_with_nanosleep.patch | 40 + ...rations_incompatible_types_argv_type.patch | 294 +++ ...spin_lock_on_systems_with_poor_clock.patch | 22 + .../enable-runsvup-and-runsvdown.patch | 27 + runit/patches/malloc-to-calloc.patch | 13 + runit/runit.SlackBuild | 135 ++ runit/runit.info | 10 + runit/slack-desc | 19 + runit/svwaitdown.8 | 119 ++ runit/svwaitup.8 | 104 + slapt-get/README | 6 + slapt-get/doinst.sh | 15 + slapt-get/slack-desc | 19 + slapt-get/slack-required | 22 + slapt-get/slapt-get.SlackBuild | 93 + slapt-get/slapt-get.info | 10 + slapt-get/slapt-getrc.arm | 27 + slapt-get/slapt-getrc.i586 | 27 + slapt-get/slapt-getrc.x86_64 | 27 + slim/README | 10 + slim/README.SLACKWARE | 16 + slim/doinst.sh | 16 + slim/files/Xsession | 158 ++ slim/files/slim.logrotate | 9 + slim/files/slim.pam | 7 + slim/files/slimlock.pam | 3 + slim/patches/slim-1.3.6-config.diff | 60 + ...-1.3.6-envcpy-bad-pointer-arithmetic.patch | 15 + slim/patches/slim-1.3.6-gcc11.patch | 12 + slim/patches/slim-1.3.6-honour-cflags.patch | 14 + .../slim-1.3.6-libslim-cmake-fixes.patch | 33 + slim/patches/slim-1.3.6-session-chooser.patch | 115 + slim/patches/slim-1.3.6_freetype-2.5.1.diff | 22 + slim/slack-desc | 19 + slim/slim.SlackBuild | 156 ++ slim/slim.info | 10 + tini/README | 15 + tini/slack-desc | 19 + tini/tini.SlackBuild | 103 + tini/tini.info | 10 + tor/README | 37 + tor/README.SLACKWARE | 18 + tor/doinst.sh | 28 + tor/logrotate.tor | 15 + tor/rc.tor | 124 ++ tor/slack-desc | 19 + tor/slack-required | 2 + tor/tor.SlackBuild | 119 ++ tor/tor.info | 10 + tor/torrc | 217 ++ unbound/README | 21 + unbound/auth-zones.conf | 5 + unbound/doinst.sh | 46 + unbound/localhost.zone | 11 + unbound/named.root | 92 + unbound/rc.unbound | 133 ++ unbound/slack-desc | 19 + unbound/unbound.SlackBuild | 161 ++ unbound/unbound.conf | 1151 ++++++++++ unbound/unbound.cron | 4 + unbound/unbound.info | 10 + unrar/README | 7 + unrar/slack-desc | 19 + unrar/unrar-6.1.4-soname.patch | 12 + unrar/unrar.1 | 155 ++ unrar/unrar.SlackBuild | 111 + unrar/unrar.info | 10 + uwsgi/README | 14 + uwsgi/slack-desc | 19 + uwsgi/slack-required | 3 + uwsgi/uwsgi.SlackBuild | 149 ++ uwsgi/uwsgi.info | 10 + weechat/README | 24 + weechat/doinst.sh | 9 + weechat/slack-desc | 19 + weechat/weechat.SlackBuild | 117 ++ weechat/weechat.info | 10 + wxGTK3/README | 28 + wxGTK3/slack-desc | 19 + wxGTK3/wxGTK3.SlackBuild | 140 ++ wxGTK3/wxGTK3.info | 10 + xcb-util-xrm/README | 3 + xcb-util-xrm/slack-desc | 19 + xcb-util-xrm/xcb-util-xrm.SlackBuild | 103 + xcb-util-xrm/xcb-util-xrm.info | 10 + xf86-video-intel/doinst.sh | 4 + xf86-video-intel/get-xf86-video-intel.sh | 49 + xf86-video-intel/slack-desc | 19 + xf86-video-intel/xf86-video-intel.SlackBuild | 112 + xxkb/README | 5 + xxkb/slack-desc | 19 + xxkb/xxkb.SlackBuild | 94 + xxkb/xxkb.info | 10 + yajl/README | 3 + yajl/slack-desc | 19 + yajl/yajl.SlackBuild | 100 + yajl/yajl.info | 10 + znc/README | 23 + znc/README.SLACKWARE | 18 + znc/doinst.sh | 22 + znc/rc.znc | 63 + znc/slack-desc | 19 + znc/znc.SlackBuild | 134 ++ znc/znc.info | 10 + 586 files changed, 29486 insertions(+) create mode 100644 .gitignore create mode 100644 Botan/Botan.SlackBuild create mode 100644 Botan/Botan.info create mode 100644 Botan/README create mode 100644 Botan/slack-desc create mode 100755 CubicSDR/CubicSDR.SlackBuild create mode 100644 CubicSDR/CubicSDR.info create mode 100644 CubicSDR/README create mode 100644 CubicSDR/doinst.sh create mode 100644 CubicSDR/slack-desc create mode 100644 CubicSDR/slack-required create mode 100644 GeoIP/GeoIP.SlackBuild create mode 100644 GeoIP/GeoIP.info create mode 100644 GeoIP/README create mode 100644 GeoIP/slack-desc create mode 100644 LICENSE create mode 100644 SDL_sound/README create mode 100644 SDL_sound/SDL_sound.SlackBuild create mode 100644 SDL_sound/SDL_sound.info create mode 100644 SDL_sound/slack-desc create mode 100755 SoapyHackRF/SoapyHackRF.SlackBuild create mode 100644 SoapyHackRF/SoapyHackRF.info create mode 100644 SoapyHackRF/slack-desc create mode 100644 SoapyHackRF/slack-required create mode 100644 SoapySDR/README create mode 100755 SoapySDR/SoapySDR.SlackBuild create mode 100644 SoapySDR/SoapySDR.info create mode 100644 SoapySDR/slack-desc create mode 100644 axel/README create mode 100644 axel/axel.SlackBuild create mode 100644 axel/axel.info create mode 100644 axel/doinst.sh create mode 100644 axel/slack-desc create mode 100644 bitlbee/README create mode 100755 bitlbee/bitlbee.SlackBuild create mode 100644 bitlbee/bitlbee.conf create mode 100644 bitlbee/bitlbee.info create mode 100644 bitlbee/doinst.sh create mode 100644 bitlbee/rc.bitlbee create mode 100644 bitlbee/slack-desc create mode 100644 bluez/bluez-5.51-obexd_without_systemd-1.patch create mode 100644 bluez/bluez-5.70.tar.sign create mode 100755 bluez/bluez.SlackBuild create mode 100644 bluez/bluez.url create mode 100644 bluez/btusb.conf create mode 100644 bluez/config/defaultconfig create mode 100644 bluez/config/rc.bluetooth create mode 100644 bluez/config/uart.conf create mode 100644 bluez/doinst.sh create mode 100644 bluez/slack-desc create mode 100644 cabextract/README create mode 100755 cabextract/cabextract.SlackBuild create mode 100644 cabextract/cabextract.info create mode 100644 cabextract/slack-desc create mode 100644 chrony/10-main.conf create mode 100644 chrony/50-sources.conf create mode 100644 chrony/README create mode 100644 chrony/chrony.SlackBuild create mode 100644 chrony/chrony.conf create mode 100644 chrony/chrony.info create mode 100644 chrony/doinst.sh create mode 100644 chrony/rc.chrony create mode 100644 chrony/slack-desc create mode 100644 containerd/README create mode 100755 containerd/containerd.SlackBuild create mode 100644 containerd/containerd.info create mode 100644 containerd/slack-desc create mode 100644 containerd/slack-required create mode 100644 cpanminus/README create mode 100644 cpanminus/cpanminus.SlackBuild create mode 100644 cpanminus/cpanminus.info create mode 100644 cpanminus/slack-desc create mode 100644 daemonize/README create mode 100644 daemonize/daemonize.SlackBuild create mode 100644 daemonize/daemonize.info create mode 100644 daemonize/slack-desc create mode 100644 davfs2/MINI_HOWTO create mode 100644 davfs2/README create mode 100644 davfs2/davfs2.SlackBuild create mode 100644 davfs2/davfs2.info create mode 100644 davfs2/doinst.sh create mode 100644 davfs2/slack-desc create mode 100644 deadbeef/README create mode 100644 deadbeef/deadbeef.SlackBuild create mode 100644 deadbeef/deadbeef.info create mode 100644 deadbeef/doinst.sh create mode 100644 deadbeef/slack-desc create mode 100644 deadbeef/slack-required create mode 100644 dmenu/README create mode 100644 dmenu/dmenu-5.0-libdir_cflags_fixups.diff create mode 100644 dmenu/dmenu.SlackBuild create mode 100644 dmenu/dmenu.info create mode 100644 dmenu/slack-desc create mode 100644 docker-cli/README create mode 100644 docker-cli/bash_is_always_bin_bash.patch create mode 100755 docker-cli/docker-cli.SlackBuild create mode 100644 docker-cli/docker-cli.info create mode 100644 docker-cli/slack-desc create mode 100644 docker/README create mode 100644 docker/config/docker.default create mode 100644 docker/config/docker.logrotate create mode 100644 docker/config/rc.docker create mode 100755 docker/docker.SlackBuild create mode 100644 docker/docker.info create mode 100644 docker/doinst.sh create mode 100644 docker/slack-desc create mode 100644 docker/slack-required create mode 100644 dos2unix/README create mode 100644 dos2unix/dos2unix.SlackBuild create mode 100644 dos2unix/dos2unix.info create mode 100644 dos2unix/slack-desc create mode 100644 dosbox/README create mode 100644 dosbox/doinst.sh create mode 100644 dosbox/dosbox.SlackBuild create mode 100644 dosbox/dosbox.desktop create mode 100644 dosbox/dosbox.info create mode 100644 dosbox/slack-desc create mode 100644 dosbox/slack-required create mode 100644 dpkg/README create mode 100644 dpkg/dpkg.SlackBuild create mode 100644 dpkg/dpkg.info create mode 100644 dpkg/slack-desc create mode 100644 dunst/README create mode 100644 dunst/doinst.sh create mode 100755 dunst/dunst.SlackBuild create mode 100644 dunst/dunst.info create mode 100644 dunst/slack-desc create mode 100644 fceux/README create mode 100644 fceux/doinst.sh create mode 100644 fceux/fceux.SlackBuild create mode 100644 fceux/fceux.desktop create mode 100644 fceux/fceux.info create mode 100644 fceux/slack-desc create mode 100644 fceux/slack-required create mode 100644 feh/README create mode 100644 feh/doinst.sh create mode 100644 feh/feh.SlackBuild create mode 100644 feh/feh.info create mode 100644 feh/slack-desc create mode 100644 feh/slack-required create mode 100644 filezilla/README create mode 100644 filezilla/doinst.sh create mode 100644 filezilla/filezilla.SlackBuild create mode 100644 filezilla/filezilla.desktop create mode 100644 filezilla/filezilla.info create mode 100644 filezilla/slack-desc create mode 100644 filezilla/slack-required create mode 100644 gcc5/README create mode 100644 gcc5/c89.sh create mode 100644 gcc5/c99.sh create mode 100644 gcc5/ecj.sh create mode 100644 gcc5/fastjar-patches/1000-fastjar-0.97-segfault.patch create mode 100644 gcc5/fastjar-patches/1001-fastjar-0.97-len1.patch create mode 100644 gcc5/fastjar-patches/1002-fastjar-0.97-filename0.patch create mode 100644 gcc5/fastjar-patches/1003-fastjar-CVE-2010-0831.patch create mode 100644 gcc5/fastjar-patches/1004-fastjar-man.patch create mode 100755 gcc5/gcc5.SlackBuild create mode 100644 gcc5/gcc5.info create mode 100644 gcc5/libgcj-5.pc create mode 100644 gcc5/patches/0001-i386-Move-struct-ix86_frame-to-machine_function.diff create mode 100644 gcc5/patches/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.diff create mode 100644 gcc5/patches/0003-i386-More-use-reference-of-struct-ix86_frame-to-avoi.diff create mode 100644 gcc5/patches/0004-i386-Don-t-use-reference-of-struct-ix86_frame.diff create mode 100644 gcc5/patches/0005-x86-Add-mindirect-branch-doc.diff create mode 100644 gcc5/patches/0005-x86-Add-mindirect-branch.diff create mode 100644 gcc5/patches/0006-x86-Add-mfunction-return-doc.diff create mode 100644 gcc5/patches/0006-x86-Add-mfunction-return.diff create mode 100644 gcc5/patches/0007-x86-Add-mindirect-branch-register-doc.diff create mode 100644 gcc5/patches/0007-x86-Add-mindirect-branch-register.diff create mode 100644 gcc5/patches/0008-x86-Add-V-register-operand-modifier-doc.diff create mode 100644 gcc5/patches/0008-x86-Add-V-register-operand-modifier.diff create mode 100644 gcc5/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-.diff create mode 100644 gcc5/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-doc.diff create mode 100644 gcc5/patches/gcc-no_fixincludes.diff create mode 100644 gcc5/patches/gcc.66782.diff create mode 100644 gcc5/patches/gcc.69140.diff create mode 100644 gcc5/patches/glibc2.28-ustat.diff create mode 100644 gcc5/patches/glibc2.30-ipc_perm.diff create mode 100644 gcc5/patches/kernel-5.12.diff create mode 100644 gcc5/profile.d/gcc5.csh create mode 100644 gcc5/profile.d/gcc5.sh create mode 100644 gcc5/slack-desc create mode 100644 gitea/README create mode 100644 gitea/doinst.sh create mode 100644 gitea/gitea.SlackBuild create mode 100644 gitea/gitea.info create mode 100644 gitea/gitea.ini create mode 100644 gitea/gitea.init create mode 100644 gitea/gitea.logrotate create mode 100644 gitea/gitea.sysconfig create mode 100644 gitea/slack-desc create mode 100644 gitea/slack-required create mode 100644 google-go-lang/README create mode 100644 google-go-lang/google-go-lang.SlackBuild create mode 100644 google-go-lang/google-go-lang.info create mode 100644 google-go-lang/slack-desc create mode 100644 hackrf/README create mode 100755 hackrf/hackrf.SlackBuild create mode 100644 hackrf/hackrf.info create mode 100644 hackrf/slack-desc create mode 100644 hamlib/README create mode 100644 hamlib/doinst.sh create mode 100755 hamlib/hamlib.SlackBuild create mode 100644 hamlib/hamlib.info create mode 100644 hamlib/slack-desc create mode 100644 i3/README create mode 100644 i3/doinst.sh create mode 100755 i3/i3.SlackBuild create mode 100644 i3/i3.info create mode 100644 i3/slack-desc create mode 100644 i3/slack-required create mode 100644 i3/testcase.patch create mode 100644 i3/xinitrc.i3 create mode 100644 i3lock/README create mode 100755 i3lock/i3lock.SlackBuild create mode 100644 i3lock/i3lock.info create mode 100644 i3lock/slack-desc create mode 100644 i3lock/slack-required create mode 100644 imlib2/README create mode 100644 imlib2/imlib2.SlackBuild create mode 100644 imlib2/imlib2.info create mode 100644 imlib2/slack-desc create mode 100644 iotop/README create mode 100755 iotop/iotop.SlackBuild create mode 100644 iotop/iotop.info create mode 100644 iotop/slack-desc create mode 100644 keepassxc/README create mode 100644 keepassxc/doinst.sh create mode 100644 keepassxc/keepassxc.SlackBuild create mode 100644 keepassxc/keepassxc.info create mode 100644 keepassxc/slack-desc create mode 100644 keepassxc/slack-required create mode 100644 libdispatch/README create mode 100644 libdispatch/libdispatch.SlackBuild create mode 100644 libdispatch/libdispatch.info create mode 100644 libdispatch/slack-desc create mode 100644 libdispatch/slack-required create mode 100644 libdrm/libdrm-2.4.117.tar.xz.sig create mode 100755 libdrm/libdrm.SlackBuild create mode 100644 libdrm/libdrm.url create mode 100644 libdrm/slack-desc create mode 100644 libev/README create mode 100644 libev/libev.SlackBuild create mode 100644 libev/libev.info create mode 100644 libev/slack-desc create mode 100644 libminizip/README create mode 100644 libminizip/libminizip.SlackBuild create mode 100644 libminizip/libminizip.info create mode 100644 libminizip/slack-desc create mode 100644 libotr/README create mode 100755 libotr/libotr.SlackBuild create mode 100644 libotr/libotr.info create mode 100644 libotr/slack-desc create mode 100644 libsignal-protocol-c/README create mode 100755 libsignal-protocol-c/libsignal-protocol-c.SlackBuild create mode 100644 libsignal-protocol-c/libsignal-protocol-c.info create mode 100644 libsignal-protocol-c/slack-desc create mode 100644 libstrophe/README create mode 100644 libstrophe/libstrophe.SlackBuild create mode 100644 libstrophe/libstrophe.info create mode 100644 libstrophe/slack-desc create mode 100644 liquid-dsp/README create mode 100755 liquid-dsp/liquid-dsp.SlackBuild create mode 100644 liquid-dsp/liquid-dsp.info create mode 100644 liquid-dsp/slack-desc create mode 100644 llvm/clang-13.0.0.src.tar.xz.sig create mode 100644 llvm/clang-tools-extra-13.0.0.src.tar.xz.sig create mode 100644 llvm/clang.toolchains.i586.triple.diff create mode 100644 llvm/compiler-rt-13.0.0.src.tar.xz.sig create mode 100644 llvm/flang-13.0.0.src.tar.xz.sig create mode 100644 llvm/libcxx-13.0.0.src.tar.xz.sig create mode 100644 llvm/libcxxabi-13.0.0.src.tar.xz.sig create mode 100644 llvm/libunwind-13.0.0.src.tar.xz.sig create mode 100644 llvm/lld-13.0.0.src.tar.xz.sig create mode 100644 llvm/lldb-13.0.0.src.tar.xz.sig create mode 100644 llvm/llvm-13.0.0.src.tar.xz.sig create mode 100755 llvm/llvm.SlackBuild create mode 100644 llvm/llvm.polly.hack.diff create mode 100644 llvm/llvm.url create mode 100644 llvm/openmp-13.0.0.src.tar.xz.sig create mode 100644 llvm/polly-13.0.0.src.tar.xz.sig create mode 100644 llvm/slack-desc create mode 100644 lua/README create mode 100755 lua/lua.SlackBuild create mode 100644 lua/lua.info create mode 100644 lua/path.patch create mode 100644 lua/path64.patch create mode 100644 lua/slack-desc create mode 100644 lzop/README create mode 100644 lzop/lzop.SlackBuild create mode 100644 lzop/lzop.info create mode 100644 lzop/slack-desc create mode 100755 meson/meson.SlackBuild create mode 100644 meson/meson.url create mode 100644 meson/slack-desc create mode 100644 nginx/README create mode 100644 nginx/doinst.sh create mode 100755 nginx/nginx.SlackBuild create mode 100644 nginx/nginx.info create mode 100644 nginx/nginx.logrotate create mode 100644 nginx/rc.nginx create mode 100644 nginx/slack-desc create mode 100644 nginx/slack-required create mode 100644 ngircd/README create mode 100644 ngircd/doinst.sh create mode 100644 ngircd/ngircd.SlackBuild create mode 100644 ngircd/ngircd.info create mode 100644 ngircd/slack-desc create mode 100644 nload/README create mode 100644 nload/nload.SlackBuild create mode 100644 nload/nload.info create mode 100644 nload/slack-desc create mode 100644 nodejs/README create mode 100755 nodejs/nodejs.SlackBuild create mode 100644 nodejs/nodejs.info create mode 100644 nodejs/npm.sh create mode 100644 nodejs/slack-desc create mode 100644 openfire/README create mode 100644 openfire/README.SLACKWARE create mode 100755 openfire/openfire.SlackBuild create mode 100644 openfire/openfire.info create mode 100644 openfire/rc.openfire create mode 100644 openfire/slack-desc create mode 100644 openfire/slack-required create mode 100644 openjdk7/README create mode 100644 openjdk7/cacerts create mode 100755 openjdk7/openjdk7.SlackBuild create mode 100644 openjdk7/openjdk7.info create mode 100644 openjdk7/profile.d/openjdk7.csh create mode 100644 openjdk7/profile.d/openjdk7.sh create mode 100644 openjdk7/slack-desc create mode 100644 openjdk8/README create mode 100644 openjdk8/cacerts create mode 100755 openjdk8/openjdk8.SlackBuild create mode 100644 openjdk8/openjdk8.info create mode 100644 openjdk8/profile.d/openjdk8.csh create mode 100644 openjdk8/profile.d/openjdk8.sh create mode 100644 openjdk8/slack-desc create mode 100644 p7zip/README create mode 100644 p7zip/doinst.sh create mode 100644 p7zip/p7zip.SlackBuild create mode 100644 p7zip/p7zip.info create mode 100644 p7zip/patch/0001-fix-data-null-pointer.patch create mode 100644 p7zip/patch/0001-fix-out-of-mem.patch create mode 100644 p7zip/patch/02-man.patch create mode 100644 p7zip/patch/05-hardening-flags.patch create mode 100644 p7zip/patch/14-Fix-g++-warning.patch create mode 100644 p7zip/patch/CVE-2016-9296.patch create mode 100644 p7zip/patch/CVE-2017-17969.patch create mode 100644 p7zip/patch/gcc10-conversion.patch create mode 100644 p7zip/patch/p7zip-manpages.patch create mode 100644 p7zip/patch/p7zip_15.14-norar_cmake.patch create mode 100644 p7zip/slack-desc create mode 100644 parcellite/README create mode 100644 parcellite/doinst.sh create mode 100644 parcellite/parcellite.SlackBuild create mode 100644 parcellite/parcellite.info create mode 100644 parcellite/slack-desc create mode 100644 pasystray/README create mode 100644 pasystray/doinst.sh create mode 100644 pasystray/pasystray.SlackBuild create mode 100644 pasystray/pasystray.info create mode 100644 pasystray/slack-desc create mode 100644 pbzip2/README create mode 100644 pbzip2/pbzip2.SlackBuild create mode 100644 pbzip2/pbzip2.info create mode 100644 pbzip2/slack-desc create mode 100644 perl-AnyEvent/README create mode 100755 perl-AnyEvent/perl-AnyEvent.SlackBuild create mode 100644 perl-AnyEvent/perl-AnyEvent.info create mode 100644 perl-AnyEvent/slack-desc create mode 100644 perl-Canary-Stability/README create mode 100755 perl-Canary-Stability/perl-Canary-Stability.SlackBuild create mode 100644 perl-Canary-Stability/perl-Canary-Stability.info create mode 100644 perl-Canary-Stability/slack-desc create mode 100644 perl-Coro/README create mode 100755 perl-Coro/perl-Coro.SlackBuild create mode 100644 perl-Coro/perl-Coro.info create mode 100644 perl-Coro/slack-desc create mode 100644 perl-Coro/slack-required create mode 100644 perl-EV/README create mode 100755 perl-EV/perl-EV.SlackBuild create mode 100644 perl-EV/perl-EV.info create mode 100644 perl-EV/slack-desc create mode 100644 perl-EV/slack-required create mode 100644 perl-Guard/README create mode 100755 perl-Guard/perl-Guard.SlackBuild create mode 100644 perl-Guard/perl-Guard.info create mode 100644 perl-Guard/slack-desc create mode 100644 perl-JSON-XS/README create mode 100755 perl-JSON-XS/perl-JSON-XS.SlackBuild create mode 100644 perl-JSON-XS/perl-JSON-XS.info create mode 100644 perl-JSON-XS/slack-desc create mode 100644 perl-JSON-XS/slack-required create mode 100644 perl-Types-Serialiser/README create mode 100755 perl-Types-Serialiser/perl-Types-Serialiser.SlackBuild create mode 100644 perl-Types-Serialiser/perl-Types-Serialiser.info create mode 100644 perl-Types-Serialiser/slack-desc create mode 100644 perl-Types-Serialiser/slack-required create mode 100644 perl-common-sense/README create mode 100755 perl-common-sense/perl-common-sense.SlackBuild create mode 100644 perl-common-sense/perl-common-sense.info create mode 100644 perl-common-sense/slack-desc create mode 100644 perl-event/README create mode 100755 perl-event/perl-event.SlackBuild create mode 100644 perl-event/perl-event.info create mode 100644 perl-event/slack-desc create mode 100644 perl-local-lib/README create mode 100755 perl-local-lib/perl-local-lib.SlackBuild create mode 100644 perl-local-lib/perl-local-lib.info create mode 100644 perl-local-lib/slack-desc create mode 100644 pigz/README create mode 100644 pigz/pigz.SlackBuild create mode 100644 pigz/pigz.info create mode 100644 pigz/slack-desc create mode 100644 postgresql/README create mode 100644 postgresql/README.SBo create mode 100644 postgresql/doinst.sh create mode 100644 postgresql/postgresql.SlackBuild create mode 100644 postgresql/postgresql.info create mode 100644 postgresql/postgresql.logrotate create mode 100644 postgresql/rc.postgresql.new create mode 100644 postgresql/setup.postgresql create mode 100644 postgresql/slack-desc create mode 100644 profanity/README create mode 100644 profanity/profanity.SlackBuild create mode 100644 profanity/profanity.info create mode 100644 profanity/slack-desc create mode 100644 profanity/slack-required create mode 100644 psi-plus/README create mode 100644 psi-plus/doinst.sh create mode 100755 psi-plus/psi-plus.SlackBuild create mode 100644 psi-plus/psi-plus.info create mode 100644 psi-plus/slack-desc create mode 100644 psi-plus/slack-required create mode 100644 pv/README create mode 100644 pv/pv.SlackBuild create mode 100644 pv/pv.info create mode 100644 pv/slack-desc create mode 100644 redis/README create mode 100644 redis/doinst.sh create mode 100644 redis/rc.redis.new create mode 100644 redis/redis.SlackBuild create mode 100644 redis/redis.info create mode 100644 redis/redis.logrotate create mode 100644 redis/slack-desc create mode 100644 runc/README create mode 100755 runc/runc.SlackBuild create mode 100644 runc/runc.info create mode 100644 runc/slack-desc create mode 100644 runc/slack-required create mode 100644 runit/README create mode 100644 runit/config/etc/runit/1 create mode 100644 runit/config/etc/runit/2 create mode 100644 runit/config/etc/runit/3 create mode 100644 runit/config/etc/sv/agetty-tty1/finish create mode 100644 runit/config/etc/sv/agetty-tty1/run create mode 100644 runit/config/etc/sv/agetty-tty2/finish create mode 100644 runit/config/etc/sv/agetty-tty2/run create mode 100644 runit/config/etc/sv/agetty-tty3/finish create mode 100644 runit/config/etc/sv/agetty-tty3/run create mode 100644 runit/config/etc/sv/agetty-tty4/finish create mode 100644 runit/config/etc/sv/agetty-tty4/run create mode 100644 runit/config/etc/sv/agetty-tty5/finish create mode 100644 runit/config/etc/sv/agetty-tty5/run create mode 100644 runit/config/etc/sv/agetty-tty6/finish create mode 100644 runit/config/etc/sv/agetty-tty6/run create mode 100644 runit/config/usr/sbin/shutdown create mode 100644 runit/patches/0003-utmpset.c-mixes-int32_t-and-time_t.diff create mode 100644 runit/patches/0006-make-buildsystem-respect-CFLAGS.patch create mode 100644 runit/patches/0007-move-communication-files.patch create mode 100644 runit/patches/0008-emulate-sysv-runlevel-5.patch create mode 100644 runit/patches/0009-svlogd.c_clear_dir_struct.patch create mode 100644 runit/patches/0010-svlogd.c_Initialize_all_fields_of_sockaddr_in.patch create mode 100644 runit/patches/0011-svlogd.c_add_missing_header.patch create mode 100644 runit/patches/0012-seek_set.c_add_missing_header.patch create mode 100644 runit/patches/0013-pathexec_run.c_add_missing_header.patch create mode 100644 runit/patches/0014-chkshsgr.c_use_gid_t.patch create mode 100644 runit/patches/0015-prot.c_prot.h_use_gid_t_and_uid_t.patch create mode 100644 runit/patches/0016-chpst_fix_undefined_operation_on_sequence_point.patch create mode 100644 runit/patches/0017-fix_runsvdir_c_event_check.patch create mode 100644 runit/patches/0018-resource_leaks_and_other_issues_as_reported_by_infer.patch create mode 100644 runit/patches/0019-replace_obsolete_usleep_with_nanosleep.patch create mode 100644 runit/patches/0020-implicit_declarations_incompatible_types_argv_type.patch create mode 100644 runit/patches/0022-fix_spin_lock_on_systems_with_poor_clock.patch create mode 100644 runit/patches/enable-runsvup-and-runsvdown.patch create mode 100644 runit/patches/malloc-to-calloc.patch create mode 100755 runit/runit.SlackBuild create mode 100644 runit/runit.info create mode 100644 runit/slack-desc create mode 100644 runit/svwaitdown.8 create mode 100644 runit/svwaitup.8 create mode 100644 slapt-get/README create mode 100644 slapt-get/doinst.sh create mode 100644 slapt-get/slack-desc create mode 100644 slapt-get/slack-required create mode 100755 slapt-get/slapt-get.SlackBuild create mode 100644 slapt-get/slapt-get.info create mode 100644 slapt-get/slapt-getrc.arm create mode 100644 slapt-get/slapt-getrc.i586 create mode 100644 slapt-get/slapt-getrc.x86_64 create mode 100644 slim/README create mode 100644 slim/README.SLACKWARE create mode 100644 slim/doinst.sh create mode 100644 slim/files/Xsession create mode 100644 slim/files/slim.logrotate create mode 100644 slim/files/slim.pam create mode 100644 slim/files/slimlock.pam create mode 100644 slim/patches/slim-1.3.6-config.diff create mode 100644 slim/patches/slim-1.3.6-envcpy-bad-pointer-arithmetic.patch create mode 100644 slim/patches/slim-1.3.6-gcc11.patch create mode 100644 slim/patches/slim-1.3.6-honour-cflags.patch create mode 100644 slim/patches/slim-1.3.6-libslim-cmake-fixes.patch create mode 100644 slim/patches/slim-1.3.6-session-chooser.patch create mode 100644 slim/patches/slim-1.3.6_freetype-2.5.1.diff create mode 100644 slim/slack-desc create mode 100755 slim/slim.SlackBuild create mode 100644 slim/slim.info create mode 100644 tini/README create mode 100644 tini/slack-desc create mode 100755 tini/tini.SlackBuild create mode 100644 tini/tini.info create mode 100644 tor/README create mode 100644 tor/README.SLACKWARE create mode 100644 tor/doinst.sh create mode 100644 tor/logrotate.tor create mode 100644 tor/rc.tor create mode 100644 tor/slack-desc create mode 100644 tor/slack-required create mode 100755 tor/tor.SlackBuild create mode 100644 tor/tor.info create mode 100644 tor/torrc create mode 100644 unbound/README create mode 100644 unbound/auth-zones.conf create mode 100644 unbound/doinst.sh create mode 100644 unbound/localhost.zone create mode 100644 unbound/named.root create mode 100644 unbound/rc.unbound create mode 100644 unbound/slack-desc create mode 100755 unbound/unbound.SlackBuild create mode 100644 unbound/unbound.conf create mode 100644 unbound/unbound.cron create mode 100644 unbound/unbound.info create mode 100644 unrar/README create mode 100644 unrar/slack-desc create mode 100644 unrar/unrar-6.1.4-soname.patch create mode 100644 unrar/unrar.1 create mode 100644 unrar/unrar.SlackBuild create mode 100644 unrar/unrar.info create mode 100644 uwsgi/README create mode 100644 uwsgi/slack-desc create mode 100644 uwsgi/slack-required create mode 100755 uwsgi/uwsgi.SlackBuild create mode 100644 uwsgi/uwsgi.info create mode 100644 weechat/README create mode 100644 weechat/doinst.sh create mode 100644 weechat/slack-desc create mode 100755 weechat/weechat.SlackBuild create mode 100644 weechat/weechat.info create mode 100644 wxGTK3/README create mode 100644 wxGTK3/slack-desc create mode 100644 wxGTK3/wxGTK3.SlackBuild create mode 100644 wxGTK3/wxGTK3.info create mode 100644 xcb-util-xrm/README create mode 100644 xcb-util-xrm/slack-desc create mode 100644 xcb-util-xrm/xcb-util-xrm.SlackBuild create mode 100644 xcb-util-xrm/xcb-util-xrm.info create mode 100644 xf86-video-intel/doinst.sh create mode 100644 xf86-video-intel/get-xf86-video-intel.sh create mode 100644 xf86-video-intel/slack-desc create mode 100755 xf86-video-intel/xf86-video-intel.SlackBuild create mode 100644 xxkb/README create mode 100644 xxkb/slack-desc create mode 100644 xxkb/xxkb.SlackBuild create mode 100644 xxkb/xxkb.info create mode 100644 yajl/README create mode 100644 yajl/slack-desc create mode 100644 yajl/yajl.SlackBuild create mode 100644 yajl/yajl.info create mode 100644 znc/README create mode 100644 znc/README.SLACKWARE create mode 100644 znc/doinst.sh create mode 100644 znc/rc.znc create mode 100644 znc/slack-desc create mode 100755 znc/znc.SlackBuild create mode 100644 znc/znc.info diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c38b5c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +**.tar.xz +**.tar.gz +**.tar.bz2 +**.tar.lz +**/slackmeta.pl +**/upload.pl +**/Geo*.dat.gz \ No newline at end of file diff --git a/Botan/Botan.SlackBuild b/Botan/Botan.SlackBuild new file mode 100644 index 0000000..345fec9 --- /dev/null +++ b/Botan/Botan.SlackBuild @@ -0,0 +1,123 @@ +#!/bin/bash + +# Slackware build script for Botan + +# Copyright (c) 2010-2021 Markus Reichelt, Aachen, DE +# Copyright (c) 2022 Sergei Fedosoff +# +# 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. +# +# THIS SOFTWARE IS PROVIDED ``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 AUTHORS AND COPYRIGHT HOLDERS AND 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. +# +# Markus Reichelt, slackbuilds@mareichelt.de, 0xCCEEF115 + +# 20220416 bkw: Modified by SlackBuilds.org, BUILD=2: +# - use correct doc dir (usr/doc/$PRGNAM-$VERSION). + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=Botan +VERSION=${VERSION:-2.19.1} +BUILD=${BUILD:-2} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +PRGNAMI=botan + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-Ofast -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.xz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +export LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s" +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +python configure.py \ + --prefix=/usr \ + --docdir=doc \ + --libdir=lib$LIBDIRSUFFIX \ + --mandir=/usr/man \ + --disable-static \ + --with-doxygen + +make -j$(nproc) +#make check +#in addition to running 'make check' as an alternative way to invoke the testsuite +#is to uncomment the following line +#LD_LIBRARY_PATH=. ./botan-test +make install DESTDIR=$PKG + +gzip -9 $PKG/usr/man/man*/* + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# 20220416 bkw: 'make install' uses the wrong name for the doc dir, +# lowercase "botan". our doc dir must match the SlackBuild's name. +mv $PKG/usr/doc/$PRGNAMI-$VERSION $PKG/usr/doc/$PRGNAM-$VERSION +cp -a *.rst *.txt $PKG/usr/doc/$PRGNAM-$VERSION/ + +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/Botan/Botan.info b/Botan/Botan.info new file mode 100644 index 0000000..314d414 --- /dev/null +++ b/Botan/Botan.info @@ -0,0 +1,10 @@ +PRGNAM="Botan" +VERSION="2.19.1" +HOMEPAGE="https://botan.randombit.net/" +DOWNLOAD="https://botan.randombit.net/releases/Botan-2.19.1.tar.xz" +MD5SUM="30a71dd700d69561483fb1599a13ea3b" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/Botan/README b/Botan/README new file mode 100644 index 0000000..df7215a --- /dev/null +++ b/Botan/README @@ -0,0 +1,5 @@ +Botan is a BSD-licensed crypto library for C++. It provides +applications with the ability to use a number of cryptographic +algorithms, as well as SSL/TLS, X.509 certificates and CRLs, PKCS +#10 certificate requests, a filter/pipe message processing system, +and a wide variety of other features. diff --git a/Botan/slack-desc b/Botan/slack-desc new file mode 100644 index 0000000..f16a6f3 --- /dev/null +++ b/Botan/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +Botan: Botan (C++ crypto library) +Botan: +Botan: Botan is a BSD-licensed crypto library for C++. It provides +Botan: applications with the ability to use a number of cryptographic +Botan: algorithms, as well as SSL/TLS, X.509 certificates and CRLs, PKCS +Botan: #10 certificate requests, a filter/pipe message processing system, +Botan: and a wide variety of other features. +Botan: +Botan: Homepage: https://botan.randombit.net/ +Botan: +Botan: diff --git a/CubicSDR/CubicSDR.SlackBuild b/CubicSDR/CubicSDR.SlackBuild new file mode 100755 index 0000000..7df9419 --- /dev/null +++ b/CubicSDR/CubicSDR.SlackBuild @@ -0,0 +1,170 @@ +#!/bin/bash + +# Slackware build script for CubicSDR + +# Copyright 2022 Alan Aversa USA +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=CubicSDR +VERSION=${VERSION:-0.2.7} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC -mfpmath=sse -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2 -mavx -mavx2" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +mkdir $PRGNAM-$VERSION +cd $PRGNAM-$VERSION + +# static wxWidgets + +STATICWXWIDGETS_DESTDIR=$TMP/$PRGNAM-$VERSION/wxWidgets-staticlib +mkdir -p $STATICWXWIDGETS_DESTDIR + +VERWXWIDGETS=${VERWXWIDGETS:-3.1.5} + +tar xf $CWD/wxWidgets-$VERWXWIDGETS.tar.bz2 +cd wxWidgets-$VERWXWIDGETS + chown -R root:root . + find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + + ./autogen.sh + + CFLAGS="$SLKCFLAGS" \ + CXXFLAGS="$SLKCFLAGS -std=c++0x" \ + ./configure \ + --with-opengl \ + --disable-shared \ + --enable-monolithic \ + --with-libjpeg \ + --with-libtiff \ + --with-libpng \ + --with-zlib \ + --disable-sdltest \ + --enable-unicode \ + --enable-display \ + --enable-propgrid \ + --disable-webview \ + --disable-webviewwebkit \ + --disable-tests \ + --with-x \ + --with-gtk=3 \ + --with-xtest \ + --with-libiconv \ + --enable-commondlg \ + --enable-tooltips \ + --enable-richtooltip \ + --enable-markup \ + --enable-accel \ + --prefix="$STATICWXWIDGETS_DESTDIR" + + make -j$(nproc) + make install + +cd .. + +# build CubicSDR + +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +mkdir -p build +cd build + cmake \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_SUFFIX=${LIBDIRSUFFIX} \ + -DwxWidgets_CONFIG_EXECUTABLE=$STATICWXWIDGETS_DESTDIR/bin/wx-config \ + -DUSE_HAMLIB=ON \ + -DUSE_SOAPY_SDR=ON \ + -DCMAKE_BUILD_TYPE=Release .. + make -j$(nproc) + make install DESTDIR=$PKG +cd .. + +# Package everything + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE README.md $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/CubicSDR/CubicSDR.info b/CubicSDR/CubicSDR.info new file mode 100644 index 0000000..a636e86 --- /dev/null +++ b/CubicSDR/CubicSDR.info @@ -0,0 +1,12 @@ +PRGNAM="CubicSDR" +VERSION="0.2.7" +HOMEPAGE="https://github.com/cjcliffe/CubicSDR/" +DOWNLOAD="https://github.com/cjcliffe/CubicSDR/archive/0.2.7/CubicSDR-0.2.7.tar.gz \ + https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.5/wxWidgets-3.1.5.tar.bz2" +MD5SUM="6e4cfeab14d9ec54daaed6079a5312ae \ + 8b2ac42364a02bb5f3df22e1b1a517e5" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="SoapySDR liquid-dsp" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/CubicSDR/README b/CubicSDR/README new file mode 100644 index 0000000..85c02d4 --- /dev/null +++ b/CubicSDR/README @@ -0,0 +1,9 @@ +CubicSDR is the software portion of Software Defined Radio. By using +hardware that converts RF spectrum into a digital stream we are able to +build complex radios to do many types of functions in software instead +of traditional hardware. + +Paired with a supported hardware receiver, you can use CubicSDR to +explore the RF world around you. Discover Satellite transmissions, +Amateur Radio, Rail, Aeronautical, Shortwave, or any number of possible +signals floating through the air. diff --git a/CubicSDR/doinst.sh b/CubicSDR/doinst.sh new file mode 100644 index 0000000..5fb2893 --- /dev/null +++ b/CubicSDR/doinst.sh @@ -0,0 +1,3 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi diff --git a/CubicSDR/slack-desc b/CubicSDR/slack-desc new file mode 100644 index 0000000..a39c8b1 --- /dev/null +++ b/CubicSDR/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +CubicSDR: CubicSDR (Software-Defined Radio Application) +CubicSDR: +CubicSDR: CubicSDR is the software portion of Software Defined Radio. By using +CubicSDR: hardware that converts RF spectrum into a digital stream we are able +CubicSDR: to build complex radios to do many types of functions in software +CubicSDR: instead of traditional hardwre. +CubicSDR: +CubicSDR: Paired with a supported hardware receiver, you can use CubicSDR to +CubicSDR: explore the RF world around you. Discover Satellite transmissions, +CubicSDR: Amateur Radio, Rail, Areonautical, Shortwave, or any number of +CubicSDR: possible signals floating through the air. diff --git a/CubicSDR/slack-required b/CubicSDR/slack-required new file mode 100644 index 0000000..4ea3565 --- /dev/null +++ b/CubicSDR/slack-required @@ -0,0 +1,4 @@ +SoapySDR +liquid-dsp +SoapyHackRF +hamlib diff --git a/GeoIP/GeoIP.SlackBuild b/GeoIP/GeoIP.SlackBuild new file mode 100644 index 0000000..f9b558a --- /dev/null +++ b/GeoIP/GeoIP.SlackBuild @@ -0,0 +1,134 @@ +#!/bin/sh + +# Slackware build script for GeoIP + +# Copyright 2007-2010 Yalla-One +# Copyright 2011 markus reichelt 0xCCEEF115 +# Copyright 2011 Niels Horn, Rio de Janeiro, RJ, Brazil +# Copyright 2022 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +# This product includes GeoLite data created by MaxMind, +# available from http://www.maxmind.com +# (Creative Commons Attribution-ShareAlike 4.0 International License) + +# Maintained by David Spencer + +PRGNAM=GeoIP +VERSION=${VERSION:-1.6.12} +BUILD=${BUILD:-2} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-g3 -O2 -fPIC -flto" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +export CFLAGS="$SLKFLAGS -rdynamic" +export LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" + +# We need to update the configuration files in this tarball... +autoreconf -i + +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --localstatedir=/var \ + --mandir=/usr/man \ + --disable-static \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; + +mkdir -p $PKG/var/lib/GeoIP +if [ "${MINIDATA:-no}" = "yes" ]; then + DATAFILES="GeoIP GeoIPv6" +else + DATAFILES="GeoIP GeoIPv6 GeoLiteCity GeoLiteCityv6 GeoIPASNum GeoIPASNumv6" +fi +for datafile in $DATAFILES ; do + if [ -e $CWD/$datafile.dat.gz ]; then + zcat $CWD/$datafile.dat.gz > $PKG/var/lib/GeoIP/$datafile.dat + fi +done +# As an absolute minimum we'll package the ipv4 country data file from the source tree: +if [ ! -e $PKG/var/lib/GeoIP/GeoIP.dat ]; then + cat data/GeoIP.dat > $PKG/var/lib/GeoIP/GeoIP.dat +fi +# It's traditional to make the data available in /usr/share/GeoIP too: +mkdir -p $PKG/usr/share +ln -s ../../var/lib/GeoIP $PKG/usr/share/GeoIP + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + AUTHORS COPYING ChangeLog INSTALL LICENSE NEWS.md README.md \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/GeoIP/GeoIP.info b/GeoIP/GeoIP.info new file mode 100644 index 0000000..96b8e8b --- /dev/null +++ b/GeoIP/GeoIP.info @@ -0,0 +1,22 @@ +PRGNAM="GeoIP" +VERSION="1.6.12" +HOMEPAGE="https://github.com/maxmind/geoip-api-c" +DOWNLOAD="https://github.com/maxmind/geoip-api-c/releases/download/v1.6.12/GeoIP-1.6.12.tar.gz \ + https://sourceforge.net/projects/slackbuildsdirectlinks/files/GeoIP/20180310/GeoIP.dat.gz \ + https://sourceforge.net/projects/slackbuildsdirectlinks/files/GeoIP/20180310/GeoIPv6.dat.gz \ + https://sourceforge.net/projects/slackbuildsdirectlinks/files/GeoIP/20180310/GeoLiteCity.dat.gz \ + https://sourceforge.net/projects/slackbuildsdirectlinks/files/GeoIP/20180310/GeoLiteCityv6.dat.gz \ + https://sourceforge.net/projects/slackbuildsdirectlinks/files/GeoIP/20180310/GeoIPASNum.dat.gz \ + https://sourceforge.net/projects/slackbuildsdirectlinks/files/GeoIP/20180310/GeoIPASNumv6.dat.gz" +MD5SUM="77d496cc40daa1dbc2b97365807d64d7 \ + 5b3d3299e0644f51cafd624e6b3a7ce8 \ + aea888a68931985cb10a9dabf0a1bc9b \ + fa356cf173e3a4bc75919877f73862ba \ + 4c8972ebe778cd99fd9ea2cff39f0bb6 \ + bd5b21a0df8037c88ceae9956ab6b393 \ + 3ae7d7c6409376163c8b8d28ebe14b59" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/GeoIP/README b/GeoIP/README new file mode 100644 index 0000000..89284f5 --- /dev/null +++ b/GeoIP/README @@ -0,0 +1,30 @@ +GeoIP is the proprietary technology that drives MaxMind's IP +geolocation data and services. GeoIP provides businesses with a +non-invasive way to determine geographical and other information +about their Internet visitors in real-time. + +This SlackBuild packages a recent full set of GeoLite data files +(Creative Commons licensed), totalling 56Mb uncompressed. + +To keep the data files up-to-date, see the geoipupdate SlackBuild. + +If you don't want the full set of data files, you have three choices: + +(1) You can download only the data files you want before running the +SlackBuild. + +(2) You can remove the data files you don't want from the directory +/var/lib/GeoIP after installation. + +(3) You can run the SlackBuild with the option 'MINIDATA=yes'. Only the +ipv4 and ipv6 country data will be packaged. + + MINIDATA=yes ./GeoIP.SlackBuild + +If you are using sbopkg and you have md5sum errors, you need to +delete your old data files from the cache and try again. + + + This product includes GeoLite data created by MaxMind, + available from http://www.maxmind.com + Creative Commons Attribution-ShareAlike 4.0 International License diff --git a/GeoIP/slack-desc b/GeoIP/slack-desc new file mode 100644 index 0000000..21b69dd --- /dev/null +++ b/GeoIP/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +GeoIP: GeoIP (GeoIP API and database) +GeoIP: +GeoIP: GeoIP is the proprietary technology that drives MaxMind's IP +GeoIP: geolocation data and services. GeoIP provides businesses with a +GeoIP: non-invasive way to determine geographical and other information +GeoIP: about their Internet visitors in real-time. +GeoIP: +GeoIP: "This product includes GeoLite data created by MaxMind, available +GeoIP: from http://www.maxmind.com" (CC BY-SA 4.0) +GeoIP: +GeoIP: diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5ed9467 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright 2022 Sergei Fedosoff . +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. + +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 FREEBSD 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. \ No newline at end of file diff --git a/SDL_sound/README b/SDL_sound/README new file mode 100644 index 0000000..ebd91df --- /dev/null +++ b/SDL_sound/README @@ -0,0 +1,2 @@ +SDL_sound is a library that handles the decoding of several popular +sound file formats, such as .WAV and .MP3. diff --git a/SDL_sound/SDL_sound.SlackBuild b/SDL_sound/SDL_sound.SlackBuild new file mode 100644 index 0000000..56ef402 --- /dev/null +++ b/SDL_sound/SDL_sound.SlackBuild @@ -0,0 +1,95 @@ +#!/bin/sh + +# Slackware build script for SDL_sound + +# Copyright 2009 Erik W. Hanson, Minneapolis, MN, USA +# Copyright 2022 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=SDL_sound +VERSION=1.0.3 +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -eu + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="$SLKCFLAGS -flto" \ +CXXFLAGS="$SLKCFLAGS -flto" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \ +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-static \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make -j$(nproc) install-strip DESTDIR=$PKG + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a CHANGELOG COPYING CREDITS INSTALL README TODO \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/SDL_sound/SDL_sound.info b/SDL_sound/SDL_sound.info new file mode 100644 index 0000000..21fe728 --- /dev/null +++ b/SDL_sound/SDL_sound.info @@ -0,0 +1,10 @@ +PRGNAM="SDL_sound" +VERSION="1.0.3" +HOMEPAGE="http://icculus.org/SDL_sound/" +DOWNLOAD="http://icculus.org/SDL_sound/downloads/SDL_sound-1.0.3.tar.gz" +MD5SUM="aa09cd52df85d29bee87a664424c94b5" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/SDL_sound/slack-desc b/SDL_sound/slack-desc new file mode 100644 index 0000000..f3e2740 --- /dev/null +++ b/SDL_sound/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +SDL_sound: SDL_sound (a sound library add-on for SDL) +SDL_sound: +SDL_sound: SDL_sound is a library that handles the decoding of several popular +SDL_sound: sound file formats, such as .WAV and .MP3. +SDL_sound: +SDL_sound: +SDL_sound: +SDL_sound: +SDL_sound: +SDL_sound: +SDL_sound: diff --git a/SoapyHackRF/SoapyHackRF.SlackBuild b/SoapyHackRF/SoapyHackRF.SlackBuild new file mode 100755 index 0000000..24839e5 --- /dev/null +++ b/SoapyHackRF/SoapyHackRF.SlackBuild @@ -0,0 +1,113 @@ +#!/bin/bash + +# Slackware build script for SoapyHackRF + +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=SoapyHackRF +VERSION=${VERSION:-0.3.4} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +SRCNAM=soapy-hackrf +SRCDIR=SoapyHackRF-soapy-hackrf + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC -mfpmath=sse -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2 -mavx -mavx2" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCDIR-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +mkdir -p build +cd build + cmake \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS -rdynamic" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS -rdynamic" \ + -DCMAKE_LINK_FLAGS:STRING="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_SUFFIX=${LIBDIRSUFFIX} \ + -DCMAKE_INSTALL_MANDIR=/usr/man \ + -DCMAKE_BUILD_TYPE=Release .. + + make -j$(nproc) + make install DESTDIR=$PKG +cd .. + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a README.md LICENSE $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/SoapyHackRF/SoapyHackRF.info b/SoapyHackRF/SoapyHackRF.info new file mode 100644 index 0000000..553c031 --- /dev/null +++ b/SoapyHackRF/SoapyHackRF.info @@ -0,0 +1,10 @@ +PRGNAM="SoapyHackRF" +VERSION="0.3.4" +HOMEPAGE="https://github.com/pothosware/SoapyHackRF" +DOWNLOAD="https://github.com/pothosware/SoapyHackRF/archive/refs/tags/soapy-hackrf-0.3.4.tar.gz" +MD5SUM="7c43fa1c12466013ecc043e71b9b0185" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/SoapyHackRF/slack-desc b/SoapyHackRF/slack-desc new file mode 100644 index 0000000..90c8867 --- /dev/null +++ b/SoapyHackRF/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +SoapyHackRF: SoapyHackRF (SoapySDR HackRF module) +SoapyHackRF: +SoapyHackRF: The Soapy Hack RF project provides a plugin module to use the Hack RF +SoapyHackRF: device within the SoapySDR API and software that supports SoapySDR. +SoapyHackRF: +SoapyHackRF: +SoapyHackRF: +SoapyHackRF: +SoapyHackRF: +SoapyHackRF: +SoapyHackRF: diff --git a/SoapyHackRF/slack-required b/SoapyHackRF/slack-required new file mode 100644 index 0000000..cd8629a --- /dev/null +++ b/SoapyHackRF/slack-required @@ -0,0 +1,2 @@ +hackrf +SoapySDR diff --git a/SoapySDR/README b/SoapySDR/README new file mode 100644 index 0000000..6d0bfaa --- /dev/null +++ b/SoapySDR/README @@ -0,0 +1,10 @@ +Features + +SoapySDR is an open-source generalized C/C++ API and runtime library +for interfacing with SDR devices. With SoapySDR, you can instantiate, +configure, and stream with an SDR device in a variety of environments. +Both osmosdr and uhd devices are available within SoapySDR. In +addition, vendors can directly support their hardware using SoapySDR +device modules. There are wrappers for both gr-osmosdr, uhd, and gr-uhd +to bring an ecosystem of existing applications to SoapySDR devices. And +SoapySDR has support for powerful platforms like GNU Radio and Pothos. diff --git a/SoapySDR/SoapySDR.SlackBuild b/SoapySDR/SoapySDR.SlackBuild new file mode 100755 index 0000000..59dcfd4 --- /dev/null +++ b/SoapySDR/SoapySDR.SlackBuild @@ -0,0 +1,114 @@ +#!/bin/bash + +# Slackware build script for SoapySDR + +# Copyright 2020 Alan Aversa USA +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=SoapySDR +VERSION=${VERSION:-0.8.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +SRCNAM=SoapySDR-soapy-sdr + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC -mfpmath=sse -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2 -mavx -mavx2" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +mkdir -p build +cd build + cmake \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS -rdynamic" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS -rdynamic" \ + -DCMAKE_LINK_FLAGS:STRING="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_SUFFIX=${LIBDIRSUFFIX} \ + -DCMAKE_INSTALL_MANDIR=/usr/man \ + -DCMAKE_BUILD_TYPE=Release .. + + make -j$(nproc) + make install DESTDIR=$PKG +cd .. + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +gzip -9 $PKG/usr/man/man?/*.? + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a README.md LICENSE_1_0.txt Changelog.txt $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/SoapySDR/SoapySDR.info b/SoapySDR/SoapySDR.info new file mode 100644 index 0000000..3b4feb9 --- /dev/null +++ b/SoapySDR/SoapySDR.info @@ -0,0 +1,10 @@ +PRGNAM="SoapySDR" +VERSION="0.8.1" +HOMEPAGE="https://github.com/pothosware/SoapySDR" +DOWNLOAD="https://github.com/pothosware/SoapySDR/archive/soapy-sdr-0.8.1/SoapySDR-soapy-sdr-0.8.1.tar.gz" +MD5SUM="64fbfc0ed4c4fa4dd3c4fe91ebb8c1c3" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/SoapySDR/slack-desc b/SoapySDR/slack-desc new file mode 100644 index 0000000..69437e8 --- /dev/null +++ b/SoapySDR/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +SoapySDR: SoapySDR (vendor and platform neutral SDR support library) +SoapySDR: +SoapySDR: SoapySDR is an open-source generalized C/C++ API and runtime library +SoapySDR: for interfacing with SDR devices. With SoapySDR, you can instantiate, +SoapySDR: configure, and stream with an SDR device in a variety of +SoapySDR: environments. Both osmosdr and uhd devices are available within +SoapySDR: SoapySDR. In addition, vendors can directly support their hardware +SoapySDR: using SoapySDR device modules. There are wrappers for both gr-osmosdr, +SoapySDR: uhd, and gr-uhd to bring an ecosystem of existing applications to +SoapySDR: SoapySDR devices. And SoapySDR has support for powerful platforms like +SoapySDR: GNU Radio and Pothos. diff --git a/axel/README b/axel/README new file mode 100644 index 0000000..3368633 --- /dev/null +++ b/axel/README @@ -0,0 +1,7 @@ +Axel accelerates the HTTP/FTP downloading process by using multiple +connections for one file. It can use multiple mirrors for a download. +Axel has no dependencies and is lightweight, so it might be useful as a +wget clone on byte-critical systems. Axel is the perfect utility for +those connections to wherever you are downloading from that may have a +limit on ftp stream speeds, http sessions that burst and slow down, or +servers with a slow connection. diff --git a/axel/axel.SlackBuild b/axel/axel.SlackBuild new file mode 100644 index 0000000..82c09c7 --- /dev/null +++ b/axel/axel.SlackBuild @@ -0,0 +1,109 @@ +#!/bin/bash + +# Slackware build script for axel + +# Copyright 2008 Antonio Hernández Blas +# Copyright 2011 Matthew "mfillpot" Fillpot +# Copyright 2018-2022 Jostein Berntsen +# Copyright 2022 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +# 20220403 bkw: Modified by SlackBuilds.org, BUILD=2: +# - strip the binary. +# - remove useless INSTALL from package doc dir. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=axel +VERSION=${VERSION:-2.17.11} +BUILD=${BUILD:-2} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \+ + + +CFLAGS="$SLKCFLAGS -flto -rdynamic" \ +CXXFLAGS="$SLKCFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \ + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man + +make -j$(nproc) +make install-strip DESTDIR=$PKG +gzip -9 $PKG/usr/man/man*/* + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a CONTRIBUTING.md COPYING NEWS README.md VERSION $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/axel/axel.info b/axel/axel.info new file mode 100644 index 0000000..209740a --- /dev/null +++ b/axel/axel.info @@ -0,0 +1,10 @@ +PRGNAM="axel" +VERSION="2.17.11" +HOMEPAGE="https://github.com/axel-download-accelerator/axel" +DOWNLOAD="https://github.com/axel-download-accelerator/axel/releases/download/v2.17.11/axel-2.17.11.tar.gz" +MD5SUM="a03b18bc96fda568c6273e7affecbcc8" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/axel/doinst.sh b/axel/doinst.sh new file mode 100644 index 0000000..fa6f314 --- /dev/null +++ b/axel/doinst.sh @@ -0,0 +1,14 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD|md5sum)" = "$(cat $NEW|md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/axelrc.new diff --git a/axel/slack-desc b/axel/slack-desc new file mode 100644 index 0000000..360bd76 --- /dev/null +++ b/axel/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +axel: axel (Download Accelerator) +axel: +axel: Axel tries to accelerate HTTP/FTP downloading process by using +axel: multiple connections for one file. It can use multiple mirrors for +axel: a download. Axel has no dependencies and is lightweight, so it might +axel: be useful as a wget clone on byte-critical systems. +axel: +axel: Homepage: https://github.com/axel-download-accelerator/axel +axel: +axel: +axel: diff --git a/bitlbee/README b/bitlbee/README new file mode 100644 index 0000000..f0063c3 --- /dev/null +++ b/bitlbee/README @@ -0,0 +1,49 @@ +BitlBee is an IRC instant messaging gateway licensed under the terms of +the GPL. It communicates with the end user via the IRC protocol whilst +interacting with popular chat networks such as AIM, ICQ, MSN, Yahoo, +and Jabber. The user's buddies appear as normal IRC users in a channel, +and conversations use the private message facility of IRC. + +After your installation you will need to configure bitlbee. There are +two ways starting bitlbee: Either as a forked daemon (preferred), or +the old way of starting it through inetd (mostly deprecated these days). + +Bitlbee now includes a standard rc.bitlbee. To have this start on bootup, +add the following code to /etc/rc.d/rc.local for example + + if [ -x /etc/rc.d/rc.bitlbee ]; then + /etc/rc.d/rc.bitlbee start + fi + +If you choose to use inetd , you need to modify your /etc/inetd.conf +so bitlbee will be started when /etc/rc.d/rc.inetd is called on bootup. +Add the line below to your /etc/inetd.conf file: + + 6667 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/bitlbee + +Restart inetd (/etc/rc.d/rc.inetd restart). All that is left to do now +is connect your irc client to the localhost. + +OTR (Off the record) is not compiled by default. If you want bitlbee +to compile with OTR capabilities, you'll need to install libotr from +Slackware and run the script as follows: + + OTR=yes ./bitlbee.SlackBuild + +From version 3.2 bitlbee offers some form of skype support, even though +this will not ever be part of bitlbee proper. Please see the documentation +in protocols/skype in the source package for information. You can run the +script as following: + + SKYPE=yes ./bitlbee.SlackBuild + +NOTE: The default "bot"/bitlbee daemon is called 'root'. This is not +the root user on your system. You can easily change it. Register and +identify yourself first, and then: + + rename root BitlBot (or whatever you want) + +NOTE: Since bitlbee now runs as a daemon instead of from inetd, bitlbee +runs under its own user (UID/GID: 250). If you have older databases +of bitlbee, you may want to change the permissions on the files in +/var/lib/bitlbee. diff --git a/bitlbee/bitlbee.SlackBuild b/bitlbee/bitlbee.SlackBuild new file mode 100755 index 0000000..b2a6d45 --- /dev/null +++ b/bitlbee/bitlbee.SlackBuild @@ -0,0 +1,181 @@ +#!/bin/sh + +# Slackware build script for "bitlbee". + +# Copyright 2007-2016 Michiel van Wessem, Leicester, United Kingdom +# Copyright 2016-2017 Marcel Saegebarth +# Copyright 2023 Sergei Fedosoff +# +# 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. +# +# 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. + +PRGNAM=bitlbee +VERSION=${VERSION:-3.6.20230804} +REVISION=acf26c3b667551fd3185acda189b28e166a6568b +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +BITLBEE_USER=${BITLBEE_USER:-250} +BITLBEE_GROUP=${BITLBEE_GROUP:-250} + +# Bail if user or group isn't valid on your system +if ! grep ^bitlbee: /etc/passwd 2>&1 > /dev/null; then + +cat << EOF + + You must have a bitlbee user to run this script + + # groupadd -g $BITLBEE_USER bitlbee + # useradd -u $BITLBEE_USER -d /var/lib/bitlbee -s /bin/false -g bitlbee bitlbee + +EOF + + exit +elif ! grep ^bitlbee: /etc/group 2>&1 > /dev/null; then + +cat << EOF + + You must have a bitlbee group to run this script + # groupadd -g $BITLBEE_GROUP bitlbee + +EOF + exit +fi + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +OTR=${OTR:-no} +if [ "$OTR" = "yes" ]; then + USEOTR=1 +else + USEOTR=0 +fi + +SKYPE=${SKYPE:-no} +if [ "$SKYPE" = "yes" ]; then + USESKYPE=1 +else + USESKYPE=0 +fi + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $TMP/$PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$REVISION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + + +CFLAGS="$SLKCFLAGS -flto -rdynamic" \ +CXXFLAGS="$SLKCFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \ +CPU="$ARCH" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --pcdir=/usr/lib${LIBDIRSUFFIX}/pkgconfig \ + --plugindir=/usr/lib${LIBDIRSUFFIX}/$PRGNAM \ + --config=/var/lib/$PRGNAM \ + --etcdir=/etc/$PRGNAM \ + --datadir=/usr/doc/$PRGNAM-$VERSION \ + --mandir=/usr/man \ + --twitter=1 \ + --ipv6=1 \ + --plugins=1 \ + --debug=0 \ + --purple=0 \ + --strip=1 \ + --ssl=${CRYPT:-openssl} \ + --otr=${USEOTR} \ + --skype=${USESKYPE} \ + --build=$ARCH-slackware-linux + +make -j$(nproc) all +make install install-dev install-etc install-doc install-plugins DESTDIR=$PKG + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ + +for i in $( find $PKG/usr/man -type l ); + do ln -s $( readlink $i ).gz $i.gz; + rm $i; +done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION $PKG/var/lib/$PRGNAM +cp -a \ + COPYING doc/AUTHORS doc/CHANGES doc/CREDITS doc/FAQ doc/INSTALL \ + doc/README doc/HACKING doc/bitlbee.xinetd doc/comic_3.0.png \ + doc/example_plugin.c doc/user-guide/help.txt $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +find $PKG/usr/doc/$PRGNAM-$VERSION -type f -exec \ +sed -i 's#/usr/local/#/usr/#' {} \; +find $PKG/usr/doc/$PRGNAM-$VERSION -type f -exec \ +sed -i 's#/etc/init.d/inetd#/etc/rc.d/rc.inetd#' {} \; + +install -Dpm 0640 $CWD/$PRGNAM.conf $PKG/etc/$PRGNAM/$PRGNAM.conf.new +mv $PKG/etc/$PRGNAM/motd.txt $PKG/etc/$PRGNAM/motd.txt.new +chown -R $BITLBEE_USER:$BITLBEE_GROUP $PKG/var/lib/$PRGNAM + +mkdir -p $PKG/etc/rc.d/ +install -Dpm 0644 $CWD/rc.$PRGNAM $PKG/etc/rc.d/rc.$PRGNAM.new + +mkdir $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/bitlbee/bitlbee.conf b/bitlbee/bitlbee.conf new file mode 100644 index 0000000..5a48c09 --- /dev/null +++ b/bitlbee/bitlbee.conf @@ -0,0 +1,180 @@ +## BitlBee default configuration file +## +## Comments are marked like this. The rest of the file is INI-style. The +## comments should tell you enough about what all settings mean. +## + +[settings] + +## RunMode: +## +## Inetd -- Run from inetd (default) +## Daemon -- Run as a stand-alone daemon, serving all users from one process. +## This saves memory if there are more users, the downside is that when one +## user hits a crash-bug, all other users will also lose their connection. +## ForkDaemon -- Run as a stand-alone daemon, but keep all clients in separate +## child processes. This should be pretty safe and reliable to use instead +## of inetd mode. +## +RunMode = ForkDaemon + +## User: +## +## If BitlBee is started by root as a daemon, it can drop root privileges, +## and change to the specified user. +## +User = bitlbee + +## DaemonPort/DaemonInterface: +## +## For daemon mode, you can specify on what interface and port the daemon +## should be listening for connections. +## +DaemonInterface = 127.0.0.1 +DaemonPort = 6667 + +## ClientInterface: +## +## If for any reason, you want BitlBee to use a specific address/interface +## for outgoing traffic (IM connections, HTTP(S), etc.), set it here. +## +# ClientInterface = 0.0.0.0 + +## AuthMode +## +## Open -- Accept connections from anyone, use NickServ for user authentication. +## (default) +## Closed -- Require authorization (using the PASS command during login) before +## allowing the user to connect at all. +## Registered -- Only allow registered users to use this server; this disables +## the register- and the account command until the user identifies itself. +## +AuthMode = Closed + +## AuthBackend +## +## By default, the authentication data for a user is stored in the storage +## backend. If you want to authenticate against another authentication system +## (e.g. ldap), you can specify that here. +## +## Beware that this disables password changes and causes passwords for the +## accounts people create to be stored in plain text instead of encrypted with +## their bitlbee password. +## +## Currently available backends: +## +## - storage (internal storage) +## - pam (Linux PAM authentication) +## - ldap (LDAP server configured in the openldap settings) +# +AuthBackend = storage +# + +## AuthPassword +## +## Password the user should enter when logging into a closed BitlBee server. +## You can also have a BitlBee-style MD5 hash here. Format: "md5:", followed +## by a hash as generated by "bitlbee -x hash ". +## +AuthPassword = ItllBeBitlBee ## Heh.. Our slogan. ;-) +## or +# AuthPassword = md5:gzkK0Ox/1xh+1XTsQjXxBJ571Vgl + +## OperPassword +## +## Password that unlocks access to special operator commands. +## +OperPassword = ChangeMe! +## or +# OperPassword = md5:I0mnZbn1t4R731zzRdDN2/pK7lRX + +## AllowAccountAdd +## +## Whether to allow registered and identified users to add new accounts using +## 'account add' +## +AllowAccountAdd 1 + +## HostName +## +## Normally, BitlBee gets a hostname using getsockname(). If you have a nicer +## alias for your BitlBee daemon, you can set it here and BitlBee will identify +## itself with that name instead. +## +HostName = localhost + +## MotdFile +## +## Specify an alternative MOTD (Message Of The Day) file. Default value depends +## on the --etcdir argument to configure. +## +MotdFile = /etc/bitlbee/motd.txt + +## ConfigDir +## +## Specify an alternative directory to store all the per-user configuration +## files. (.nicks/.accounts) +## +ConfigDir = /var/lib/bitlbee + +## Ping settings +## +## BitlBee can send PING requests to the client to check whether it's still +## alive. This is not very useful on local servers, but it does make sense +## when most clients connect to the server over a real network interface. +## (Public servers) Pinging the client will make sure lost clients are +## detected and cleaned up sooner. +## +## PING requests are sent every PingInterval seconds. If no PONG reply has +## been received for PingTimeOut seconds, BitlBee aborts the connection. +## +## To disable the pinging, set at least one of these to 0. +## +PingInterval = 180 +PingTimeOut = 300 + +## Using proxy servers for outgoing connections +## +## If you're running BitlBee on a host which is behind a restrictive firewall +## and a proxy server, you can tell BitlBee to use that proxy server here. +## The setting has to be a URL, formatted like one of these examples: +## +## (Obviously, the username and password are optional) +## +# Proxy = http://john:doe@proxy.localnet.com:8080 +# Proxy = socks4://socksproxy.localnet.com +# Proxy = socks5://socksproxy.localnet.com + +## Protocols offered by bitlbee +## +## As recompiling may be quite unpractical for some people, this option +## allows to remove the support of protocol, even if compiled in. If +## nothing is given, there are no restrictions. +## +Protocols = jabber yahoo + +## Trusted CAs +## +## Path to a file containing a list of trusted certificate authorities used in +## the verification of server certificates. +## +## Uncomment this and make sure the file actually exists and contains all +## certificate authorities you're willing to accept (default value should +## work on at least Debian/Ubuntu systems with the "ca-certificates" package +## installed). As long as the line is commented out, SSL certificate +## verification is completely disabled. +## +## The location of this file may be different on other distros/OSes. For +## example, try /etc/ssl/ca-bundle.pem on OpenSUSE. +## +# CAfile = /etc/ssl/certs/ca-certificates.crt + +[defaults] + +## Here you can override the defaults for some per-user settings. Users are +## still able to override your defaults, so this is not a way to restrict +## your users... + +## To enable private mode by default, for example: + +## private = 1 diff --git a/bitlbee/bitlbee.info b/bitlbee/bitlbee.info new file mode 100644 index 0000000..4b993ae --- /dev/null +++ b/bitlbee/bitlbee.info @@ -0,0 +1,10 @@ +PRGNAM="bitlbee" +VERSION="3.6.20230804" +HOMEPAGE="https://www.bitlbee.org" +DOWNLOAD="https://github.com/bitlbee/bitlbee/archive/acf26c3b667551fd3185acda189b28e166a6568b/bitlbee-3.6.20230804.tar.gz" +MD5SUM="e1e844bcfbc1e5061961eef885bf2a0f" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/bitlbee/doinst.sh b/bitlbee/doinst.sh new file mode 100644 index 0000000..746207c --- /dev/null +++ b/bitlbee/doinst.sh @@ -0,0 +1,26 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then # toss the redundant copy + rm $NEW + fi +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +preserve_perms etc/rc.d/rc.bitlbee.new +config etc/bitlbee/bitlbee.conf.new +config etc/bitlbee/motd.txt.new +groupadd -g 250 bitlbee +useradd -u 250 -d /var/lib/bitlbee -s /bin/false -g 250 bitlbee diff --git a/bitlbee/rc.bitlbee b/bitlbee/rc.bitlbee new file mode 100644 index 0000000..84831ab --- /dev/null +++ b/bitlbee/rc.bitlbee @@ -0,0 +1,94 @@ +#!/bin/sh + +# Slackware build script for "bitlbee". + +# Copyright 2007-2016 Michiel van Wessem, Leicester, United Kingdom +# Copyright 2016 Marcel Saegebarth +# Copyright 2016 Avinash H. Duduskar +# Copyright 2023 Sergei Fedosoff +# +# 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. +# +# 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. + +# /etc/rc.d/rc.bitlbee - Start/stop/restart the bitlbee daemon. +# To make bitlbee start automatically at boot, make this +# file executable: chmod 0755 /etc/rc.d/rc.bitlbee and add it +# to slackware's startup scripts (ie: rc.local) +# + +source /etc/defaults/bitlbee +BITLBEE_CONFIG="/etc/bitlbee/bitlbee.conf" +PIDFILE="/run/bitlbee.pid" +SOCKFILE="/run/bitlbee.sock" + +bitlbee_start() { + # make sure bitlbee isn't running yet + if [ ! -f $PIDFILE ]; then + /usr/sbin/bitlbee -P $PIDFILE $BITLBEE_OPTS + else + echo "bitlbee is already active and running under PID: $(cat $PIDFILE)" + echo "if you think this is wrong, remove the offending PID file" + echo "and restart bitlbee" + exit 1 + fi +} + +bitlbee_stop() { + echo -n "Stopping bitlbee..." + + if [ -r $PIDFILE ]; then + kill $(cat $PIDFILE) + + for i in 1 2 3; do + if [ -f $PIDFILE ]; then + sleep 1 + fi + done + + if [ -r $PIDFILE ]; then + kill -9 $(cat $PIDFILE) 2>/dev/null + rm $PIDFILE + fi + + echo "done" + else + echo "Unable to find $PIDFILE and stop bitlbee" + fi +} + +# Let's see how we are being called. +case "$1" in + start) + bitlbee_start + ;; + stop) + bitlbee_stop + ;; + restart) + bitlbee_stop + sleep 3 + bitlbee_start + ;; + *) + echo "Usage: $(basename $0) {start|stop|restart}" + exit 1 + ;; +esac diff --git a/bitlbee/slack-desc b/bitlbee/slack-desc new file mode 100644 index 0000000..76062dc --- /dev/null +++ b/bitlbee/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +bitlbee: bitlbee (an IRC instant messaging gateway) +bitlbee: +bitlbee: BitlBee is an IRC instant messaging gateway licensed under +bitlbee: the terms of the GPLicense. It communicates with the end +bitlbee: user via the IRC protocol whilst interacting with popular +bitlbee: chat networks such as AIM, ICQ, MSN, Yahoo and Jabber. +bitlbee: The users buddies appear as normal IRC users in a channel +bitlbee: and conversations use the private message facility of IRC +bitlbee: compiled with: msn, yahoo, jabber and oscar protocols +bitlbee: Homepage: http://www.bitlbee.org +bitlbee: diff --git a/bluez/bluez-5.51-obexd_without_systemd-1.patch b/bluez/bluez-5.51-obexd_without_systemd-1.patch new file mode 100644 index 0000000..21c99ac --- /dev/null +++ b/bluez/bluez-5.51-obexd_without_systemd-1.patch @@ -0,0 +1,59 @@ +Submitted By: Armin K. +Date: 2013-04-29 +Initial Package Version: 5.17 +Upstream Status: unknown +Origin: Arch Linux (Giovanni Campagna) +Description: Allow using obexd without systemd in the user session + +Not all sessions run systemd --user (actually, the majority +doesn't), so the dbus daemon must be able to spawn obexd +directly, and to do so it needs the full path of the daemon. +--- + Makefile.obexd | 4 ++-- + obexd/src/org.bluez.obex.service | 4 ---- + obexd/src/org.bluez.obex.service.in | 4 ++++ + 3 files changed, 6 insertions(+), 6 deletions(-) + delete mode 100644 obexd/src/org.bluez.obex.service + create mode 100644 obexd/src/org.bluez.obex.service.in + +--- ./Makefile.obexd.orig 2019-09-19 13:51:02.000000000 -0500 ++++ ./Makefile.obexd 2019-09-20 14:10:10.647348607 -0500 +@@ -1,12 +1,12 @@ + if SYSTEMD + systemduserunitdir = $(SYSTEMD_USERUNITDIR) + systemduserunit_DATA = obexd/src/obex.service ++endif + + dbussessionbusdir = $(DBUS_SESSIONBUSDIR) + dbussessionbus_DATA = obexd/src/org.bluez.obex.service +-endif + +-EXTRA_DIST += obexd/src/obex.service.in obexd/src/org.bluez.obex.service ++EXTRA_DIST += obexd/src/obex.service.in obexd/src/org.bluez.obex.service.in + + if OBEX + +diff --git a/obexd/src/org.bluez.obex.service b/obexd/src/org.bluez.obex.service +deleted file mode 100644 +index a538088..0000000 +--- a/obexd/src/org.bluez.obex.service ++++ /dev/null +@@ -1,4 +0,0 @@ +-[D-BUS Service] +-Name=org.bluez.obex +-Exec=/bin/false +-SystemdService=dbus-org.bluez.obex.service +diff --git a/obexd/src/org.bluez.obex.service.in b/obexd/src/org.bluez.obex.service.in +new file mode 100644 +index 0000000..9c815f2 +--- /dev/null ++++ b/obexd/src/org.bluez.obex.service.in +@@ -0,0 +1,4 @@ ++[D-BUS Service] ++Name=org.bluez.obex ++Exec=@libexecdir@/bluetooth/obexd ++SystemdService=dbus-org.bluez.obex.service +-- +1.8.3.1 + + diff --git a/bluez/bluez-5.70.tar.sign b/bluez/bluez-5.70.tar.sign new file mode 100644 index 0000000..86a932c --- /dev/null +++ b/bluez/bluez-5.70.tar.sign @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIcBAABAgAGBQJlFelRAAoJEAbKn10dzyZZkbsP/1H4rf9IiO6QtMfkvj83o+7e +UKGnyRTB3x5ZebDVyK2cc9ODE3jtjpmu+1goWMnI2s+7jd9GAM1hDZIUQcupQGoi +hqcFkGHU5cqV9H40BLPYXAk3GJY3r9DRcGqlB6XrDl2BRPsIXb97q00MA43Wauob +kLMqu1nt2lk92aeFZV1bh8n+evqxJyNMCvUPHcoNb1jIhfA7vXkW1VWagdyGhYMC +y0rVs6S1xcuPV+mBOS2jGtDMtlV8HZ2+TdJ8gTG7Vx08nTTyGnvFgS3fzhsZKFJI +znuUwpvmTeQednDlGkQ5gi5nwdadoKSX7jHxXXd9PyuXaG5WAWJj7SKnBZVbGolG +5JCt6Dlo1Yb9nVbUAAITw9VCjDYibV8K/q06MvAcsusGnWCjiZXhM7RMdOdOx2qt +oRECq5mm5fqnRDwgsf1JDnnJ2sBmKwp7frVds1ehFxHOmOU658RDe894h4Jz8eyi +yOyEgcDhwdNAxr4znhNWikTizM31dqLYSPQQczQ3qzRuA/hovz7qRf2ur8zThRWd +7ddX5xpxRtCH0N5ta4xwxJqxgBBK7l5MAf8ATnKflmH5M8Gr+kJnbzqXGDq9VXtg +MGA7GW5H/h2Bvx5kwk7E4KhewAzufgnUt+akAFvcCei/+bTn1Nb0RW+bLQQH//yi +7CeNF34X0md65QuMXBWE +=dWCv +-----END PGP SIGNATURE----- diff --git a/bluez/bluez.SlackBuild b/bluez/bluez.SlackBuild new file mode 100755 index 0000000..0a094e6 --- /dev/null +++ b/bluez/bluez.SlackBuild @@ -0,0 +1,199 @@ +#!/bin/bash + +# Copyright 2009, 2010, 2011, 2012, 2013, 2016, 2018 Patrick J. Volkerding, Sebeka, Minnesota, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PKGNAM=bluez +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} + +NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "} + +# Automatically determine the architecture we're building on: +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) export ARCH=i586 ;; + arm*) export ARCH=arm ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) export ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "s390" ]; then + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +rm -rf $PKG +mkdir -p $TMP $PKG +cd $TMP +rm -rf $PKGNAM-$VERSION +tar xvf $CWD/${PKGNAM}-${VERSION}.tar.?z || exit 1 +cd $PKGNAM-$VERSION || exit 1 +chown -R root:root . +find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \+ + +cat $CWD/bluez-5.51-obexd_without_systemd-1.patch.gz | patch -p1 --verbose || exit 1 + +sed -i -e 's|-lreadline|\0 -lncursesw|g' Makefile.{in,tools} + +autoreconf -vif + +# We're adding --enable-deprecated due to this commit: +# +# commit b1eb2c4cd057624312e0412f6c4be000f7fc3617 +#Author: Luiz Augusto von Dentz +#Date: Wed Jan 4 14:23:58 2017 +0200 +# +# build: Hide deprecated tools under --enable-deprecated +# +# This marks the following tools as deprecated as they are not longer +# maintained or have been replaced by other tools: +# +# hciattach hciconfig hcitool hcidump rfcomm sdptool ciptool gatttool + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +LDFLAGS="-L/usr/lib$LIBDIRSUFFIX" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --mandir=/usr/man \ + --localstatedir=/var \ + --docdir=/usr/doc/${PKGNAM}-${VERSION} \ + --enable-library \ + --disable-systemd \ + --enable-deprecated \ + --build=$ARCH-slackware-linux || exit 1 + +make $NUMJOBS || make || exit 1 +make install DESTDIR=$PKG || exit 1 + +# Don't ship .la files: +rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la + +# Use reset=1 for the btusb module, which supposedly fixes reconnect problems: +mkdir -p $PKG/lib/modprobe.d +cp -a $CWD/btusb.conf $PKG/lib/modprobe.d +chown root:root $PKG/lib/modprobe.d/btusb.conf +chmod 644 $PKG/lib/modprobe.d/btusb.conf + +# Add bluetoothd to /usr/sbin +mkdir -p $PKG/usr/sbin +ln -s ../libexec/bluetooth/bluetoothd $PKG/usr/sbin + +# Move the dbus config file to the system directory +mkdir -p $PKG/usr/share/dbus-1/system.d/ +mv $PKG/etc/dbus-1/system.d/* $PKG/usr/share/dbus-1/system.d/ +rmdir --parents $PKG/etc/dbus-1/system.d/ + +# Fix substitution in /usr/share/dbus-1/services/org.bluez.obex.service: +if [ -x $PKG/usr/libexec/bluetooth/obexd ]; then + sed -i "s|@libexecdir@|/usr/libexec|g" $PKG/usr/share/dbus-1/services/org.bluez.obex.service +fi + +# Install the configuration files +mkdir -p $PKG/etc/bluetooth $PKG/etc/default +cat src/main.conf > $PKG/etc/bluetooth/main.conf.new +cat profiles/input/input.conf > $PKG/etc/bluetooth/input.conf.new +cat profiles/network/network.conf > $PKG/etc/bluetooth/network.conf.new +cat $CWD/config/uart.conf > $PKG/etc/bluetooth/uart.conf.new +cat $CWD/config/defaultconfig > $PKG/etc/default/bluetooth.new + +# Add an init script +mkdir -p $PKG/etc/rc.d +cat $CWD/config/rc.bluetooth > $PKG/etc/rc.d/rc.bluetooth.new + +# Let's go ahead and let that start by default, unless an existing init +# script is not executable: +chmod 755 $PKG/etc/rc.d/rc.bluetooth.new + +# If the deprecated utility gatttool was built, go ahead and install it: +if [ -x attrib/gatttool ]; then + cp attrib/gatttool $PKG/usr/bin + chown root:root $PKG/usr/bin/gatttool + chmod 755 $PKG/usr/bin/gatttool +fi + +# Compress and if needed symlink the man pages: +if [ -d $PKG/usr/man ]; then + ( cd $PKG/usr/man + for manpagedir in $(find . -type d -name "man*") ; do + ( cd $manpagedir + for eachpage in $( find . -type l -maxdepth 1) ; do + ln -s $( readlink $eachpage ).gz $eachpage.gz + rm $eachpage + done + gzip -9 *.? + ) + done + ) +fi + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a \ + AUTHORS COPYING* INSTALL README* TODO \ + $PKG/usr/doc/$PKGNAM-$VERSION + +# If there's a ChangeLog, installing at least part of the recent history +# is useful, but don't let it get totally out of control: +if [ -r ChangeLog ]; then + DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION) + cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog + touch -r ChangeLog $DOCSDIR/ChangeLog +fi + +mkdir -p $PKG/install + +cat $CWD/doinst.sh.gz > $PKG/install/doinst.sh +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz diff --git a/bluez/bluez.url b/bluez/bluez.url new file mode 100644 index 0000000..34d9166 --- /dev/null +++ b/bluez/bluez.url @@ -0,0 +1 @@ +http://www.kernel.org/pub/linux/bluetooth diff --git a/bluez/btusb.conf b/bluez/btusb.conf new file mode 100644 index 0000000..3072d78 --- /dev/null +++ b/bluez/btusb.conf @@ -0,0 +1,3 @@ +# use "reset=1" as default, since it should be safe for recent devices and +# solves all kind of problems. +options btusb reset=1 diff --git a/bluez/config/defaultconfig b/bluez/config/defaultconfig new file mode 100644 index 0000000..52793c6 --- /dev/null +++ b/bluez/config/defaultconfig @@ -0,0 +1,9 @@ +# /etc/default/bluetooth + +# A space delimited list of devices to start at boot time: +ACTIVE_HCI_DEVICES_ON_BOOT="hci0" + +# A semicolon delimited list of SDP (Service Discovery Protocol) +# operations for bluetooth devices. See the sdptool for more details. +SDPTOOL_OPTIONS="" + diff --git a/bluez/config/rc.bluetooth b/bluez/config/rc.bluetooth new file mode 100644 index 0000000..fb5b8d6 --- /dev/null +++ b/bluez/config/rc.bluetooth @@ -0,0 +1,74 @@ +#!/bin/bash + +# /etc/rc.d/rc.bluetooth (based on BLFS script) + +# Populated from /etc/default/bluetooth: +# ACTIVE_HCI_DEVICES_ON_BOOT and SDPTOOL_OPTIONS + +[ -r /etc/default/bluetooth ] && . /etc/default/bluetooth + +start_hci_dev() { + for dev in ${ACTIVE_HCI_DEVICES_ON_BOOT} ; do + hciconfig $dev up > /dev/null 2>&1 + done +} + +run_sdptool() { + # Declaring IFS local in this function, removes the need to save/restore it + local IFS option + test -x /usr/bin/sdptool || return 1 + IFS=";" + for option in ${SDPTOOL_OPTIONS}; do + IFS=" " + /usr/bin/sdptool $option > /dev/null 2>&1 + done +} + +start_uarts() { + [ -r /etc/bluetooth/uart.conf ] || return + grep -v '^[[:space:]]*(#|$)' /etc/bluetooth/uart.conf | grep -v "^#" | sed -r '/^\s*$/d' | while read i; do + /usr/bin/hciattach $i > /dev/null 2>&1 + done +} + +stop_uarts() { + killall /usr/bin/hciattach > /dev/null 2>&1 +} + +start() { + if [ -d /sys/class/bluetooth ]; then + # Start as background process and assume OK + echo -n "Starting Bluetooth services: bluetoothd " + /usr/sbin/bluetoothd & + echo -n "hciconfig " + start_hci_dev + echo -n "sdptool " + run_sdptool + echo "hciattach" + start_uarts + fi +} + +stop() { + stop_uarts + killall /usr/sbin/bluetoothd > /dev/null 2>&1 +} + +case "${1}" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + sleep 1 + start + ;; + *) + echo "Usage: ${0} {start|stop|restart}" + exit 1 + ;; +esac + diff --git a/bluez/config/uart.conf b/bluez/config/uart.conf new file mode 100644 index 0000000..b2e276f --- /dev/null +++ b/bluez/config/uart.conf @@ -0,0 +1,6 @@ +# /etc/bluetooth/uart.conf + +# Attach serial devices via UART HCI to BlueZ stack +# Use one line per device +# See the hciattach man page for options + diff --git a/bluez/doinst.sh b/bluez/doinst.sh new file mode 100644 index 0000000..796630f --- /dev/null +++ b/bluez/doinst.sh @@ -0,0 +1,26 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +# Keep same perms on rc.bluetooth.new: +if [ -e etc/rc.d/rc.bluetooth ]; then + cp -a etc/rc.d/rc.bluetooth etc/rc.d/rc.bluetooth.new.incoming + cat etc/rc.d/rc.bluetooth.new > etc/rc.d/rc.bluetooth.new.incoming + mv etc/rc.d/rc.bluetooth.new.incoming etc/rc.d/rc.bluetooth.new +fi + +config etc/rc.d/rc.bluetooth.new +config etc/bluetooth/input.conf.new +config etc/bluetooth/main.conf.new +config etc/bluetooth/network.conf.new +config etc/bluetooth/uart.conf.new +config etc/default/bluetooth.new + diff --git a/bluez/slack-desc b/bluez/slack-desc new file mode 100644 index 0000000..8b7d76e --- /dev/null +++ b/bluez/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +bluez: bluez (Bluetooth libraries and utilities) +bluez: +bluez: Bluez is the Bluetooth stack for Linux, allowing Bluetooth adaptors +bluez: and devices to be used with Linux. This package contains the Bluez +bluez: libraries, utilities, and other support files. +bluez: +bluez: Homepage: http://www.bluez.org +bluez: +bluez: +bluez: +bluez: diff --git a/cabextract/README b/cabextract/README new file mode 100644 index 0000000..1d289fa --- /dev/null +++ b/cabextract/README @@ -0,0 +1,8 @@ +cabextract is Free Software for extracting Microsoft cabinet files, +also called .CAB files, on UNIX or UNIX-like systems. cabextract is +distributed under the GPL license. It is based on the portable LGPL +libmspack library. cabextract supports all special features and all +compression formats of Microsoft cabinet files. +Microsoft cabinet files are used to distribute all kinds of data and +software: core Web fonts, Longhorn videos, operating system updates +and video codecs, to give some examples. diff --git a/cabextract/cabextract.SlackBuild b/cabextract/cabextract.SlackBuild new file mode 100755 index 0000000..8f89df0 --- /dev/null +++ b/cabextract/cabextract.SlackBuild @@ -0,0 +1,117 @@ +#!/bin/bash + +# Slackware build script for cabextract + +# Copyright 2006-2010 Yalla-One +# Copyright 2011-2023 Gregory J. L. Tourte +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=cabextract +VERSION=${VERSION:-1.11} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root.root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="$SLKCFLAGS -rdynamic" \ +CXXFLAGS="$SLKCFLAGS -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --localstatedir=/var \ + --sysconfdir=/etc \ + --mandir=/usr/man \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make check +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a AUTHORS COPYING ChangeLog NEWS README TODO doc/wince_cab_format.html $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/etc/file/magic +install -m 644 doc/magic $PKG/etc/file/magic/mscabinet + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/cabextract/cabextract.info b/cabextract/cabextract.info new file mode 100644 index 0000000..68f38ff --- /dev/null +++ b/cabextract/cabextract.info @@ -0,0 +1,10 @@ +PRGNAM="cabextract" +VERSION="1.11" +HOMEPAGE="https://www.cabextract.org.uk" +DOWNLOAD="https://www.cabextract.org.uk/cabextract-1.11.tar.gz" +MD5SUM="3f678e8cb815f26d73e9413913b20505" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/cabextract/slack-desc b/cabextract/slack-desc new file mode 100644 index 0000000..a0ca4d6 --- /dev/null +++ b/cabextract/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +cabextract: cabextract (Extract Microsoft cabinet files) +cabextract: +cabextract: cabextract is Free Software for extracting Microsoft cabinet files, +cabextract: also called .CAB files, on UNIX or UNIX-like systems. cabextract is +cabextract: distributed under the GPL license. It is based on the portable LGPL +cabextract: libmspack library. cabextract supports all special features and all +cabextract: compression formats of Microsoft cabinet files. +cabextract: Microsoft cabinet files are used to distribute all kinds of data and +cabextract: software: core Web fonts, Longhorn videos, operating system updates +cabextract: and video codecs, to give some examples. +cabextract: diff --git a/chrony/10-main.conf b/chrony/10-main.conf new file mode 100644 index 0000000..ec48f80 --- /dev/null +++ b/chrony/10-main.conf @@ -0,0 +1,17 @@ +# Time drift stats history +driftfile /var/lib/chrony/drift + +# Log here +logdir /var/log/chrony + +# Lock process in memory, disable swapping +lock_all + +# For quickier time sync during boot-up process +makestep 1.0 3 + +# Sync time to system clock +rtcsync + +# No remote control/monitoring +cmdport 0 diff --git a/chrony/50-sources.conf b/chrony/50-sources.conf new file mode 100644 index 0000000..df9d18d --- /dev/null +++ b/chrony/50-sources.conf @@ -0,0 +1 @@ +pool pool.ntp.org iburst diff --git a/chrony/README b/chrony/README new file mode 100644 index 0000000..ec4e0b3 --- /dev/null +++ b/chrony/README @@ -0,0 +1,20 @@ +chrony is a versatile implementation of the Network Time Protocol (NTP). It can +synchronise the system clock with NTP servers, reference clocks (e.g. GPS +receiver), and manual input using wristwatch and keyboard. It can also operate +as an NTPv4 (RFC 5905) server and peer to provide a time service to other +computers in the network. + +It is designed to perform well in a wide range of conditions, including +intermittent network connections, heavily congested networks, changing +temperatures (ordinary computer clocks are sensitive to temperature), and +systems that do not run continuosly, or run on a virtual machine. + +Typical accuracy between two machines synchronised over the Internet is within +a few milliseconds; on a LAN, accuracy is typically in tens of microseconds. +With hardware timestamping, or a hardware reference clock, sub-microsecond +accuracy may be possible. + +Two programs are included in chrony, chronyd is a daemon that can be started +at boot time and chronyc is a command-line interface program which can be used +to monitor chronyd’s performance and to change various operating parameters +whilst it is running. diff --git a/chrony/chrony.SlackBuild b/chrony/chrony.SlackBuild new file mode 100644 index 0000000..5b023e5 --- /dev/null +++ b/chrony/chrony.SlackBuild @@ -0,0 +1,119 @@ +#!/bin/sh + +# Slackware build script for chrony + +# Copyright 2015-2018 Richard Ellis (USA) +# Copyright 2020 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=chrony +VERSION=${VERSION:-4.2} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +CC=${CC:-gcc} \ +CFLAGS="$SLKCFLAGS -flto -rdynamic" \ +CXXFLAGS="$SLKCFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \ +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --with-user=ntp \ + --enable-ntp-signd \ + --with-pidfile=/run/chrony/chrony.pid \ + --with-hwclockfile=/etc/adjtime \ + --with-rtcdevice=/dev/rtc \ + --chronyvardir=/var/lib/chrony \ + --chronyrundir=/run/chrony \ + --with-sendmail=/usr/sbin/sendmail + +make -j$(nproc) +make install DESTDIR=$PKG + +install -Dpm 0644 $CWD/chrony.conf $PKG/etc/chrony.conf.new +install -Dpm 0644 $CWD/10-main.conf $PKG/etc/chrony.d/10-main.conf.new +install -Dpm 0644 $CWD/50-sources.conf $PKG/etc/chrony.d/50-sources.conf.new +install -Dpm 0644 $CWD/rc.chrony $PKG/etc/rc.d/rc.chrony.new + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ + +for i in $( find $PKG/usr/man -type l ); do + ln -s $( readlink $i ).gz $i.gz + rm $i +done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a contrib/ examples/ COPYING FAQ INSTALL NEWS README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/chrony/chrony.conf b/chrony/chrony.conf new file mode 100644 index 0000000..aed94d2 --- /dev/null +++ b/chrony/chrony.conf @@ -0,0 +1 @@ +confdir /etc/chrony.d diff --git a/chrony/chrony.info b/chrony/chrony.info new file mode 100644 index 0000000..24092a6 --- /dev/null +++ b/chrony/chrony.info @@ -0,0 +1,10 @@ +PRGNAM="chrony" +VERSION="4.2" +HOMEPAGE="https://chrony.tuxfamily.org/" +DOWNLOAD="https://download.tuxfamily.org/chrony/chrony-4.2.tar.gz" +MD5SUM="07282f8e76a4399d6c17009bb6345614" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/chrony/doinst.sh b/chrony/doinst.sh new file mode 100644 index 0000000..6a570ad --- /dev/null +++ b/chrony/doinst.sh @@ -0,0 +1,25 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + rm $NEW + fi +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +config etc/chrony.conf.new +config etc/chrony.d/10-main.conf.new +config etc/chrony.d/50-sources.conf.new +preserve_perms etc/rc.d/rc.chrony.new diff --git a/chrony/rc.chrony b/chrony/rc.chrony new file mode 100644 index 0000000..47135fb --- /dev/null +++ b/chrony/rc.chrony @@ -0,0 +1,86 @@ +#!/bin/bash + +set -e + +DAEMON=/usr/sbin/chronyd +RUNDIR=/run/chrony +VARDIR=/var/lib/chrony +LOGDIR=/var/log/chrony +PIDFILE=${RUNDIR}/chrony.pid +USER=ntp +GROUP=ntp + +# Start/stop/restart chrony daemon. +__start() { + if [ -e $RUNDIR ]; then + chown -R ${USER}:${GROUP} $RUNDIR + else + install -dm 0750 -o $USER -g $GROUP $RUNDIR + fi + + if [ -e $VARDIR ]; then + chown -R ${USER}:${GROUP} $VARDIR + else + install -dm 0755 -o $USER -g $GROUP $VARDIR + fi + + if [ -e $LOGDIR ]; then + chown -R ${USER}:${GROUP} $LOGDIR + else + install -dm 0755 -o $USER -g $GROUP $LOGDIR + fi + + if [ -e ${VARDIR}/drift ]; then + : + else + touch ${VARDIR}/drift + fi + + chown ${USER}:${GROUP} ${VARDIR}/drift + + if [ -x $DAEMON ]; then + echo "Starting NTP daemon: $DAEMON -m" + $DAEMON -m + fi +} + +__stop() { + echo "Stopping NTP daemon: $DAEMON -m" + if [ -r $PIDFILE ]; then + kill $(cat $PIDFILE) + else + echo "Chronyd is not running" + fi +} + +__restart() { + __stop + + for i in 1 2 3; do + if [ -r $PIDFILE ]; then + # ash/dash/nash builtin echo just ignoring -n option + /usr/bin/echo -n "." + sleep 1 + else + break + fi + done + + echo + + __start +} + +case "$1" in +'start') + __start + ;; +'stop') + __stop + ;; +'restart') + __restart + ;; +*) + echo "usage $0 start|stop|restart" +esac diff --git a/chrony/slack-desc b/chrony/slack-desc new file mode 100644 index 0000000..06b6f10 --- /dev/null +++ b/chrony/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +chrony: chrony (maintains accuracy of the real time clock via NTP) +chrony: +chrony: chrony is a versatile implementation of the Network Time Protocol. +chrony: It can synchronise the system clock with NTP servers, reference +chrony: clocks (e.g. GPS receiver), and manual input using wristwatch and +chrony: keyboard. It can also operate as an NTPv4 (RFC 5905) server and peer +chrony: to provide a time service to other computers in the network. +chrony: +chrony: Homepage: https://chrony.tuxfamily.org/ +chrony: +chrony: diff --git a/containerd/README b/containerd/README new file mode 100644 index 0000000..a67e40b --- /dev/null +++ b/containerd/README @@ -0,0 +1,4 @@ +Containerd is a daemon to control runC, built for performance and +density. Containerd leverages runC's advanced features such as seccomp +and user namespace support as well as checkpoint and restore for cloning +and live migration of containers. diff --git a/containerd/containerd.SlackBuild b/containerd/containerd.SlackBuild new file mode 100755 index 0000000..dc10583 --- /dev/null +++ b/containerd/containerd.SlackBuild @@ -0,0 +1,96 @@ +#!/bin/sh + +# Slackware build script for containerd + +# Copyright 2016 Asaf Ohayon +# Copyright 2017-2019 Audrius Kažukauskas +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=containerd +VERSION=${VERSION:-1.7.8} +GITHASH=${GITHASH:-8e4b0bd} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +sed -i \ + -e "s/git describe --match.*$/echo ${VERSION})/" \ + -e "s/git rev-parse HEAD.*$/echo ${GITHASH})/" \ + -e 's/-s -w //' \ + Makefile + +mkdir build +mv vendor build/src +ln -sf $TMP/$PRGNAM-$VERSION build/src/github.com/containerd/containerd + +make \ + EXTRA_LDFLAGS="-s -w" \ + EXTRA_FLAGS="-a -gcflags=all=-l" \ + BUILDTAGS="seccomp" \ + GIT_COMMIT=$GITHASH \ + GOPATH=$TMP/$PRGNAM-$VERSION/build + +# Install executables. +install -Dpm 0755 bin/containerd $PKG/usr/bin/containerd +install -Dpm 0755 bin/containerd-shim $PKG/usr/bin/containerd-shim +install -Dpm 0755 bin/containerd-shim-runc-v1 $PKG/usr/bin/containerd-shim-runc-v1 +install -Dpm 0755 bin/containerd-shim-runc-v2 $PKG/usr/bin/containerd-shim-runc-v2 +install -Dpm 0755 bin/containerd-stress $PKG/usr/bin/containerd-stress +install -Dpm 0755 bin/ctr $PKG/usr/bin/ctr + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a README.md LICENSE NOTICE $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/containerd/containerd.info b/containerd/containerd.info new file mode 100644 index 0000000..cb0a2a7 --- /dev/null +++ b/containerd/containerd.info @@ -0,0 +1,11 @@ +PRGNAM="containerd" +VERSION="1.7.8" +HOMEPAGE="https://containerd.io/" +DOWNLOAD="UNSUPPORTED" +MD5SUM="" +DOWNLOAD_x86_64="https://github.com/containerd/containerd/archive/v1.7.8/containerd-1.7.8.tar.gz" +MD5SUM_x86_64="8fdec29052484dd4e11186014dab9f46" +BUILDREQUIRES="google-go-lang" +REQUIRES="runc" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/containerd/slack-desc b/containerd/slack-desc new file mode 100644 index 0000000..d84a2a3 --- /dev/null +++ b/containerd/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +containerd: containerd (a daemon to control runC) +containerd: +containerd: Containerd is a daemon to control runC, built for performance and +containerd: density. Containerd leverages runC's advanced features such as +containerd: seccomp and user namespace support as well as checkpoint and restore +containerd: for cloning and live migration of containers. +containerd: +containerd: Homepage: https://containerd.io/ +containerd: +containerd: +containerd: diff --git a/containerd/slack-required b/containerd/slack-required new file mode 100644 index 0000000..fef31a3 --- /dev/null +++ b/containerd/slack-required @@ -0,0 +1 @@ +runc diff --git a/cpanminus/README b/cpanminus/README new file mode 100644 index 0000000..1fa712d --- /dev/null +++ b/cpanminus/README @@ -0,0 +1,2 @@ +cpanminus (or cpanm) is a script to get, unpack, build, and install +modules from CPAN without needing configuration. diff --git a/cpanminus/cpanminus.SlackBuild b/cpanminus/cpanminus.SlackBuild new file mode 100644 index 0000000..2de6ca9 --- /dev/null +++ b/cpanminus/cpanminus.SlackBuild @@ -0,0 +1,99 @@ +#!/bin/sh + +# Slackware build script for cpanminus + +# Copyright 2017 Andreas Guldstrand. +# Copyright 2022 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=cpanminus +VERSION=${VERSION:-1.7044} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM="App-cpanminus" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN1DIR=/usr/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make test +make install DESTDIR=$PKG + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a Changes LICENSE README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/cpanminus/cpanminus.info b/cpanminus/cpanminus.info new file mode 100644 index 0000000..5e7b022 --- /dev/null +++ b/cpanminus/cpanminus.info @@ -0,0 +1,10 @@ +PRGNAM="cpanminus" +VERSION="1.7044" +HOMEPAGE="https://metacpan.org/pod/App::cpanminus" +DOWNLOAD="https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz" +MD5SUM="6e76f94dced6d4672686a30d16f8e890" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/cpanminus/slack-desc b/cpanminus/slack-desc new file mode 100644 index 0000000..f95ff5c --- /dev/null +++ b/cpanminus/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +cpanminus: cpanminus (App::cpanminus) +cpanminus: +cpanminus: cpanminus (or cpanm) is a script to get, unpack, build, and install +cpanminus: modules from CPAN without needing configuration. +cpanminus: +cpanminus: +cpanminus: +cpanminus: +cpanminus: +cpanminus: +cpanminus: diff --git a/daemonize/README b/daemonize/README new file mode 100644 index 0000000..048ce4b --- /dev/null +++ b/daemonize/README @@ -0,0 +1 @@ +Daemonize allows you to run a command as a Unix daemon. diff --git a/daemonize/daemonize.SlackBuild b/daemonize/daemonize.SlackBuild new file mode 100644 index 0000000..afbb9c5 --- /dev/null +++ b/daemonize/daemonize.SlackBuild @@ -0,0 +1,97 @@ +#!/bin/bash + +# Slackware build script for daemonize + +# Copyright 2020 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=daemonize +VERSION=${VERSION:-1.7.8} +BUILD=${BUILD:-2} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +fi + +set -eu + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-release-$VERSION +chown -R root:root . +find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \+ + +CFLAGS="$SLKCFLAGS -flto -rdynamic" \ +CXXFLAGS=$CFLAGS \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2, -Wl,-s" \ +./configure \ + --prefix=/usr \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --build=$ARCH-slackware-linux \ + --quiet + +make -j$(nproc) +make install INSTALL_MAN=/usr/man DESTDIR=$PKG + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + +gzip -9 $PKG/usr/man/man1/daemonize.1 + +install -Dpm 0644 README.md $PKG/usr/doc/$PRGNAM-$VERSION/README.md +install -Dpm 0644 LICENSE.md $PKG/usr/doc/$PRGNAM-$VERSION/LICENSE.md +install -Dpm 0644 $CWD/$PRGNAM.SlackBuild $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} \ No newline at end of file diff --git a/daemonize/daemonize.info b/daemonize/daemonize.info new file mode 100644 index 0000000..e436d1d --- /dev/null +++ b/daemonize/daemonize.info @@ -0,0 +1,10 @@ +PRGNAM="daemonize" +VERSION="1.7.8" +HOMEPAGE="http://software.clapper.org/daemonize/" +DOWNLOAD="https://github.com/bmc/daemonize/archive/release-1.7.8/daemonize-1.7.8.tar.gz" +MD5SUM="8eeff9d447292410f9956feeeb4ff24b" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/daemonize/slack-desc b/daemonize/slack-desc new file mode 100644 index 0000000..07c089a --- /dev/null +++ b/daemonize/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +daemonize: daemonize (run a program as a daemon) +daemonize: +daemonize: daemonize allows you to run a program as a Unix daemon. +daemonize: +daemonize: Homepage: http://software.clapper.org/daemonize/ +daemonize: +daemonize: +daemonize: +daemonize: +daemonize: +daemonize: diff --git a/davfs2/MINI_HOWTO b/davfs2/MINI_HOWTO new file mode 100644 index 0000000..85c75d6 --- /dev/null +++ b/davfs2/MINI_HOWTO @@ -0,0 +1,93 @@ +HOW TO CONNECT WITH A WEBDAV SERVER WITH THE DAVF2 APPLICATION + +In this HOWTO, the user is named "chris" +Amend as required for your choice of username. + +1. Login as root + +2. Define a davfs2 group and user: + + # groupadd -g 230 davfs2 + # useradd -u 230 -d /var/cache/davfs2 -g davfs2 -s /bin/false davfs2 + +3. Build and install davfs2 as usual. + +4. Add the user if not already defined. My user shall be called chris, so: + + # adduser chris + + Read the Slackbook for more details on adduser, choose default settings BUT: + with the default group list add also davfs2: + + Press ENTER to continue without adding any additional groups + Or press the UP arrow to add/select/edit additional groups + : audio cdrom floppy plugdev video power netdev lp scanner davfs2 + + If the user was already defined, then add davfs2 to the groups: + + # usermod -aG davfs2 chris + +5. Edit /etc/fstab with the following line: + WEBDAV_SERVER_URL mount_point davfs noauto,user 0 0 + + For example: + https://example.org/chris /home/chris/mnt/dav davfs noauto,user 0 0 + +6. logout + +7. Login again as your davfs user ("chris" in my case). + +8. $ mkdir -p $HOME/.davfs2/certs/private/ $HOME/mnt/dav + +9. Move the certificate to $HOME/davfs2/certs/private and restrict the permission to rw-------: + For example: + + $ mv CERTIFICATE.PFX $HOME/.davfs2/certs/private/ + $ chmod 600 $HOME/.davfs2/certs/private/CERIFICATE.PFX + +10. Optionally: Copy the system configuration file. There are a lot of + interesting comments in these files that might be helpful. + + $ cp /usr/share/davfs2/* $HOME/.davfs2/ + +11. Edit $HOME/.davfs2/davfs2.conf with the following line: + + clientcert ~/.davfs2/certs/private/CERTIFICATE.PFX + + Read: + + $ man davfs2.conf + + for all the details and options. Tests have shown that you might need more + than the line above, so you may want to read about other interesting + parameters, e.g.: + + add_header Translate F + +12. Edit $HOME/.davfs2/secrets with the following 2 lines: + + /home/chris/mnt/dav username password + CERTIFICATE.PFX passphrase + + The username and password are relevant to the Webdav server, not for the + local account. + passphrase is the password for the PFX certificate + You should obtain all these from the Webdav server Administrator + +13. Restrict permssion for $HOME/.davfs2/secrets to rw-------: + + $ chmod 600 $HOME/.davfs2/secrets + +14. Mount the davfs service on $HOME/mnt/dav + + $ mount $HOME/mnt/dav + + You should be able to see your WEBDAV server on $HOME/mnt/dav/ + +15. When you would like to disconnect: + + $ umount $HOME/mnt/dav + + You should get a similar response (the pid number is random): + + /sbin/umount.davfs: waiting while mount.davfs (pid 5700) synchronizes the cache .. OK diff --git a/davfs2/README b/davfs2/README new file mode 100644 index 0000000..ac75c77 --- /dev/null +++ b/davfs2/README @@ -0,0 +1,11 @@ +Web Distributed Authoring and Versioning (WebDAV), an extension to the HTTP- +protocol, allows authoring of resources on a remote web server. davfs2 +provides the ability to access such resources like a typical filesystem, +allowing for use by standard applications with no built-in support for WebDAV. + +Before running this SlackBuild, define a davfs2 group and a davfs2 user. The +davfs2 user shall have davfs2 as its initial login group, shall not have no +shell and the home directory shall be /var/cache/davfs. Examples: + +# groupadd -g 230 davfs2 +# useradd -u 230 -d /var/cache/davfs2 -g davfs2 -s /bin/false davfs2 diff --git a/davfs2/davfs2.SlackBuild b/davfs2/davfs2.SlackBuild new file mode 100644 index 0000000..7b6b687 --- /dev/null +++ b/davfs2/davfs2.SlackBuild @@ -0,0 +1,133 @@ +#!/bin/sh + +# Slackware build script for davfs2 + +# Copyright (c) 2008, Justin H Haynes +# Copyright (c) 2012 Chris Abela, Malta +# Copyright 2014 Ryan P.C. McQuen, WA, ryanpcmcquen@member.fsf.org +# Copyright 2014, 2016 Chris Abela, Malta +# Copyright 2022 Sergei Fedosoff +# +# 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. + +# Modified by Robby Workman + +PRGNAM=davfs2 +VERSION=${VERSION:-1.6.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +DAVFS2_USER=${DAVFS2_USER:-davfs2} +DAVFS2_GROUP=${DAVFS2_GROUP:-davfs2} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +# davfs2 user & group *MUST* exist before package creation +# See http://slackbuilds.org/uid_gid.txt for current recomendations. + +if ! grep -q "^$DAVFS2_GROUP:" /etc/group; then + echo "$0: Error: DAVFS2 group ($DAVFS2_GROUP) doesn't exist." + echo "$0: Try creating one with: \ + # groupadd -g 230 $DAVFS2_GROUP" + exit 1 +fi + +if ! grep -q "^$DAVFS2_USER:" /etc/passwd; then + echo "$0: Error: DAVFS2 user ($DAVFS2_USER) doesn't exist." + echo "$0: Try creating one with: \ + # useradd -u 230 -d /var/cache/davfs2 -g $DAVFS2_GROUP -s /bin/false $DAVFS2_USER" + exit 1 +fi + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +dav_user=$DAVFS2_USER \ +dav_group=$DAVFS2_GROUP \ +CFLAGS="-g $SLKFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +CXXFLAGS="$CFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# Let's not clobber the system config files +mv $PKG/etc/davfs2/davfs2.conf $PKG/etc/davfs2/davfs2.conf.new +mv $PKG/etc/davfs2/secrets $PKG/etc/davfs2/secrets.new + +cp -a ABOUT-NLS $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +# davfs2 autobuild places mount.davfs and umount.davfs in /usr/sbin +# and places symlinks in /sbin. In Slackware, our mount backends +# only belong in /sbin, so let's put them there and adjust the links +( cd $PKG/usr/sbin + for i in * ; do + mv $i ../../sbin + ln -s ../../sbin/$i $i + done +) + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/davfs2/davfs2.info b/davfs2/davfs2.info new file mode 100644 index 0000000..1eee746 --- /dev/null +++ b/davfs2/davfs2.info @@ -0,0 +1,16 @@ +PRGNAM="davfs2" +VERSION="1.6.1" +HOMEPAGE="http://savannah.nongnu.org/projects/davfs2" +DOWNLOAD="http://download.savannah.nongnu.org/releases/davfs2/davfs2-1.6.1.tar.gz" +MD5SUM="04c82c25663f7dae5931002aa8ffea06" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +GROUP="davfs2" +GID="230" +USER="davfs2" +UID="230" +USER_SHELL="/bin/false" +USER_HOME="/var/cache/davfs2" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/davfs2/doinst.sh b/davfs2/doinst.sh new file mode 100644 index 0000000..c246ac8 --- /dev/null +++ b/davfs2/doinst.sh @@ -0,0 +1,15 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/davfs2/davfs2.conf.new +config etc/davfs2/secrets.new diff --git a/davfs2/slack-desc b/davfs2/slack-desc new file mode 100644 index 0000000..709e92c --- /dev/null +++ b/davfs2/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +davfs2: davfs2 (virtual filesystem driver for WebDAV) +davfs2: +davfs2: Web Distributed Authoring and Versioning (WebDAV), an extension to the +davfs2: HTTP-protocol, allows authoring of resources on a remote web server. +davfs2: davfs2 provides the ability to access such resources like a typical +davfs2: filesystem, allowing for use by standard applications with no built-in +davfs2: support for WebDAV. +davfs2: +davfs2: Homepage: http://savannah.nongnu.org/projects/davfs2 +davfs2: +davfs2: diff --git a/deadbeef/README b/deadbeef/README new file mode 100644 index 0000000..318bd1e --- /dev/null +++ b/deadbeef/README @@ -0,0 +1,28 @@ +DeaDBeeF (as in 0xDEADBEEF) is an audio player for GNU/Linux systems +with X11 (though now it also runs in plain console without X, in FreeBSD, +and in OpenSolaris). + +Main features: +* mp3, ogg vorbis, flac, ape, wv, wav, m4a, mpc, cd audio (and many more) +* sid, nsf and lots of other popular chiptune formats +* ID3v1, ID3v2.2, ID3v2.3, ID3v2.4, APEv2, xing/info tags support +* character set detection for non-unicode id3 tags - supports cp1251 and + iso8859-1 +* unicode tags are fully supported as well (both utf8 and ucs2) +* cuesheet (.cue files) support, with charset detection (utf8/cp1251/iso8859-1) +* tracker modules like mod, s3m, it, xm, etc +* HVSC song length database support for sid +* gtk2 interface with efficient custom widgets +* no GNOME or KDE dependencies +* minimize to tray, with scrollwheel volume control +* drag and drop, both inside of playlist, and from filemanagers and such +* control playback from command line +* global hotkeys +* plugin support; bundled with lots of plugins, such as global hotkeys and + last.fm scrobbler; sdk is included +* duration calculation is as precise as possible for vbr mp3 files (with and + without xing/info tags) +* was tested and works on x86, x86_64 and ppc64 architectures. should work on + most modern platforms + +ffmpeg is an optional dependency for deadbeef. diff --git a/deadbeef/deadbeef.SlackBuild b/deadbeef/deadbeef.SlackBuild new file mode 100644 index 0000000..6c284b3 --- /dev/null +++ b/deadbeef/deadbeef.SlackBuild @@ -0,0 +1,108 @@ +#!/bin/sh + +# Slackware build script for deadbeef +# +# Copyright 2010 AlexGAV +# Copyright 2022 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=deadbeef +VERSION=${VERSION:-1.8.8} +BUILD=${BUILD:-2} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.bz2 +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +export CC=clang +export CXX=clang++ + +libtoolize --copy --force +aclocal --force +autoreconf --force --install +automake --copy --force-missing --add-missing + +CFLAGS="$SLKFLAGS" \ +LDFLAGS="-Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \ +CXXFLAGS="$CFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --enable-shared \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a AUTHORS COPYING.* ChangeLog INSTALL NEWS $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/deadbeef/deadbeef.info b/deadbeef/deadbeef.info new file mode 100644 index 0000000..8e5a924 --- /dev/null +++ b/deadbeef/deadbeef.info @@ -0,0 +1,10 @@ +PRGNAM="deadbeef" +VERSION="1.8.8" +HOMEPAGE="http://deadbeef.sourceforge.net" +DOWNLOAD="http://downloads.sourceforge.net/deadbeef/deadbeef-1.8.8.tar.bz2" +MD5SUM="cbc3cc9055e026ea8ae06d720ba38a52" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="jansson libdispatch" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/deadbeef/doinst.sh b/deadbeef/doinst.sh new file mode 100644 index 0000000..4a25de5 --- /dev/null +++ b/deadbeef/doinst.sh @@ -0,0 +1,10 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi + diff --git a/deadbeef/slack-desc b/deadbeef/slack-desc new file mode 100644 index 0000000..a7829f4 --- /dev/null +++ b/deadbeef/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +deadbeef: deadbeef (as in 0xDEADBEEF) +deadbeef: with X11 (though now it also runs in plain console without X, +deadbeef: in FreeBSD, and in OpenSolaris). +deadbeef: +deadbeef: Homepage: http://deadbeef.sourceforge.net/ +deadbeef: +deadbeef: +deadbeef: +deadbeef: +deadbeef: +deadbeef: diff --git a/deadbeef/slack-required b/deadbeef/slack-required new file mode 100644 index 0000000..a2e8e5e --- /dev/null +++ b/deadbeef/slack-required @@ -0,0 +1 @@ +libdispatch diff --git a/dmenu/README b/dmenu/README new file mode 100644 index 0000000..7d645f2 --- /dev/null +++ b/dmenu/README @@ -0,0 +1,6 @@ +dmenu - dynamic menu + +dmenu is a generic and efficient menu for X. + +Note: dmenu now includes a tiny utility called stest that is used to filter +files. See its man page for details. diff --git a/dmenu/dmenu-5.0-libdir_cflags_fixups.diff b/dmenu/dmenu-5.0-libdir_cflags_fixups.diff new file mode 100644 index 0000000..3b80bba --- /dev/null +++ b/dmenu/dmenu-5.0-libdir_cflags_fixups.diff @@ -0,0 +1,26 @@ +diff -ruNp dmenu-5.0/config.mk dmenu-5.0.new/config.mk +--- dmenu-5.0/config.mk 2020-09-02 19:37:07.000000000 +0300 ++++ dmenu-5.0.new/config.mk 2022-02-05 18:45:05.925753731 +0300 +@@ -4,6 +4,7 @@ VERSION = 5.0 + # paths + PREFIX = /usr/local + MANPREFIX = $(PREFIX)/share/man ++LIBDIR = /usr/local/lib + + X11INC = /usr/X11R6/include + X11LIB = /usr/X11R6/lib +@@ -20,11 +21,12 @@ FREETYPEINC = /usr/include/freetype2 + + # includes and libs + INCS = -I$(X11INC) -I$(FREETYPEINC) +-LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) ++LIBS = -L${LIBDIR} -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} + + # flags ++OPTS ?= -Os + CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS) +-CFLAGS = -std=c99 -pedantic -Wall -Os $(INCS) $(CPPFLAGS) ++CFLAGS = -std=c99 -pedantic -Wall ${OPTS} ${INCS} ${CPPFLAGS} + LDFLAGS = $(LIBS) + + # compiler and linker diff --git a/dmenu/dmenu.SlackBuild b/dmenu/dmenu.SlackBuild new file mode 100644 index 0000000..c98812c --- /dev/null +++ b/dmenu/dmenu.SlackBuild @@ -0,0 +1,101 @@ +#!/bin/sh + +# Slackware build script for dmenu + +# Copyright (c) 2008, Antonio Hernández Blas +# Copyright 2022 Sergei Fedosoff +# 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. +# +# 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. + +# Modified by Phillip Warner for version >= 4.0 + +PRGNAM=dmenu +VERSION=${VERSION:-5.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# Fixup the CFLAGS and LIBDIR settings to prevent multilib conflicts +patch -p1 -i $CWD/dmenu-5.0-libdir_cflags_fixups.diff + +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \ +make install \ + OPTS="$SLKCFLAGS -flto -rdynamic" \ + PREFIX=/usr \ + LIBDIR=/usr/lib${LIBDIRSUFFIX} \ + MANPREFIX=/usr/man \ + X11INC=/usr/include \ + X11LIB=/usr/lib${LIBDIRSUFFIX}/X11 \ + DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $(find $PKG/usr/man -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/dmenu/dmenu.info b/dmenu/dmenu.info new file mode 100644 index 0000000..1b78b3d --- /dev/null +++ b/dmenu/dmenu.info @@ -0,0 +1,10 @@ +PRGNAM="dmenu" +VERSION="5.1" +HOMEPAGE="http://tools.suckless.org/dmenu" +DOWNLOAD="http://dl.suckless.org/tools/dmenu-5.1.tar.gz" +MD5SUM="a18dcdaf3bd60e357fa5bb065059f9f6" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosov" +EMAIL="eleksir@gmail.com" diff --git a/dmenu/slack-desc b/dmenu/slack-desc new file mode 100644 index 0000000..2c48f94 --- /dev/null +++ b/dmenu/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +dmenu: dmenu (dynamic menu for X) +dmenu: +dmenu: dmenu is a generic and efficient menu for X. +dmenu: +dmenu: Homepage: http://tools.suckless.org/dmenu +dmenu: +dmenu: +dmenu: +dmenu: +dmenu: +dmenu: diff --git a/docker-cli/README b/docker-cli/README new file mode 100644 index 0000000..d22fbf0 --- /dev/null +++ b/docker-cli/README @@ -0,0 +1 @@ +Command line tool for Docker engine. diff --git a/docker-cli/bash_is_always_bin_bash.patch b/docker-cli/bash_is_always_bin_bash.patch new file mode 100644 index 0000000..cca470f --- /dev/null +++ b/docker-cli/bash_is_always_bin_bash.patch @@ -0,0 +1,75 @@ +diff -ruNp cli-20.10.8/Makefile cli-20.10.8.new/Makefile +--- cli-20.10.8/Makefile 2021-07-29 16:55:47.000000000 +0300 ++++ cli-20.10.8.new/Makefile 2021-08-23 01:18:35.303197616 +0300 +@@ -31,49 +31,49 @@ lint: ## run all the lint tools + + .PHONY: binary + binary: +- ./scripts/build/binary ++ /bin/bash scripts/build/binary + + .PHONY: plugins + plugins: ## build example CLI plugins +- ./scripts/build/plugins ++ /bin/bash /scripts/build/plugins + + .PHONY: cross + cross: +- ./scripts/build/binary ++ /bin/bash scripts/build/binary + + .PHONY: plugins-windows + plugins-windows: ## build example CLI plugins for Windows +- ./scripts/build/plugins-windows ++ /bin/bash scripts/build/plugins-windows + + .PHONY: plugins-osx + plugins-osx: ## build example CLI plugins for macOS +- ./scripts/build/plugins-osx ++ /bin/bash scripts/build/plugins-osx + + .PHONY: dynbinary + dynbinary: ## build dynamically linked binary +- GO_LINKMODE=dynamic ./scripts/build/binary ++ GO_LINKMODE=dynamic /bin/bash scripts/build/binary + + vendor: vendor.conf ## check that vendor matches vendor.conf + rm -rf vendor +- bash -c 'vndr |& grep -v -i clone | tee ./vndr.log' +- scripts/validate/check-git-diff vendor +- scripts/validate/check-all-packages-vendored ++ /bin/bash -c 'vndr |& grep -v -i clone | tee ./vndr.log' ++ /bin/bash scripts/validate/check-git-diff vendor ++ /bin/bash scripts/validate/check-all-packages-vendored + + .PHONY: authors + authors: ## generate AUTHORS file from git history +- scripts/docs/generate-authors.sh ++ /bin/bash scripts/docs/generate-authors.sh + + .PHONY: manpages + manpages: ## generate man pages from go source and markdown +- scripts/docs/generate-man.sh ++ /bin/bash scripts/docs/generate-man.sh + + .PHONY: yamldocs + yamldocs: ## generate documentation YAML files consumed by docs repo +- scripts/docs/generate-yaml.sh ++ /bin/bash scripts/docs/generate-yaml.sh + + .PHONY: shellcheck + shellcheck: ## run shellcheck validation +- scripts/validate/shellcheck ++ /bin/bash scripts/validate/shellcheck + + .PHONY: help + help: ## print this help +@@ -84,7 +84,7 @@ cli/compose/schema/bindata.go: cli/compo + go generate github.com/docker/cli/cli/compose/schema + + compose-jsonschema: cli/compose/schema/bindata.go ## generate compose-file schemas +- scripts/validate/check-git-diff cli/compose/schema/bindata.go ++ /bin/bash scripts/validate/check-git-diff cli/compose/schema/bindata.go + + .PHONY: ci-validate + ci-validate: diff --git a/docker-cli/docker-cli.SlackBuild b/docker-cli/docker-cli.SlackBuild new file mode 100755 index 0000000..5ab676a --- /dev/null +++ b/docker-cli/docker-cli.SlackBuild @@ -0,0 +1,95 @@ +#!/bin/sh + +# Slackware build script for docker-cli + +# Copyright 2021 Audrius Kažukauskas +# Copyright 2023 Sergei Fedosov +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=docker-cli +VERSION=${VERSION:-24.0.7} +GITHASH=${GITHASH:-afdd53b} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM=cli + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . + +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +mkdir build +mv vendor build/src +ln -sf $TMP/$SRCNAM-$VERSION build/src/github.com/docker/cli + +export GOPATH="${GOPATH}:$TMP/$SRCNAM-$VERSION/build" +export GOMODCACHE=/tmp/go +export LDFLAGS="-s -w" + +DISABLE_WARN_OUTSIDE_CONTAINER=1 \ +make dynbinary \ + GITCOMMIT=$GITHASH \ + VERSION=$VERSION \ + GOPATH=$TMP/$SRCNAM-$VERSION/build + +install -D -m 0755 build/docker-linux-amd64 $PKG/usr/bin/docker + +# Completion. +( cd contrib/completion + install -D -m 0644 bash/docker $PKG/usr/share/bash-completion/completions/docker + install -D -m 0644 zsh/_docker $PKG/usr/share/zsh/site-functions/_docker + install -D -m 0644 fish/docker.fish $PKG/usr/share/fish/vendor_completions.d/docker.fish +) + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE NOTICE README.md $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/docker-cli/docker-cli.info b/docker-cli/docker-cli.info new file mode 100644 index 0000000..0f8ed9c --- /dev/null +++ b/docker-cli/docker-cli.info @@ -0,0 +1,11 @@ +PRGNAM="docker-cli" +VERSION="24.0.7" +HOMEPAGE="https://www.docker.com/products/container-runtime" +DOWNLOAD="UNSUPPORTED" +MD5SUM="" +DOWNLOAD_x86_64="https://github.com/docker/cli/archive/v24.0.7/cli-24.0.7.tar.gz" +MD5SUM_x86_64="953bf757e181dec46ee4ac815553f2a6" +BUILDREQUIRES="google-go-lang" +REQUIRES="docker" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/docker-cli/slack-desc b/docker-cli/slack-desc new file mode 100644 index 0000000..944f01e --- /dev/null +++ b/docker-cli/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +docker-cli: docker-cli (command line tool for Docker engine) +docker-cli: +docker-cli: Docker is an open-source project to easily create lightweight, +docker-cli: portable, self-sufficient containers from any application. The same +docker-cli: container that a developer builds and tests on a laptop can run at +docker-cli: scale, in production, on VMs, bare metal, OpenStack clusters, public +docker-cli: clouds and more. +docker-cli: +docker-cli: Homepage: https://www.docker.com/products/container-runtime +docker-cli: +docker-cli: diff --git a/docker/README b/docker/README new file mode 100644 index 0000000..9e666cb --- /dev/null +++ b/docker/README @@ -0,0 +1,35 @@ +Docker is an open-source project to easily create lightweight, portable, +self-sufficient containers from any application. The same container +that a developer builds and tests on a laptop can run at scale, in +production, on VMs, bare metal, OpenStack clusters, public clouds and +more. + +To use docker as a limited user, add your user to the 'docker' group: + + # groupadd -r -g 281 docker + # usermod -a -G docker + +This will require logging out and back in and also restarting docker +daemon. + +To have the docker daemon start and stop with your host, +add to /etc/rc.d/rc.local: + + if [ -x /etc/rc.d/rc.docker ]; then + /etc/rc.d/rc.docker start + fi + +and to /etc/rc.d/rc.local_shutdown (creating it if needed): + + if [ -x /etc/rc.d/rc.docker ]; then + /etc/rc.d/rc.docker stop + fi + +If you are interested in enabling cgroup memory resource control over +swap as well, then append "swapaccount=1" to your kernel's parameters. +This is often in /etc/lilo.conf, on the "append" variable. + +NOTE: google-go-lang is only needed at compile time - not needed for +runtime. + +Docker doesn't support x86, only x86_64. diff --git a/docker/config/docker.default b/docker/config/docker.default new file mode 100644 index 0000000..f24ae34 --- /dev/null +++ b/docker/config/docker.default @@ -0,0 +1,3 @@ +## Set defaults used by the docker daemon. +## These are flags passed after `dockerd`. +#DOCKER_OPTS="" diff --git a/docker/config/docker.logrotate b/docker/config/docker.logrotate new file mode 100644 index 0000000..016980d --- /dev/null +++ b/docker/config/docker.logrotate @@ -0,0 +1,9 @@ +/var/log/docker.log { + daily + rotate 7 + copytruncate + delaycompress + compress + notifempty + missingok +} diff --git a/docker/config/rc.docker b/docker/config/rc.docker new file mode 100644 index 0000000..5aee99f --- /dev/null +++ b/docker/config/rc.docker @@ -0,0 +1,86 @@ +#!/bin/sh +# +# Docker startup script for Slackware Linux +# +# Docker is an open-source project to easily create lightweight, portable, +# self-sufficient containers from any application. + +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin + +BASE=dockerd + +UNSHARE=/usr/bin/unshare +DOCKER=/usr/bin/${BASE} +DOCKER_PIDFILE=/var/run/${BASE}.pid +DOCKER_LOG=/var/log/docker.log +DOCKER_OPTS="" + +# Default options. +if [ -f /etc/default/docker ]; then + . /etc/default/docker +fi + +# Check if docker is present. +if [ ! -x ${DOCKER} ]; then + echo "${DOCKER} not present or not executable" + exit 1 +fi + +docker_start() { + echo "Starting ${BASE} ..." + # If there is an old PID file (no dockerd running), clean it up. + if [ -r ${DOCKER_PIDFILE} ]; then + if ! ps axc | grep ${BASE} 1> /dev/null 2> /dev/null ; then + echo "Cleaning up old ${DOCKER_PIDFILE}." + rm -f ${DOCKER_PIDFILE} + fi + fi + + nohup "${UNSHARE}" -m -- ${DOCKER} -p ${DOCKER_PIDFILE} ${DOCKER_OPTS} >> ${DOCKER_LOG} 2>&1 & +} + +docker_stop() { + echo -n "Stopping ${BASE} ..." + if [ -r ${DOCKER_PIDFILE} ]; then + DOCKER_PID=$(cat ${DOCKER_PIDFILE}) + kill ${DOCKER_PID} + while [ -d /proc/${DOCKER_PID} ]; do + sleep 1 + echo -n "." + done + fi + echo " done" +} + +docker_restart() { + docker_stop + sleep 1 + docker_start +} + +docker_status() { + if [ -f ${DOCKER_PIDFILE} ] && ps -o cmd $(cat ${DOCKER_PIDFILE}) | grep -q ${BASE} ; then + echo "Status of ${BASE}: running" + else + echo "Status of ${BASE}: stopped" + fi +} + +case "$1" in + 'start') + docker_start + ;; + 'stop') + docker_stop + ;; + 'restart') + docker_restart + ;; + 'status') + docker_status + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" +esac + +exit 0 diff --git a/docker/docker.SlackBuild b/docker/docker.SlackBuild new file mode 100755 index 0000000..90436c7 --- /dev/null +++ b/docker/docker.SlackBuild @@ -0,0 +1,109 @@ +#!/bin/sh + +# Slackware build script for docker + +# Copyright 2014-2015 Vincent Batts +# Copyright 2017-2021 Audrius Kažukauskas +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=docker +VERSION=${VERSION:-24.0.7} +# short hash! +GITHASH=${GITHASH:-311b9ff} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM=moby + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +mkdir build +mv vendor build/src +ln -sf $TMP/$SRCNAM-$VERSION build/src/github.com/docker/docker + +export GOPATH="${GOPATH}:$TMP/$SRCNAM-$VERSION/build" +export GOMODCACHE=/tmp/go +export LDFLAGS="-s -w" + +/bin/bash ./hack/vendor.sh all + +DOCKER_GITCOMMIT=$GITHASH \ +DOCKER_BUILDTAGS="seccomp" \ +VERSION=$VERSION \ +/bin/bash ./hack/make.sh dynbinary-daemon + +install -D -m 0755 bundles/dynbinary-daemon/dockerd \ + $PKG/usr/bin/dockerd + +# Integrate required components. +ln -s runc $PKG/usr/bin/docker-runc +ln -s containerd $PKG/usr/bin/docker-containerd +ln -s containerd-shim $PKG/usr/bin/docker-containerd-shim +ln -s ctr $PKG/usr/bin/docker-containerd-ctr +ln -s tini-static $PKG/usr/bin/docker-init + +install -D -m 0644 $CWD/config/docker.default $PKG/etc/default/docker.new +install -D -m 0644 $CWD/config/docker.logrotate $PKG/etc/logrotate.d/docker.new +install -D -m 0644 $CWD/config/rc.docker $PKG/etc/rc.d/rc.docker.new + +# Install udev rules. +install -D -m 0644 contrib/udev/80-docker.rules \ + $PKG/lib/udev/rules.d/80-docker.rules + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE NOTICE README.md $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/docker/docker.info b/docker/docker.info new file mode 100644 index 0000000..503ac40 --- /dev/null +++ b/docker/docker.info @@ -0,0 +1,11 @@ +PRGNAM="docker" +VERSION="24.0.7" +HOMEPAGE="https://www.docker.com/products/container-runtime" +DOWNLOAD="UNSUPPORTED" +MD5SUM="" +DOWNLOAD_x86_64="https://github.com/moby/moby/archive/v24.0.7/moby-24.0.7.tar.gz" +MD5SUM_x86_64="059ed51462797354f39e630d3d2257ef" +REQUIRES="containerd docker-cli tini" +BUILDREQUIRES="google-go-lang" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/docker/doinst.sh b/docker/doinst.sh new file mode 100644 index 0000000..aec13bd --- /dev/null +++ b/docker/doinst.sh @@ -0,0 +1,32 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +preserve_perms etc/rc.d/rc.docker.new +config etc/default/docker.new +config etc/logrotate.d/docker.new + +if [ -x /sbin/udevadm ]; then + /sbin/udevadm control --reload-rules +fi + diff --git a/docker/slack-desc b/docker/slack-desc new file mode 100644 index 0000000..f6794fc --- /dev/null +++ b/docker/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +docker: docker (manager for applications in Linux containers) +docker: +docker: Docker is an open-source project to easily create lightweight, +docker: portable, self-sufficient containers from any application. The same +docker: container that a developer builds and tests on a laptop can run at +docker: scale, in production, on VMs, bare metal, OpenStack clusters, public +docker: clouds and more. +docker: +docker: Homepage: https://www.docker.com/products/container-runtime +docker: +docker: diff --git a/docker/slack-required b/docker/slack-required new file mode 100644 index 0000000..a5d4583 --- /dev/null +++ b/docker/slack-required @@ -0,0 +1,3 @@ +containerd +docker-cli +tini diff --git a/dos2unix/README b/dos2unix/README new file mode 100644 index 0000000..1500306 --- /dev/null +++ b/dos2unix/README @@ -0,0 +1,25 @@ +This is an update of Benjamin Lin's implementations of dos2unix and +unix2dos. Benjamin Lin's implementations of dos2unix and unix2dos are +part of several Linux distributions such as RedHat, Fedora, Suse, Gentoo +and some others. On Slackware one finds fromdos and todos but these +implementations are not included. This update includes all RedHat +patches and fixes several other problems. + +These implementations of dos2unix and unix2dos have been modeled after +dos2unix/unix2dos under SunOS/Solaris. They have similar conversion +modes, namely ASCII, 7bit and ISO. The first versions were made by John +Birchfield in 1989, and in 1995 rewritten from scratch by Benjamin Lin. +Mac to Unix conversion was added by Bernd Johannes Wuebben in 1998, Unix +to Mac by Erwin in 2010. + +Features: + Native language support: + Dutch, English, Esperanto, German, and Spanish. + Automatically skips binary and non-regular files in-place, paired, + or stdio mode conversion. + Keep original file dates option. + 7-bit and ISO conversion modes like SunOS dos2unix. + +Dos2Unix includes: + dos2unix - DOS/MAC to UNIX text file format converter. + unix2dos - UNIX to DOS/MAC text file format converter. diff --git a/dos2unix/dos2unix.SlackBuild b/dos2unix/dos2unix.SlackBuild new file mode 100644 index 0000000..1abc2fa --- /dev/null +++ b/dos2unix/dos2unix.SlackBuild @@ -0,0 +1,103 @@ +#!/bin/sh +# Slackware build script for dos2unix +# copyright 2017-2020 Donald Cooley, South Haven, IN, USA + +# Ryan P.C. McQuen | Everett, WA + +# Copyright 2011, 2012, 2013 Chris Abela, Malta +# Copyright 2022 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIE +# 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. + +PRGNAM=dos2unix +VERSION=${VERSION:-7.4.2} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +RPM_OPT_FLAGS="-g $SLKCFLAGS -flto" \ + make -j$(nproc) +make check +make \ + prefix=$PKG/usr \ + docdir=$PKG/usr/doc/$PRGNAM-$VERSION \ + mandir=$PKG/usr/man \ + install + +# Put _all_ man pages under usr/man +mv $PKG/usr/share/man/* $PKG/usr/man +rmdir $PKG/usr/share/man + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +cp -a *.txt $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/dos2unix/dos2unix.info b/dos2unix/dos2unix.info new file mode 100644 index 0000000..dcdbb92 --- /dev/null +++ b/dos2unix/dos2unix.info @@ -0,0 +1,10 @@ +PRGNAM="dos2unix" +VERSION="7.4.2" +HOMEPAGE="https://waterlan.home.xs4all.nl/dos2unix.html" +DOWNLOAD="https://waterlan.home.xs4all.nl/dos2unix/dos2unix-7.4.2.tar.gz" +MD5SUM="4e8f8c230a72753b307fab69f8121ba4" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/dos2unix/slack-desc b/dos2unix/slack-desc new file mode 100644 index 0000000..40424dc --- /dev/null +++ b/dos2unix/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +dos2unix: dos2unix (DOS or Mac to Unix and v.v. text files conversion) +dos2unix: +dos2unix: This is an update of Benjamin Lin's implementations of dos2unix and +dos2unix: unix2dos. These implementations of dos2unix and unix2dos have been +dos2unix: modeled after dos2unix/unix2dos under SunOS/Solaris. They have +dos2unix: similar conversion modes, namely ascii, 7bit and iso. +dos2unix: +dos2unix: +dos2unix: https://www.xs4all.nl/~waterlan/dos2unix.html +dos2unix: +dos2unix: diff --git a/dosbox/README b/dosbox/README new file mode 100644 index 0000000..8b5b39a --- /dev/null +++ b/dosbox/README @@ -0,0 +1,5 @@ +DOSbox is a DOS emulator/virtual machine for X11 and Unix. +It allows you to play many of the old games you grew up loving, +as well as many apps designed to run on DOS. + +SDL_sound is an optional dependency. diff --git a/dosbox/doinst.sh b/dosbox/doinst.sh new file mode 100644 index 0000000..6af9811 --- /dev/null +++ b/dosbox/doinst.sh @@ -0,0 +1,4 @@ +if [ -x usr/bin/update-desktop-database ]; then + usr/bin/update-desktop-database -q usr/share/applications +fi + diff --git a/dosbox/dosbox.SlackBuild b/dosbox/dosbox.SlackBuild new file mode 100644 index 0000000..9f31e1f --- /dev/null +++ b/dosbox/dosbox.SlackBuild @@ -0,0 +1,116 @@ +#!/bin/sh + +# Slackware build script for dosbox + +# Yth | Pont-en-Royans, France | yth@ythogtha.org + +# Ryan P.C. McQuen | Everett, WA | ryanpcmcquen@member.fsf.org + +# Copyright 2006 Martin Lefebvre +# Copyright 2008-2009, Michiel van Wessem, Manchester, United Kingdom. +# Copyright 2022 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=dosbox +VERSION=${VERSION:-0.74.3} +SRCVER=$(sed 's/\(.*\)\./\1-/' <<< $VERSION) +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-g3 -O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$SRCVER +tar -xf $CWD/$PRGNAM-$SRCVER.tar.gz +cd $PRGNAM-$SRCVER +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="-g $SLKFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +CXXFLAGS="$CFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --build=$ARCH-slackware-linux + +make -j$(nproc) DESTDIR=$PKG +make install-strip DESTDIR=$PKG + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $(find $PKG/usr/man -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done + +# Add a desktop file to create a menu entry +install -Dpm 0644 $CWD/dosbox.desktop \ + $PKG/usr/share/applications/dosbox.desktop + +# Add the dosbox.ico file to /usr/share/pixmaps +install -Dpm 0644 src/dosbox.ico $PKG/usr/share/pixmaps/dosbox.ico + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a AUTHORS COPYING ChangeLog INSTALL NEWS README THANKS \ + docs/PORTING docs/README.video $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/dosbox/dosbox.desktop b/dosbox/dosbox.desktop new file mode 100644 index 0000000..3741d36 --- /dev/null +++ b/dosbox/dosbox.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Name=dosbox +Comment=DOS Emulator +GenericName=dosbox +Exec=dosbox +Icon=/usr/share/pixmaps/dosbox.ico +Terminal=false +Type=Application +Categories=System; +StartupNotify=true diff --git a/dosbox/dosbox.info b/dosbox/dosbox.info new file mode 100644 index 0000000..ac76370 --- /dev/null +++ b/dosbox/dosbox.info @@ -0,0 +1,11 @@ +PRGNAM="dosbox" +VERSION="0.74.3" +HOMEPAGE="https://www.dosbox.com/" +DOWNLOAD="https://downloads.sourceforge.net/dosbox/dosbox-0.74-3.tar.gz" +MD5SUM="759c75fffb59c542f80fb8391012911b" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +BUIDREQUIRES="SDL_sound" +REQUIRES="SDL_sound" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/dosbox/slack-desc b/dosbox/slack-desc new file mode 100644 index 0000000..0e06172 --- /dev/null +++ b/dosbox/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +dosbox: dosbox (DOS emulator/virtual machine for X11 and Unix) +dosbox: +dosbox: It allows you to play many of the old games you grew up loving, as +dosbox: well as many apps designed to run on DOS. +dosbox: +dosbox: +dosbox: +dosbox: +dosbox: +dosbox: +dosbox: diff --git a/dosbox/slack-required b/dosbox/slack-required new file mode 100644 index 0000000..b787fd1 --- /dev/null +++ b/dosbox/slack-required @@ -0,0 +1 @@ +SDL_sound diff --git a/dpkg/README b/dpkg/README new file mode 100644 index 0000000..8288a83 --- /dev/null +++ b/dpkg/README @@ -0,0 +1,7 @@ +dpkg (Debian package management system) + +This package provides the development tools (including dpkg-source) +required to unpack, build and upload Debian source packages. + +It can also be used to install debian packages on your system with +possible DISASTROUS effects. Do not do it. diff --git a/dpkg/dpkg.SlackBuild b/dpkg/dpkg.SlackBuild new file mode 100644 index 0000000..8d36871 --- /dev/null +++ b/dpkg/dpkg.SlackBuild @@ -0,0 +1,109 @@ +#!/bin/sh +# +# Slackware build script for dpkg. +# +# Copyright 2016-2021 Edinaldo P. Silva, Rio de Janeiro, Brazil. +# Copyright 2009 Marco Bonetti +# Copyright 2022 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=dpkg +VERSION=${VERSION:-1.21.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM\_$VERSION.tar.?z* +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="-g $SLKFLAGS -rdynamic" \ +LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +CXXFLAGS="$CFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --disable-devel-docs \ + --disable-start-stop-daemon \ + --enable-silent-rules \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +DOCS="debian/changelog debian/README.bug-usertags doc/README* ABOUT-NLS \ +AUTHORS COPYING NEWS README* THANKS TODO" + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp $DOCS $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/dpkg/dpkg.info b/dpkg/dpkg.info new file mode 100644 index 0000000..f4f9fe8 --- /dev/null +++ b/dpkg/dpkg.info @@ -0,0 +1,10 @@ +PRGNAM="dpkg" +VERSION="1.21.1" +HOMEPAGE="https://wiki.debian.org/Teams/Dpkg" +DOWNLOAD="http://ftp.debian.org/debian/pool/main/d/dpkg/dpkg_1.21.1.tar.xz" +MD5SUM="cbe2c7e27d5bdfe976217e976c53e8c8" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/dpkg/slack-desc b/dpkg/slack-desc new file mode 100644 index 0000000..e09507c --- /dev/null +++ b/dpkg/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +dpkg: dpkg (Debian package management system) +dpkg: +dpkg: This package provides the development tools (including dpkg-source) +dpkg: required to unpack, build and upload Debian source packages. +dpkg: +dpkg: It can also be used to install debian packages on your system with +dpkg: possible DISASTROUS effects. Do not do it. +dpkg: +dpkg: Home page: https://wiki.debian.org/Teams/Dpkg +dpkg: +dpkg: diff --git a/dunst/README b/dunst/README new file mode 100644 index 0000000..4ccb5ad --- /dev/null +++ b/dunst/README @@ -0,0 +1,11 @@ +dunst (notification daemon) + +Dunst is a lightweight replacement for the notification-daemons provided +by most desktop environments. It's very customizable, doesn't depend +on any toolkits and therefore fits in those windowmanager centric setups +we all love to customize to perfection. + +Configuration: + +To customize dunst copy /etc/xdg/dunst/dunstrc to +~/.config/dunst/dunstrc and then modify it to your liking. diff --git a/dunst/doinst.sh b/dunst/doinst.sh new file mode 100644 index 0000000..c3a0ab2 --- /dev/null +++ b/dunst/doinst.sh @@ -0,0 +1,14 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/xdg/dunst/dunstrc.new diff --git a/dunst/dunst.SlackBuild b/dunst/dunst.SlackBuild new file mode 100755 index 0000000..a9c71e7 --- /dev/null +++ b/dunst/dunst.SlackBuild @@ -0,0 +1,105 @@ +#!/bin/sh + +# Copyright 2014-2021 S. S. Bolokanar, Bulgaria +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=dunst +VERSION=${VERSION:-1.9.2} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="-grecord-gcc-switches -pipe $SLKCFLAGS -g3 -fasynchronous-unwind-tables -flto -rdynamic" \ +CXXFLAGS="$SLKCFLAGS" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +make DESTDIR=$PKG \ + WAYLAND=0 \ + SYSTEMD=0 \ + PREFIX=/usr \ + MANPREFIX=/usr/man \ + all install + +# Don't clobber config +if [ -f $PKG/etc/dunst/dunstrc ]; then + rm -rf $PKG/etc/dunst/dunstrc +fi + +install -Dpm 0644 dunstrc $PKG/etc/dunst/dunstrc.new + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -pv $PKG/usr/doc/$PRGNAM-$VERSION +cp -a AUTHORS CHANGELOG.md LICENSE \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -pv $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/dunst/dunst.info b/dunst/dunst.info new file mode 100644 index 0000000..69a3d5a --- /dev/null +++ b/dunst/dunst.info @@ -0,0 +1,10 @@ +PRGNAM="dunst" +VERSION="1.9.2" +HOMEPAGE="https://dunst-project.org/" +DOWNLOAD="https://github.com/dunst-project/dunst/archive/v1.9.2/dunst-1.9.2.tar.gz" +MD5SUM="138b0a3542a8d0b69125c3c31e977405" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/dunst/slack-desc b/dunst/slack-desc new file mode 100644 index 0000000..b22f8e0 --- /dev/null +++ b/dunst/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +dunst: dunst (notification daemon) +dunst: +dunst: Dunst is a lightweight replacement for the notification-daemons +dunst: provided by most desktop environments. +dunst: It's very customizable, doesn't depend on any toolkits and therefore +dunst: fits in those windowmanager centric setups we all love to customize +dunst: to perfection. +dunst: +dunst: Homepage: https://dunst-project.org/ +dunst: +dunst: diff --git a/fceux/README b/fceux/README new file mode 100644 index 0000000..0250aa6 --- /dev/null +++ b/fceux/README @@ -0,0 +1,4 @@ +fceux is a Nintendo Entertainment System (NES), Famicom, and +Famicom Disk System (FDS) emulator. It supports both PAL +(European) and NTSC (USA/JPN) modes. It supports both Windows +and SDL versions for cross compatibility. diff --git a/fceux/doinst.sh b/fceux/doinst.sh new file mode 100644 index 0000000..a9ca196 --- /dev/null +++ b/fceux/doinst.sh @@ -0,0 +1,4 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications 2>/dev/null +fi + diff --git a/fceux/fceux.SlackBuild b/fceux/fceux.SlackBuild new file mode 100644 index 0000000..a1213b4 --- /dev/null +++ b/fceux/fceux.SlackBuild @@ -0,0 +1,107 @@ +#!/bin/sh + +# Slackware build script for fceux + +# Copyright 2016 Matt Dinslage (daedra1980@gmail.com), Springfield, MO, USA +# Copyright 2022 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + + +PRGNAM=fceux +VERSION=${VERSION:-2.6.4} +BUILD=${BUILD:-2} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="'-O2', '-march=i486', '-mtune=i686'" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="'-O2', '-march=i686', '-mtune=i686'" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="'-O2', '-fPIC'" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="'-O2'" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.?z* +cd $PRGNAM-$PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + + +mkdir build +cd build + +CFLAGS="-g $SLKFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \ +CXXFLAGS="$CFLAGS" \ + cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RelWithDebInfo .. + +make -j$(nproc) install DESTDIR=$PKG +cd .. + +# Delete unneeded .dll files +rm -f $PKG/usr/share/$PRGNAM/*.dll + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mv $PKG/usr/share/man $PKG/usr/man +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a documentation/* COPYING *.txt $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh +cat $CWD/slack-required > $PKG/install/slack-required + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/fceux/fceux.desktop b/fceux/fceux.desktop new file mode 100644 index 0000000..c21ccf8 --- /dev/null +++ b/fceux/fceux.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Fceux +GenericName=Nintendo/Famicon Emulator +Exec=fceux +Terminal=false +Type=Application +Categories=Game;Emulator; +Icon=/usr/share/pixmaps/Nintendo.png +StartupNotify=false diff --git a/fceux/fceux.info b/fceux/fceux.info new file mode 100644 index 0000000..c4e3099 --- /dev/null +++ b/fceux/fceux.info @@ -0,0 +1,11 @@ +PRGNAM="fceux" +VERSION="2.6.4" +HOMEPAGE="http://fceux.com/web/home.html" +DOWNLOAD="https://github.com/TASEmulators/fceux/archive/refs/tags/fceux-2.6.4.tar.gz" +MD5SUM="ed7e442e808b096d665859efeeaef699" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +BUILDREQUIRES="libminizip SDL2" +REQUIRES="libminizip SDL2" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/fceux/slack-desc b/fceux/slack-desc new file mode 100644 index 0000000..1606935 --- /dev/null +++ b/fceux/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +fceux: fceux (An 8-bit NES emulator based on FCE Ultra) +fceux: +fceux: fceux is a Nintendo Entertainment System (NES), Famicom, and +fceux: Famicom Disk System (FDS) emulator. It supports both PAL +fceux: (European) and NTSC (USA/JPN) modes. It supports both Windows +fceux: and SDL versions for cross compatibility. +fceux: +fceux: +fceux: +fceux: +fceux: diff --git a/fceux/slack-required b/fceux/slack-required new file mode 100644 index 0000000..8fc7f03 --- /dev/null +++ b/fceux/slack-required @@ -0,0 +1,3 @@ +libminizip +SDL2 + diff --git a/feh/README b/feh/README new file mode 100644 index 0000000..640ffae --- /dev/null +++ b/feh/README @@ -0,0 +1,22 @@ +feh is an image viewer at heart, though it does other cool stuff. +feh features include simple image viewing, multiple image viewing +(slideshow), multiple image viewing in multiwindows, image viewing +in fullscreen, image list mode, loadable/unloadable listing, +recursive file opening, saving/loading filelists, loading images +via http, reloading after delay, montage creation, and more. + +To enable builtin EXIF tag display support use: + + EXIF=yes ./feh.SlackBuild + +To include help text use: + + HELP=yes ./feh.SlackBuild + +To enable enable inotify support use: + + INOTIFY=yes ./feh.SlackBuild + +To support CIFS shares from 64bit hosts on 32bit machines use: + + STAT64=yes ./feh.SlackBuild diff --git a/feh/doinst.sh b/feh/doinst.sh new file mode 100644 index 0000000..65c7e2e --- /dev/null +++ b/feh/doinst.sh @@ -0,0 +1,9 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/feh/feh.SlackBuild b/feh/feh.SlackBuild new file mode 100644 index 0000000..b72ab30 --- /dev/null +++ b/feh/feh.SlackBuild @@ -0,0 +1,114 @@ +#!/bin/sh + +# Slackware build script for feh + +# Copyright 2006-2009 Chess Griffin +# Copyright 2011-2012 Grigorios Bouzakis +# Copyright 2014-2015 Luka Novsak +# Copyright 2017-2019 Hunter Sezen +# Copyright 2022 Segei Fedosoff +# +# 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. +# +# THIS SOFTWARE IS PROVIDED ``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 +# AUTHORS AND COPYRIGHT HOLDERS AND 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. + +PRGNAM=feh +VERSION=${VERSION:-3.8} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -eu + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.bz2 +chmod 0755 $PRGNAM-$VERSION +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +[ "${EXIF:=0}" != 0 ] && EXIF=1 +[ "${HELP:=0}" != 0 ] && HELP=1 +[ "${INOTIFY:=0}" != 0 ] && INOTIFY=1 +[ "${STAT64:=0}" != 0 ] && STAT64=1 + +CFLAGS="-g $SLKCFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +CXXFLAGS="$CFLAGS" \ +make -j$(nproc) \ + PREFIX=/usr \ + exif=$EXIF \ + help=$HELP \ + inotify=$INOTIFY \ + stat64=$STAT64 + +make install \ + DESTDIR=$PKG \ + PREFIX=/usr \ + man_dir=$PKG/usr/man \ + doc_dir=$PKG/usr/doc/$PRGNAM-$VERSION \ + example_dir=$PKG/usr/doc/$PRGNAM-$VERSION/examples + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | + grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a COPYING $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/feh/feh.info b/feh/feh.info new file mode 100644 index 0000000..a852298 --- /dev/null +++ b/feh/feh.info @@ -0,0 +1,11 @@ +PRGNAM="feh" +VERSION="3.8" +HOMEPAGE="https://feh.finalrewind.org" +DOWNLOAD="https://feh.finalrewind.org/feh-3.8.tar.bz2" +MD5SUM="654c39963f8fb3cd878d6ed60318ed82" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +BUILDREQUIRES="imlib2" +REQUIRES="imlib2" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/feh/slack-desc b/feh/slack-desc new file mode 100644 index 0000000..92d931a --- /dev/null +++ b/feh/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +feh: feh (image viewer) +feh: +feh: feh features include simple image viewing, multiple image viewing +feh: (slideshow), multiple image viewing in multiwindows, image viewing +feh: in fullscreen, image list mode, loadable/unloadable listing, +feh: recursive file opening, saving/loading filelists, loading images +feh: via http, reloading after delay, montage creation, and more. +feh: +feh: Homepage: https://feh.finalrewind.org +feh: +feh: diff --git a/feh/slack-required b/feh/slack-required new file mode 100644 index 0000000..51aef61 --- /dev/null +++ b/feh/slack-required @@ -0,0 +1 @@ +imlib2 diff --git a/filezilla/README b/filezilla/README new file mode 100644 index 0000000..ae39603 --- /dev/null +++ b/filezilla/README @@ -0,0 +1,13 @@ +FileZilla Client is a fast and reliable cross-platform FTP, FTPS and +SFTP client with lots of useful features and an intuitive graphical user +interface. + +pugixml is an optional dependency - to use an installed version of pugixml, +run the script as "PUGIXML=yes ./filezilla.SlackBuild" - otherwise, the +build will use an included copy of pugixml. + + +N.B. +Filzilla requires c++17, so it can be built with gcc-8 and more recent +In this slackbuild gcc-10.2.0 is used, there are some gcc version dependent +flags set in slackbuild. diff --git a/filezilla/doinst.sh b/filezilla/doinst.sh new file mode 100644 index 0000000..aea0f89 --- /dev/null +++ b/filezilla/doinst.sh @@ -0,0 +1,13 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -x /usr/bin/update-mime-database ]; then + /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/filezilla/filezilla.SlackBuild b/filezilla/filezilla.SlackBuild new file mode 100644 index 0000000..105ab8b --- /dev/null +++ b/filezilla/filezilla.SlackBuild @@ -0,0 +1,123 @@ +#!/bin/sh +# Slackware build script for filezilla + +# Copyright 2007-2009 Grigorios Bouzakis +# Copyright 2010-2019 Willy Sudiarto Raharjo +# Copyright 2022 Sergei Fedosoff +# +# 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. +# +# THIS SOFTWARE IS PROVIDED ``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 +# AUTHORS AND COPYRIGHT HOLDERS AND 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. + +PRGNAM=filezilla +VERSION=${VERSION:-3.60.2} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +DOCS="AUTHORS COPYING ChangeLog INSTALL NEWS README GPL.html" + +# Check if we have pugixml package +if [ "${PUGIXML:-no}" = "yes" ]; then + pugixml="--with-pugixml=system" +else + pugixml="--with-pugixml=builtin" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/FileZilla_${VERSION}_src.tar.bz2 +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +CFLAGS="-g $SLKFLAGS -rdynamic" \ +LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +CXXFLAGS="$CFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --disable-manualupdatecheck \ + --disable-autoupdatecheck \ + --enable-locales \ + --enable-static \ + $pugixml \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +mv $PKG/usr/share/filezilla/docs/fzdefaults.xml.example $PKG/usr/doc/$PRGNAM-$VERSION +# remove empty docdir +rmdir $PKG/usr/share/filezilla/docs + +# Use our own .desktop which has no BOM characters +cp $CWD/filezilla.desktop $PKG/usr/share/applications/ + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/filezilla/filezilla.desktop b/filezilla/filezilla.desktop new file mode 100644 index 0000000..b13730b --- /dev/null +++ b/filezilla/filezilla.desktop @@ -0,0 +1,16 @@ +[Desktop Entry] +Name=FileZilla +GenericName=FTP client +GenericName[da]=FTP-klient +GenericName[de]=FTP-Client +GenericName[fr]=Client FTP +Comment=Download and upload files via FTP, FTPS and SFTP +Comment[da]=Download og upload filer via FTP, FTPS og SFTP +Comment[de]=Dateien über FTP, FTPS und SFTP übertragen +Comment[fr]=Transférer des fichiers via FTP, FTPS et SFTP +Exec=filezilla +Terminal=false +Icon=filezilla +Type=Application +Categories=Network;FileTransfer; +Version=1.0 diff --git a/filezilla/filezilla.info b/filezilla/filezilla.info new file mode 100644 index 0000000..5987104 --- /dev/null +++ b/filezilla/filezilla.info @@ -0,0 +1,11 @@ +PRGNAM="filezilla" +VERSION="3.60.2" +HOMEPAGE="https://filezilla-project.org/" +DOWNLOAD="https://download.filezilla-project.org/client/FileZilla_3.60.2_src.tar.bz2" +MD5SUM="72dd72bb97a39cdda07a0e35a7400751" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +BUILDREQUIRES="wxGTK3 libfilezilla" +REQUIRES="wxGTK3 libfilezilla" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/filezilla/slack-desc b/filezilla/slack-desc new file mode 100644 index 0000000..4395428 --- /dev/null +++ b/filezilla/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +filezilla: filezilla (the free FTP solution) +filezilla: +filezilla: FileZilla is a fast and reliable cross-platform FTP, FTPS, and SFTP +filezilla: client with lots of useful features and an intuitive user interface. +filezilla: +filezilla: Homepage: https://filezilla-project.org/ +filezilla: +filezilla: +filezilla: +filezilla: +filezilla: diff --git a/filezilla/slack-required b/filezilla/slack-required new file mode 100644 index 0000000..c64e03c --- /dev/null +++ b/filezilla/slack-required @@ -0,0 +1,2 @@ +libfilezilla +wxGTK3 diff --git a/gcc5/README b/gcc5/README new file mode 100644 index 0000000..bdc9fd7 --- /dev/null +++ b/gcc5/README @@ -0,0 +1,48 @@ +This gcc5 package can be installed alongside Slackware's gcc-11 +packages. These version 11 compilers can sometimes be quite a bit +more strict about what they accept as valid code. As a consequence, +you will regularly run into compilation issues with software. Not just +the software made with the scripts on slackbuilds.org, but also some +of the software in the Slackware core distribution requires patches in +order to get them to compile. + +Still having the gcc version 5 compilers can sometimes be a lifesaver. +Particulars of the gcc5 package: +- The gcc5 binaries were given a suffix '-5' to make them stand apart + from Slackware's default compilers. +- The gcc5 package only contains the C, C++ and Java compilers. +- One all-encompassing package is built by the SlackBuild script. +- Profile scripts are added to /etc/profile.d/. You can 'source' + the profile script to prefer the gcc-5 compilers over gcc-7. +- On 64bit Slackware, the gcc5.SlackBuild will detect an existing gcc + multilib compiler and will then build a multilib capable gcc5. + If you run pure 64bit Slackware, then a pure 64bit gcc5 package is + built. + +How to use these gcc5 compilers instead of Slackware's default ones? +Simple: +In your console or terminal, you 'source' the provided profile script, +like this (a c-shell compatible script is available as well): + + source /etc/profile.d/gcc5.sh + +The command 'source' is equivalent to the dot command ' . '. +The profile script will (re-)define the common variables that are +used by make and other programs to determine which binary to run as +the compiler: + +export CC=gcc-5 +export CPP=cpp-5 +export CXX=g++-5 +export AR=gcc-ar-5 +export NM=gcc-nm-5 +export RANLIB=gcc-ranlib-5 + +Nothing else needs to be done after sourcing the profile script. +All you do next is run your compile job as usual in that same console. +Your program will be compiled with the binaries provided by the gcc5 +package. + +** WARNING: The temporary build location used by the script +** (defaulting here to /tmp/SBo) should *NOT* be a directory path a +** non-root user could create later... diff --git a/gcc5/c89.sh b/gcc5/c89.sh new file mode 100644 index 0000000..424b1e1 --- /dev/null +++ b/gcc5/c89.sh @@ -0,0 +1,11 @@ +#!/bin/sh +fl="-std=c89" +CC=${CC:-"gcc"} +for opt; do + case "$opt" in + -ansi|-std=c89|-std=iso9899:1990) fl="";; + -std=*) echo "`basename $0` called with non ANSI/ISO C option $opt" >&2 + exit 1;; + esac +done +exec $CC $fl ${1+"$@"} diff --git a/gcc5/c99.sh b/gcc5/c99.sh new file mode 100644 index 0000000..c336369 --- /dev/null +++ b/gcc5/c99.sh @@ -0,0 +1,11 @@ +#!/bin/sh +fl="-std=c99" +CC=${CC:-"gcc"} +for opt; do + case "$opt" in + -std=c99|-std=iso9899:1999) fl="";; + -std=*) echo "`basename $0` called with non ISO C99 option $opt" >&2 + exit 1;; + esac +done +exec $CC $fl ${1+"$@"} diff --git a/gcc5/ecj.sh b/gcc5/ecj.sh new file mode 100644 index 0000000..1d8b797 --- /dev/null +++ b/gcc5/ecj.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +CLASSPATH=@JAVADIR@/ecj.jar${CLASSPATH:+:}$CLASSPATH \ + java org.eclipse.jdt.internal.compiler.batch.Main "$@" + diff --git a/gcc5/fastjar-patches/1000-fastjar-0.97-segfault.patch b/gcc5/fastjar-patches/1000-fastjar-0.97-segfault.patch new file mode 100644 index 0000000..ab62624 --- /dev/null +++ b/gcc5/fastjar-patches/1000-fastjar-0.97-segfault.patch @@ -0,0 +1,29 @@ +2009-01-14 Jakub Jelinek + + * jartool.c (make_manifest): Initialize current_time before + calling unix2dostime on it. + +--- fastjar-0.97/jartool.c.jj 2008-10-15 18:35:37.000000000 +0200 ++++ fastjar-0.97/jartool.c 2009-01-14 15:40:50.000000000 +0100 +@@ -820,6 +820,10 @@ int make_manifest(int jfd, const char *m + int mod_time; /* file modification time */ + struct zipentry *ze; + ++ current_time = time(NULL); ++ if(current_time == (time_t)-1) ++ exit_on_error("time"); ++ + mod_time = unix2dostime(¤t_time); + + /* If we are creating a new manifest, create a META-INF directory entry */ +@@ -828,10 +832,6 @@ int make_manifest(int jfd, const char *m + + memset((file_header + 12), '\0', 16); /*clear mod time, crc, size fields*/ + +- current_time = time(NULL); +- if(current_time == (time_t)-1) +- exit_on_error("time"); +- + PACK_UB2(file_header, LOC_EXTRA, 0); + PACK_UB2(file_header, LOC_COMP, 0); + PACK_UB2(file_header, LOC_FNLEN, nlen); diff --git a/gcc5/fastjar-patches/1001-fastjar-0.97-len1.patch b/gcc5/fastjar-patches/1001-fastjar-0.97-len1.patch new file mode 100644 index 0000000..722351d --- /dev/null +++ b/gcc5/fastjar-patches/1001-fastjar-0.97-len1.patch @@ -0,0 +1,16 @@ +2009-12-21 Chris Ball + + * jartool.c (add_file_to_jar): Test write return value against -1 + instead of 1. + +--- fastjar-0.97/jartool.c.jj 2008-10-15 12:35:37.000000000 -0400 ++++ fastjar-0.97/jartool.c 2009-12-22 06:48:09.309530000 -0500 +@@ -1257,7 +1257,7 @@ int add_file_to_jar(int jfd, int ffd, co + exit_on_error("write"); + + /* write the file name to the zip file */ +- if (1 == write(jfd, fname, file_name_length)) ++ if (-1 == write(jfd, fname, file_name_length)) + exit_on_error("write"); + + if(verbose){ diff --git a/gcc5/fastjar-patches/1002-fastjar-0.97-filename0.patch b/gcc5/fastjar-patches/1002-fastjar-0.97-filename0.patch new file mode 100644 index 0000000..34a02a7 --- /dev/null +++ b/gcc5/fastjar-patches/1002-fastjar-0.97-filename0.patch @@ -0,0 +1,14 @@ +2010-03-01 Richard Guenther + + * jartool.c (read_entries): Properly zero-terminate filename. + +--- fastjar-0.97/jartool.c 6 Sep 2009 22:16:00 -0000 1.59 ++++ fastjar-0.97/jartool.c 1 Mar 2010 15:38:43 -0000 1.60 +@@ -790,6 +790,7 @@ int read_entries (int fd) + progname, jarfile); + return 1; + } ++ ze->filename[len] = '\0'; + len = UNPACK_UB4(header, CEN_EFLEN); + len += UNPACK_UB4(header, CEN_COMLEN); + if (lseek (fd, len, SEEK_CUR) == -1) diff --git a/gcc5/fastjar-patches/1003-fastjar-CVE-2010-0831.patch b/gcc5/fastjar-patches/1003-fastjar-CVE-2010-0831.patch new file mode 100644 index 0000000..2c6e23c --- /dev/null +++ b/gcc5/fastjar-patches/1003-fastjar-CVE-2010-0831.patch @@ -0,0 +1,102 @@ +2010-06-10 Jakub Jelinek + Dan Rosenberg + + * jartool.c (extract_jar): Fix up checks for traversal to parent + directories, disallow absolute paths, make the code slightly more + efficient. + +--- fastjar-0.97/jartool.c.jj 2009-09-07 00:10:47.000000000 +0200 ++++ fastjar-0.97/jartool.c 2010-06-08 20:00:29.000000000 +0200 +@@ -1730,7 +1730,17 @@ int extract_jar(int fd, const char **fil + struct stat sbuf; + int depth = 0; + +- tmp_buff = malloc(sizeof(char) * strlen((const char *)filename)); ++ if(*filename == '/'){ ++ fprintf(stderr, "Absolute path names are not allowed.\n"); ++ exit(EXIT_FAILURE); ++ } ++ ++ tmp_buff = malloc(strlen((const char *)filename)); ++ ++ if(tmp_buff == NULL) { ++ fprintf(stderr, "Out of memory.\n"); ++ exit(EXIT_FAILURE); ++ } + + for(;;){ + const ub1 *idx = (const unsigned char *)strchr((const char *)start, '/'); +@@ -1738,25 +1748,28 @@ int extract_jar(int fd, const char **fil + if(idx == NULL) + break; + else if(idx == start){ ++ tmp_buff[idx - filename] = '/'; + start++; + continue; + } +- start = idx + 1; + +- strncpy(tmp_buff, (const char *)filename, (idx - filename)); +- tmp_buff[(idx - filename)] = '\0'; ++ memcpy(tmp_buff + (start - filename), (const char *)start, (idx - start)); ++ tmp_buff[idx - filename] = '\0'; + + #ifdef DEBUG + printf("checking the existance of %s\n", tmp_buff); + #endif +- if(strcmp(tmp_buff, "..") == 0){ ++ if(idx - start == 2 && memcmp(start, "..", 2) == 0){ + --depth; + if (depth < 0){ + fprintf(stderr, "Traversal to parent directories during unpacking!\n"); + exit(EXIT_FAILURE); + } +- } else if (strcmp(tmp_buff, ".") != 0) ++ } else if (idx - start != 1 || *start != '.') + ++depth; ++ ++ start = idx + 1; ++ + if(stat(tmp_buff, &sbuf) < 0){ + if(errno != ENOENT) + exit_on_error("stat"); +@@ -1765,6 +1778,7 @@ int extract_jar(int fd, const char **fil + #ifdef DEBUG + printf("Directory exists\n"); + #endif ++ tmp_buff[idx - filename] = '/'; + continue; + }else { + fprintf(stderr, "Hmmm.. %s exists but isn't a directory!\n", +@@ -1781,10 +1795,11 @@ int extract_jar(int fd, const char **fil + if(verbose && handle) + printf("%10s: %s/\n", "created", tmp_buff); + ++ tmp_buff[idx - filename] = '/'; + } + + /* only a directory */ +- if(strlen((const char *)start) == 0) ++ if(*start == '\0') + dir = TRUE; + + #ifdef DEBUG +@@ -1792,7 +1807,7 @@ int extract_jar(int fd, const char **fil + #endif + + /* If the entry was just a directory, don't write to file, etc */ +- if(strlen((const char *)start) == 0) ++ if(*start == '\0') + f_fd = -1; + + free(tmp_buff); +@@ -1876,7 +1891,8 @@ int extract_jar(int fd, const char **fil + exit(EXIT_FAILURE); + } + +- close(f_fd); ++ if (f_fd != -1) ++ close(f_fd); + + if(verbose && dir == FALSE && handle) + printf("%10s: %s\n", diff --git a/gcc5/fastjar-patches/1004-fastjar-man.patch b/gcc5/fastjar-patches/1004-fastjar-man.patch new file mode 100644 index 0000000..34bf704 --- /dev/null +++ b/gcc5/fastjar-patches/1004-fastjar-man.patch @@ -0,0 +1,27 @@ +2010-03-24 Jan Kratochvil + + * Makefile.am (POD2MAN): Provide --date from ChangeLog. + * Makefile.in: Regenerate. + +--- fastjar-0.97/Makefile.am.jj 2008-10-16 04:24:55.000000000 -0400 ++++ fastjar-0.97/Makefile.am 2010-06-21 09:29:41.021398000 -0400 +@@ -39,7 +39,7 @@ EXTRA_DIST = \ + texi2pod.pl + + TEXI2POD = perl $(srcdir)/texi2pod.pl +-POD2MAN = pod2man --center="GNU" --release=@VERSION@ ++POD2MAN = pod2man --center="GNU" --release=@VERSION@ --date=$(shell sed -n '1s/ .*//p' <$(srcdir)/ChangeLog) + + .pod.1: + -($(POD2MAN) --section=1 $< > $(@).T$$$$ && \ +--- fastjar-0.97/Makefile.in.jj 2008-10-16 04:15:16.000000000 -0400 ++++ fastjar-0.97/Makefile.in 2010-06-21 09:30:15.882810000 -0400 +@@ -515,7 +515,7 @@ EXTRA_DIST = \ + texi2pod.pl + + TEXI2POD = perl $(srcdir)/texi2pod.pl +-POD2MAN = pod2man --center="GNU" --release=@VERSION@ ++POD2MAN = pod2man --center="GNU" --release=@VERSION@ --date=$(shell sed -n '1s/ .*//p' <$(srcdir)/ChangeLog) + + #SPLINT_FLAGS=-I . -I $(srcdir)/lib -I $(srcdir) -DHAVE_CONFIG_H +posixlib +weak + SPLINT_FLAGS = -I . -I $(srcdir)/lib -I $(srcdir) -DHAVE_CONFIG_H -DPRIx32= -warnposix +weak diff --git a/gcc5/gcc5.SlackBuild b/gcc5/gcc5.SlackBuild new file mode 100755 index 0000000..e7851cb --- /dev/null +++ b/gcc5/gcc5.SlackBuild @@ -0,0 +1,593 @@ +#!/bin/bash +# GCC package build script (written by volkerdi@slackware.com) +# +# Copyright 2003, 2004 Slackware Linux, Inc., Concord, California, USA +# Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Patrick J. Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. +# + +# Modified 2011 by Eric Hameleers for OpenJDK. +# Modified 2017, 2018 by Eric Hameleers for gcc5. + +# Some notes, Fri May 16 12:31:32 PDT 2003: +# +# Why i486 and not i386? Because the shared C++ libraries in gcc-3.2.x will +# require 486 opcodes even when a 386 target is used (so we already weren't +# compatible with the i386 for Slackware 9.0, didn't notice, and nobody +# complained :-). gcc-3.3 fixes this issue and allows you to build a 386 +# compiler, but the fix is done in a way that produces binaries that are not +# compatible with gcc-3.2.x compiled binaries. To retain compatibility with +# Slackware 9.0, we'll have to use i486 (or better) as the compiler target +# for gcc-3.3. +# +# It's time to say goodbye to i386 support in Slackware. I've surveyed 386 +# usage online, and the most common thing I see people say when someone asks +# about running Linux on a 386 is to "run Slackware", but then they also +# usually go on to say "be sure to get an OLD version, like 4.0, before glibc, +# because it'll be more efficient." Now, if that's the general advice, then +# I see no reason to continue 386 support in the latest Slackware (and indeed +# it's no longer easily possible). + +# Some more notes, Mon Aug 3 19:49:51 UTC 2015: +# +# Changing to -march=i586 for 32-bit x86 as several things (Mesa being one of +# them) no longer work if constrained to -march=i486. We're not going to use +# -march=i686 since the only additional opcode is CMOV, which is actually less +# efficient on modern CPUs running in 32-bit mode than the alternate i586 +# instructions. No need to throw i586 CPUs under the bus (yet). + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=gcc5 +VERSION=${VERSION:-5.5.0} +MAJVER=$(echo ${VERSION} |cut -d. -f1) +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$(uname -m)" in + i?86) ARCH=i586 ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;; + *) ARCH=$(uname -m) ;; + esac + export ARCH +fi + +if [ "$ARCH" = "x86_64" ]; then + if [ -f /usr/lib/libc.a ]; then + # If we find a 32bit C library on 64bit Slackware, assume multilib: + GCC_ARCHOPTS="--enable-multilib" + MULTILIB="YES" + else + GCC_ARCHOPTS="--disable-multilib" + MULTILIB="NO" + fi +else + GCC_ARCHOPTS="--with-arch=$ARCH" + MULTILIB="NO" +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + if [ ${MULTILIB} = "YES" ]; then + echo "$PRGNAM-${VERSION}_multilib-$ARCH-$BUILD$TAG.$PKGTYPE" + else + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + fi + exit 0 +fi + +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +###sbolint off +if [ "$ARCH" = "i386" ]; then + SLKCFLAGS="-O2 -march=i386 -mcpu=i686" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=i386 +elif [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=i386 +###sbolint on +elif [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=i386 +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=i386 +elif [ "$ARCH" = "s390" ]; then + SLKCFLAGS="-O2" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=s390 +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + SLKLDFLAGS="-L/usr/lib64" + LIBDIRSUFFIX="64" + LIB_ARCH=amd64 +elif [ "$ARCH" = "armv7hl" ]; then + SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=armv7hl +else + SLKCFLAGS="-O2" + SLKLDFLAGS="" + LIBDIRSUFFIX="" + LIB_ARCH=$ARCH +fi + +# What do we want to build +LANGS=${LANGS:-'c,c++,java'} + +echo "Building these compilers: $LANGS" + +set -e + +case "$ARCH" in + arm*) TARGET=$ARCH-slackware-linux-gnueabi ;; + *) TARGET=$ARCH-slackware-linux ;; +esac + +# Clear the build locations: +rm -fr $TMP/fastjar-* $TMP/gcc-$VERSION $TMP/gcc.build.lnx $TMP/gcc.build.log $TMP/package-$PRGNAM + +mkdir -p $PKG/usr/doc/gcc-$VERSION + +# Insert package description: +mkdir -p $PKG/install +if [ ${MULTILIB} = "YES" ]; then + SLDESC=" The compilers support multilib." +else + SLDESC="" +fi +cat $CWD/slack-desc | sed -e "s/@MULTILIB@/${SLDESC}/" \ + > $PKG/install/slack-desc + +# Unpack the gcc sources: +cd $TMP +tar xvf $CWD/gcc-$VERSION.tar.?z || exit 1 + +# Patches based inside the gcc directory go here: +#( cd gcc-$VERSION/gcc +# #cat $CWD/patches/gcc.66782.diff | patch -p0 --verbose || exit 1 +#) || exit 1 + +# Copy ecj.jar into the TLD of the source. Needed for java compiler. +# This can be retrieved from ftp://sourceware.org/pub/java +cp $CWD/ecj-4.9.jar gcc-$VERSION/ecj.jar + +# Use an antlr runtime to compile javadoc. +# The runtime can be obtained from: +#https://oss.sonatype.org/content/repositories/releases/org/antlr/antlr-runtime/ +ANTLJAR=$(echo $CWD/antlr-*.jar | tail -1) + +# install docs +( cd gcc-$VERSION + # Smite the fixincludes: + cat $CWD/patches/gcc-no_fixincludes.diff | patch -p1 --verbose --backup --suffix=.orig || exit 1 + + # Add retpoline support: + cat $CWD/patches/0001-i386-Move-struct-ix86_frame-to-machine_function.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0003-i386-More-use-reference-of-struct-ix86_frame-to-avoi.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0004-i386-Don-t-use-reference-of-struct-ix86_frame.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0005-x86-Add-mindirect-branch-doc.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0005-x86-Add-mindirect-branch.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0006-x86-Add-mfunction-return-doc.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0006-x86-Add-mfunction-return.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0007-x86-Add-mindirect-branch-register-doc.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0007-x86-Add-mindirect-branch-register.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0008-x86-Add-V-register-operand-modifier-doc.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0008-x86-Add-V-register-operand-modifier.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-.diff | patch -p2 --verbose || exit 1 + cat $CWD/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-doc.diff | patch -p2 --verbose || exit 1 + + # Fix build with glibc 2.28, which no longer makes available header file + cat $CWD/patches/glibc2.28-ustat.diff | patch -p0 --verbose || exit 1 + + # Fix build with glibc 2.30 + cat $CWD/patches/glibc2.30-ipc_perm.diff | patch -p0 --verbose || exit 1 + + # Recent linux kernels have romved the Cyclades driver + cat $CWD/patches/kernel-5.12.diff | patch -p1 --verbose || exit 1 + + # Fix perms/owners + chown -R root:root . + find . -perm 777 -exec chmod 755 {} \+ + find . -perm 775 -exec chmod 755 {} \+ + find . -perm 754 -exec chmod 755 {} \+ + find . -perm 664 -exec chmod 644 {} \+ + mkdir -p $PKG/usr/doc/gcc-$VERSION + cp -a \ + COPYING* ChangeLog* INSTALL \ + LAST_UPDATED MAINTAINERS NEWS \ + README* \ + $PKG/usr/doc/gcc-$VERSION + + # We will keep part of these, but they are really big... + if [ -r ChangeLog ]; then + DOCSDIR=$(echo $PKG/usr/doc/gcc-$VERSION) + cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog + touch -r ChangeLog $DOCSDIR/ChangeLog + fi + if [ -r NEWS ]; then + DOCSDIR=$(echo $PKG/usr/doc/gcc-$VERSION) + cat NEWS | head -n 1000 > $DOCSDIR/NEWS + touch -r NEWS $DOCSDIR/NEWS + fi + + mkdir -p $PKG/usr/doc/gcc-${VERSION}/gcc + ( cd gcc + cp -a \ + ABOUT* COPYING* DATESTAMP DEV-PHASE LANG* ONEWS README* SERVICE \ + $PKG/usr/doc/gcc-$VERSION/gcc + + mkdir -p $PKG/usr/doc/gcc-${VERSION}/gcc/java + ( cd java + cp -a \ + ChangeLog.tree-ssa \ + $PKG/usr/doc/gcc-${VERSION}/gcc/java + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG/usr/doc/gcc-${VERSION}/gcc/java/ChangeLog + touch -r ChangeLog $PKG/usr/doc/gcc-${VERSION}/gcc/java/ChangeLog + fi + ) + + ) || exit 1 + + mkdir -p $PKG/usr/doc/gcc-${VERSION}/libffi + ( cd libffi + cp -a \ + ChangeLog.libgcj ChangeLog.v1 \ + LICENSE* README* \ + $PKG/usr/doc/gcc-${VERSION}/libffi + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG/usr/doc/gcc-${VERSION}/libffi/ChangeLog + touch -r ChangeLog $PKG/usr/doc/gcc-${VERSION}/libffi/ChangeLog + fi + ) + + mkdir -p $PKG/usr/doc/gcc-${VERSION}/libjava + ( cd libjava + cp -a \ + COPYING* HACKING LIBGCJ_LICENSE \ + NEWS README* THANKS \ + $PKG/usr/doc/gcc-${VERSION}/libjava + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG/usr/doc/gcc-${VERSION}/libjava/ChangeLog + touch -r ChangeLog $PKG/usr/doc/gcc-${VERSION}/libjava/ChangeLog + fi + ) + + if [ -d libmudflap ]; then + mkdir -p $PKG/usr/doc/gcc-${VERSION}/libmudflap + ( cd libmudflap + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG/usr/doc/gcc-${VERSION}/libmudflap/ChangeLog + touch -r ChangeLog $PKG/usr/doc/gcc-${VERSION}/libmudflap/ChangeLog + fi + ) + fi + + mkdir -p $PKG/usr/doc/gcc-${VERSION}/libgomp + ( cd libgomp + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG/usr/doc/gcc-${VERSION}/libgomp/ChangeLog + touch -r ChangeLog $PKG/usr/doc/gcc-${VERSION}/libgomp/ChangeLog + fi + ) + + mkdir -p $PKG/usr/doc/gcc-${VERSION}/libstdc++-v3 + ( cd libstdc++-v3 + cp -a \ + README* \ + doc/html/faq.html \ + $PKG/usr/doc/gcc-${VERSION}/libstdc++-v3 + if [ -r ChangeLog ]; then + cat ChangeLog | head -n 1000 > $PKG/usr/doc/gcc-${VERSION}/libstdc++-v3/ChangeLog + touch -r ChangeLog $PKG/usr/doc/gcc-${VERSION}/libstdc++-v3/ChangeLog + fi + ) +) + +# Add fastjar to the gcc5 package: +( cd $TMP + FASTJARVER=$(echo $CWD/fastjar-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev) + echo + echo "Building fastjar-$FASTJARVER first" + echo + rm -rf fastjar-$FASTJARVER + tar xvf $CWD/fastjar-$FASTJARVER.tar.?z* || exit 1 + cd fastjar-$FASTJARVER || exit 1 + chown -R root:root . + find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \+ + for patch in $CWD/fastjar-patches/* ; do + cat $patch | patch -p1 --verbose || exit 1 + done + LDFLAGS="$SLKLDFLAGS" \ + CFLAGS="$SLKCFLAGS" \ + CXXFLAGS="$SLKCFLAGS" \ + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib$LIBDIRSUFFIX \ + --mandir=/usr/man \ + --infodir=/usr/info \ + --build=$TARGET + make -j$(nproc) || exit 1 + make install DESTDIR=$PKG || exit 1 + mkdir -p $PKG/usr/doc/fastjar-$FASTJARVER + cp -a \ + AUTHORS CHANGES COPYING* INSTALL NEWS README* TODO \ + $PKG/usr/doc/fastjar-$FASTJARVER + # If there's a ChangeLog, installing at least part of the recent history + # is useful, but don't let it get totally out of control: + if [ -r ChangeLog ]; then + DOCSDIR=$(echo $PKG/usr/doc/fastjar-$FASTJARVER) + cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog + touch -r ChangeLog $DOCSDIR/ChangeLog + fi + find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + # Compress and if needed symlink the man pages: + if [ -d $PKG/usr/man ]; then + ( cd $PKG/usr/man + for manpagedir in $(find . -type d -name "man*") ; do + ( cd $manpagedir + for eachpage in $( find . -type l -maxdepth 1) ; do + ln -s $( readlink $eachpage ).gz $eachpage.gz + rm $eachpage + done + gzip -9 *.? + ) + done + ) + fi + # Compress info files, if any: + if [ -d $PKG/usr/info ]; then + ( cd $PKG/usr/info + rm -f dir + gzip -9 * + ) + fi + echo +) || exit 1 + +# build gcc +( mkdir gcc.build.lnx; + cd gcc.build.lnx; + + # I think it's incorrect to include this option (as it'll end up set + # to i586 on x86 platforms), and we want to tune the binary structure + # for i686, as that's where almost all of the optimization speedups + # are to be found. + # Correct me if my take on this is wrong. + # --with-cpu=$ARCH + + # NOTE: For Slackware 15.0, look into removing --with-default-libstdcxx-abi=gcc4-compatible, + # which will then require rebuilding all C++ libraries. That is, if there's any benefit. + + LDFLAGS="$SLKLDFLAGS" \ + CFLAGS="$SLKCFLAGS" \ + CXXFLAGS="$SLKCFLAGS" \ + ../gcc-$VERSION/configure \ + --prefix=/usr \ + --libdir=/usr/lib$LIBDIRSUFFIX \ + --mandir=/usr/man \ + --infodir=/usr/info \ + --enable-shared \ + --enable-bootstrap \ + --enable-languages=${LANGS} \ + --enable-threads=posix \ + --enable-checking=release \ + --enable-objc-gc \ + --with-system-zlib \ + --with-python-dir=/lib$LIBDIRSUFFIX/python2.7/site-packages \ + --enable-libstdcxx-dual-abi \ + --with-default-libstdcxx-abi=gcc4-compatible \ + --disable-libunwind-exceptions \ + --enable-__cxa_atexit \ + --enable-libssp \ + --enable-lto \ + --disable-install-libiberty \ + --with-gnu-ld \ + --without-isl \ + --verbose \ + --enable-java-home \ + --with-java-home=/usr/lib$LIBDIRSUFFIX/jvm/jre \ + --with-jvm-root-dir=/usr/lib$LIBDIRSUFFIX/jvm \ + --with-jvm-jar-dir=/usr/lib$LIBDIRSUFFIX/jvm/jvm-exports \ + --with-arch-directory=$LIB_ARCH \ + --with-antlr-jar=$ANTLJAR \ + --program-suffix=-${MAJVER} \ + --enable-version-specific-runtime-libs \ + $GCC_ARCHOPTS \ + --target=${TARGET} \ + --build=${TARGET} \ + --host=${TARGET} \ + CXX='g++ -std=c++14' || exit 1 + #--enable-java-awt=gtk \ + #--disable-gtktest \ + + # Start the build: + + # Include all debugging info (for now): + make -j$(nproc) bootstrap + make info + make install DESTDIR=$PKG + +# KLUDGE ALERT +# These *gdb.py files are causing ldconfig to complain, so they are going +# to be REMOVED for now... at some point, they might be moved somewhere +# else, in which case things should Just Work(tm). Keep an eye on it. +rm -f $PKG/usr/lib*/*gdb.py + +# Be sure the "specs" file is installed. +if [ ! -r $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/specs ]; then + cat stage1-gcc/specs > $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/specs +fi + +if [ ${MULTILIB} = "NO" ]; then + # Make our 64bit gcc look for 32bit gcc binaries in ./32 subdirectory: + # (only needed if gcc was compiled with disable-multilib) + if [ "$ARCH" = "x86_64" ]; then + sed -i 's#;.\(:../lib !m64 m32;\)$#;32\1#' \ + $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/specs + fi +fi + +make -i install-info DESTDIR=$PKG + +# Move potentially conflicting stuff to version specific subdirectory: +if [ -d $PKG/usr/lib${LIBDIRSUFFIX} ]; then + mv $PKG/usr/lib${LIBDIRSUFFIX}/lib* $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/ +fi +if [ -d $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/lib${LIBDIRSUFFIX}/ ]; then + mv $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/lib${LIBDIRSUFFIX}/lib* $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/ +fi +chmod 755 $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/libgcc_s.so.1 +if [ ${MULTILIB} = "YES" ]; then + if [ -d $PKG/usr/lib ]; then + mv $PKG/usr/lib/lib* $PKG/usr/lib/gcc/${TARGET}/${VERSION}/ + fi + if [ -d $PKG/usr/lib/gcc/${TARGET}/lib/ ]; then + mv $PKG/usr/lib/gcc/${TARGET}/lib/lib* $PKG/usr/lib/gcc/${TARGET}/${VERSION}/ + fi + chmod 755 $PKG/usr/lib/gcc/${TARGET}/${VERSION}/libgcc_s.so.1 +fi + +# The (huge) static GNU java libraries are not packaged. In nearly all +# cases one or more dependencies will not be available as static anyway. +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/libgcj.a +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/libgcj-tools.a +rm -f $PKG/usr/lib/libgcj.a +rm -f $PKG/usr/lib/libgcj-tools.a + +# Fix stuff up: +( cd $PKG/usr/info + rm dir + for eachinfo in *.info ; do + mv $eachinfo $(basename $eachinfo .info)-${MAJVER}.info + done + gzip -9 * +) + +( cd $PKG/usr/bin + ln -sf g++-${MAJVER} c++-${MAJVER} + ln -sf gcc-${MAJVER} cc-${MAJVER} + # Improved versions of the Slackware c?9 scripts, + # it is safe to overwrite the originals: + cat $CWD/c89.sh > c89 + cat $CWD/c99.sh > c99 + chmod 755 c89 c99 +) + +( cd $PKG/usr/man + rm -r man7 # Part of the system gcc package + gzip -9 */* + cd man1 + ln -sf g++-${MAJVER}.1.gz c++-${MAJVER}.1.gz + ln -sf gcc-${MAJVER}.1.gz cc-${MAJVER}.1.gz +) + +# keep a log +) 2>&1 | tee $TMP/gcc.build.log + +# Add profile scripts (non-executable by default) to make it easier +# to set the environment for compiling with gcc5: +mkdir -p $PKG/etc/profile.d +cat $CWD/profile.d/gcc5.sh > $PKG/etc/profile.d/gcc5.sh +cat $CWD/profile.d/gcc5.csh > $PKG/etc/profile.d/gcc5.csh +chmod 644 $PKG/etc/profile.d/* + +# The ecj wrapper script: +cat $CWD/ecj.sh | sed -e "s,@JAVADIR@,/usr/share/java," > $PKG/usr/bin/ecj +chmod 755 $PKG/usr/bin/ecj +# Some compatibility links. +for JAVAPROG in gcj gcjh gcj-dbtool gjar gjarsigner gjavah ; do + ln -s ${JAVAPROG}-${MAJVER} $PKG/usr/bin/${JAVAPROG} +done +( cd $PKG + for JAVALIB in usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/libgcj* ; do + ln -s /${JAVALIB} $PKG/usr/lib${LIBDIRSUFFIX}/ + done +) +# And add the missing javac symlink: +ln -s ../../../bin/ecj $PKG/usr/lib$LIBDIRSUFFIX/jvm/bin/javac +# Don't package libffi stuff anymore. GCC will link the internal version +# statically, and we'll need a newer one elsewhere. +find . -name "ffi*.h" | xargs rm -f +find . -name "libffi*" | xargs rm -fR +rm -f usr/man/man3/ffi* || true +rm -f usr/info/libffi* || true +# Install a proper pkgconfig file for libgcj: +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/pkgconfig/libgcj*pc +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/gcc/${TARGET}/${VERSION}/32/pkgconfig/libgcj*pc || true +mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig +cat $CWD/libgcj-5.pc \ + | sed -e "s,@LIBDIRSUFFIX@,${LIBDIRSUFFIX}," \ + | sed -e "s,@TARGET@,${TARGET}," \ + | sed -e "s,@VERSION@,${VERSION}," \ + > $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig/libgcj-5.pc + +# Filter all .la files (thanks much to Mark Post for the sed script): +( cd $PKG + for file in $(find . -type f -name "*.la") ; do + cat $file | sed -e 's%-L'${TMP}'[[:graph:]]* % %g' > $TMP/tmp-la-file + cat $TMP/tmp-la-file > $file + done + rm $TMP/tmp-la-file +) + +## Strip bloated binaries and libraries: +( cd $PKG + find . -name "lib*so*" -exec strip --strip-unneeded "{}" \+ + find . -name "lib*a" -exec strip -g "{}" \+ + strip --strip-unneeded usr/bin/* 2> /dev/null + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) || true + +# Remove localizations overlapping with Slackware's gcc +rm -rf $PKG/usr/share/locale + +if [ ${MULTILIB} = "YES" ]; then + PKGVER="${VERSION}_multilib" +else + PKGVER="${VERSION}" +fi + +cd $PKG +/sbin/makepkg -l y -c n "$OUTPUT/${PRGNAM}-${PKGVER}-$ARCH-$BUILD$TAG.$PKGTYPE" diff --git a/gcc5/gcc5.info b/gcc5/gcc5.info new file mode 100644 index 0000000..0d3cddc --- /dev/null +++ b/gcc5/gcc5.info @@ -0,0 +1,16 @@ +PRGNAM="gcc5" +VERSION="5.5.0" +HOMEPAGE="https://gcc.gnu.org/" +DOWNLOAD="https://ftp.gnu.org/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.xz \ + http://www.antlr3.org/download/antlr-runtime-3.4.jar \ + https://sourceware.org/pub/java/ecj-4.9.jar \ + https://download.savannah.gnu.org/releases/fastjar/fastjar-0.97.tar.gz" +MD5SUM="0f70424213b4a1113c04ba66ddda0c1f \ + 0e0318be407e51fdf7ba6777eabfdf73 \ + 7339f199ba11c941890031fd9981d7be \ + 2659f09c2e43ef8b7d4406321753f1b2" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Eric Hameleers" +EMAIL="alien@slackware.com" diff --git a/gcc5/libgcj-5.pc b/gcc5/libgcj-5.pc new file mode 100644 index 0000000..e2eb293 --- /dev/null +++ b/gcc5/libgcj-5.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=/usr/lib@LIBDIRSUFFIX@/gcc/@TARGET@/@VERSION@ +includedir=$(libdir)/include/ + +Name: libgcj +Description: libgcj +Version: @VERSION@ +Libs: -L${libdir} -lgcj +Cflags: -I${includedir} diff --git a/gcc5/patches/0001-i386-Move-struct-ix86_frame-to-machine_function.diff b/gcc5/patches/0001-i386-Move-struct-ix86_frame-to-machine_function.diff new file mode 100644 index 0000000..413d756 --- /dev/null +++ b/gcc5/patches/0001-i386-Move-struct-ix86_frame-to-machine_function.diff @@ -0,0 +1,239 @@ +From 11a3b9034935080b9996caf07fca6353309006f1 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Mon, 15 Jan 2018 11:27:24 +0000 +Subject: [PATCH 1/9] i386: Move struct ix86_frame to machine_function + +Make ix86_frame available to i386 code generation. This is needed to +backport the patch set of -mindirect-branch= to mitigate variant #2 of +the speculative execution vulnerabilities on x86 processors identified +by CVE-2017-5715, aka Spectre. + + Backport from mainline + * config/i386/i386.c (ix86_frame): Moved to ... + * config/i386/i386.h (ix86_frame): Here. + (machine_function): Add frame. + * config/i386/i386.c (ix86_compute_frame_layout): Repace the + frame argument with &cfun->machine->frame. + (ix86_can_use_return_insn_p): Don't pass &frame to + ix86_compute_frame_layout. Copy frame from cfun->machine->frame. + (ix86_can_eliminate): Likewise. + (ix86_expand_prologue): Likewise. + (ix86_expand_epilogue): Likewise. + (ix86_expand_split_stack_prologue): Likewise. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256691 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + src/gcc/config/i386/i386.c | 68 ++++++++------------------------------------- + src/gcc/config/i386/i386.h | 53 ++++++++++++++++++++++++++++++++++- + 2 files changed, 65 insertions(+), 56 deletions(-) + +Index: b/src/gcc/config/i386/i386.c +=================================================================== +--- a/src/gcc/config/i386/i386.c ++++ b/src/gcc/config/i386/i386.c +@@ -2306,53 +2306,6 @@ struct GTY(()) stack_local_entry { + struct stack_local_entry *next; + }; + +-/* Structure describing stack frame layout. +- Stack grows downward: +- +- [arguments] +- <- ARG_POINTER +- saved pc +- +- saved static chain if ix86_static_chain_on_stack +- +- saved frame pointer if frame_pointer_needed +- <- HARD_FRAME_POINTER +- [saved regs] +- <- regs_save_offset +- [padding0] +- +- [saved SSE regs] +- <- sse_regs_save_offset +- [padding1] | +- | <- FRAME_POINTER +- [va_arg registers] | +- | +- [frame] | +- | +- [padding2] | = to_allocate +- <- STACK_POINTER +- */ +-struct ix86_frame +-{ +- int nsseregs; +- int nregs; +- int va_arg_size; +- int red_zone_size; +- int outgoing_arguments_size; +- +- /* The offsets relative to ARG_POINTER. */ +- HOST_WIDE_INT frame_pointer_offset; +- HOST_WIDE_INT hard_frame_pointer_offset; +- HOST_WIDE_INT stack_pointer_offset; +- HOST_WIDE_INT hfp_save_offset; +- HOST_WIDE_INT reg_save_offset; +- HOST_WIDE_INT sse_reg_save_offset; +- +- /* When save_regs_using_mov is set, emit prologue using +- move instead of push instructions. */ +- bool save_regs_using_mov; +-}; +- + /* Which cpu are we scheduling for. */ + enum attr_cpu ix86_schedule; + +@@ -2443,7 +2396,7 @@ static unsigned int ix86_function_arg_bo + const_tree); + static rtx ix86_static_chain (const_tree, bool); + static int ix86_function_regparm (const_tree, const_tree); +-static void ix86_compute_frame_layout (struct ix86_frame *); ++static void ix86_compute_frame_layout (void); + static bool ix86_expand_vector_init_one_nonzero (bool, machine_mode, + rtx, rtx, int); + static void ix86_add_new_builtins (HOST_WIDE_INT); +@@ -9664,7 +9617,8 @@ ix86_can_use_return_insn_p (void) + if (crtl->args.pops_args && crtl->args.size >= 32768) + return 0; + +- ix86_compute_frame_layout (&frame); ++ ix86_compute_frame_layout (); ++ frame = cfun->machine->frame; + return (frame.stack_pointer_offset == UNITS_PER_WORD + && (frame.nregs + frame.nsseregs) == 0); + } +@@ -10073,8 +10027,8 @@ ix86_can_eliminate (const int from, cons + HOST_WIDE_INT + ix86_initial_elimination_offset (int from, int to) + { +- struct ix86_frame frame; +- ix86_compute_frame_layout (&frame); ++ ix86_compute_frame_layout (); ++ struct ix86_frame frame = cfun->machine->frame; + + if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) + return frame.hard_frame_pointer_offset; +@@ -10113,8 +10067,9 @@ ix86_builtin_setjmp_frame_value (void) + /* Fill structure ix86_frame about frame of currently computed function. */ + + static void +-ix86_compute_frame_layout (struct ix86_frame *frame) ++ix86_compute_frame_layout (void) + { ++ struct ix86_frame *frame = &cfun->machine->frame; + unsigned HOST_WIDE_INT stack_alignment_needed; + HOST_WIDE_INT offset; + unsigned HOST_WIDE_INT preferred_alignment; +@@ -11417,7 +11372,8 @@ ix86_expand_prologue (void) + m->fs.sp_offset = INCOMING_FRAME_SP_OFFSET; + m->fs.sp_valid = true; + +- ix86_compute_frame_layout (&frame); ++ ix86_compute_frame_layout (); ++ frame = m->frame; + + if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) + { +@@ -12083,7 +12039,8 @@ ix86_expand_epilogue (int style) + bool using_drap; + + ix86_finalize_stack_realign_flags (); +- ix86_compute_frame_layout (&frame); ++ ix86_compute_frame_layout (); ++ frame = m->frame; + + m->fs.sp_valid = (!frame_pointer_needed + || (crtl->sp_is_unchanging +@@ -12546,7 +12503,8 @@ ix86_expand_split_stack_prologue (void) + gcc_assert (flag_split_stack && reload_completed); + + ix86_finalize_stack_realign_flags (); +- ix86_compute_frame_layout (&frame); ++ ix86_compute_frame_layout (); ++ frame = cfun->machine->frame; + allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET; + + /* This is the label we will branch to if we have enough stack +Index: b/src/gcc/config/i386/i386.h +=================================================================== +--- a/src/gcc/config/i386/i386.h ++++ b/src/gcc/config/i386/i386.h +@@ -2409,9 +2409,56 @@ enum avx_u128_state + + #define FASTCALL_PREFIX '@' + ++#ifndef USED_FOR_TARGET ++/* Structure describing stack frame layout. ++ Stack grows downward: ++ ++ [arguments] ++ <- ARG_POINTER ++ saved pc ++ ++ saved static chain if ix86_static_chain_on_stack ++ ++ saved frame pointer if frame_pointer_needed ++ <- HARD_FRAME_POINTER ++ [saved regs] ++ <- regs_save_offset ++ [padding0] ++ ++ [saved SSE regs] ++ <- sse_regs_save_offset ++ [padding1] | ++ | <- FRAME_POINTER ++ [va_arg registers] | ++ | ++ [frame] | ++ | ++ [padding2] | = to_allocate ++ <- STACK_POINTER ++ */ ++struct GTY(()) ix86_frame ++{ ++ int nsseregs; ++ int nregs; ++ int va_arg_size; ++ int red_zone_size; ++ int outgoing_arguments_size; ++ ++ /* The offsets relative to ARG_POINTER. */ ++ HOST_WIDE_INT frame_pointer_offset; ++ HOST_WIDE_INT hard_frame_pointer_offset; ++ HOST_WIDE_INT stack_pointer_offset; ++ HOST_WIDE_INT hfp_save_offset; ++ HOST_WIDE_INT reg_save_offset; ++ HOST_WIDE_INT sse_reg_save_offset; ++ ++ /* When save_regs_using_mov is set, emit prologue using ++ move instead of push instructions. */ ++ bool save_regs_using_mov; ++}; ++ + /* Machine specific frame tracking during prologue/epilogue generation. */ + +-#ifndef USED_FOR_TARGET + struct GTY(()) machine_frame_state + { + /* This pair tracks the currently active CFA as reg+offset. When reg +@@ -2457,6 +2504,9 @@ struct GTY(()) machine_function { + int varargs_fpr_size; + int optimize_mode_switching[MAX_386_ENTITIES]; + ++ /* Cached initial frame layout for the current function. */ ++ struct ix86_frame frame; ++ + /* Number of saved registers USE_FAST_PROLOGUE_EPILOGUE + has been computed for. */ + int use_fast_prologue_epilogue_nregs; +@@ -2524,6 +2574,7 @@ struct GTY(()) machine_function { + #define ix86_current_function_calls_tls_descriptor \ + (ix86_tls_descriptor_calls_expanded_in_cfun && df_regs_ever_live_p (SP_REG)) + #define ix86_static_chain_on_stack (cfun->machine->static_chain_on_stack) ++#define ix86_red_zone_size (cfun->machine->frame.red_zone_size) + + /* Control behavior of x86_file_start. */ + #define X86_FILE_START_VERSION_DIRECTIVE false diff --git a/gcc5/patches/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.diff b/gcc5/patches/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.diff new file mode 100644 index 0000000..7b928df --- /dev/null +++ b/gcc5/patches/0002-i386-Use-reference-of-struct-ix86_frame-to-avoid-cop.diff @@ -0,0 +1,72 @@ +From 18202ba32cb8de22fc43a5839235a751d0f5c4d9 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Mon, 15 Jan 2018 11:28:44 +0000 +Subject: [PATCH 2/9] i386: Use reference of struct ix86_frame to avoid copy + +When there is no need to make a copy of ix86_frame, we can use reference +of struct ix86_frame to avoid copy. + + Backport from mainline + * config/i386/i386.c (ix86_can_use_return_insn_p): Use reference + of struct ix86_frame. + (ix86_initial_elimination_offset): Likewise. + (ix86_expand_split_stack_prologue): Likewise. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256692 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + gcc/config/i386/i386.c | 9 +++------ + gcc/testsuite/ChangeLog | 8 ++++++++ + 2 files changed, 11 insertions(+), 6 deletions(-) + +diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c +index 8133372..397ef7c 100644 +--- a/src/gcc/config/i386/i386.c ++++ b/src/gcc/config/i386/i386.c +@@ -11843,8 +11843,6 @@ symbolic_reference_mentioned_p (rtx op) + bool + ix86_can_use_return_insn_p (void) + { +- struct ix86_frame frame; +- + if (! reload_completed || frame_pointer_needed) + return 0; + +@@ -11857,7 +11855,7 @@ ix86_can_use_return_insn_p (void) + return 0; + + ix86_compute_frame_layout (); +- frame = cfun->machine->frame; ++ struct ix86_frame &frame = cfun->machine->frame; + return (frame.stack_pointer_offset == UNITS_PER_WORD + && (frame.nregs + frame.nsseregs) == 0); + } +@@ -12344,7 +12342,7 @@ HOST_WIDE_INT + ix86_initial_elimination_offset (int from, int to) + { + ix86_compute_frame_layout (); +- struct ix86_frame frame = cfun->machine->frame; ++ struct ix86_frame &frame = cfun->machine->frame; + + if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) + return frame.hard_frame_pointer_offset; +@@ -14860,7 +14858,6 @@ static GTY(()) rtx split_stack_fn_large; + void + ix86_expand_split_stack_prologue (void) + { +- struct ix86_frame frame; + HOST_WIDE_INT allocate; + unsigned HOST_WIDE_INT args_size; + rtx_code_label *label; +@@ -14873,7 +14870,7 @@ ix86_expand_split_stack_prologue (void) + + ix86_finalize_stack_realign_flags (); + ix86_compute_frame_layout (); +- frame = cfun->machine->frame; ++ struct ix86_frame &frame = cfun->machine->frame; + allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET; + + /* This is the label we will branch to if we have enough stack +-- +2.7.4 + diff --git a/gcc5/patches/0003-i386-More-use-reference-of-struct-ix86_frame-to-avoi.diff b/gcc5/patches/0003-i386-More-use-reference-of-struct-ix86_frame-to-avoi.diff new file mode 100644 index 0000000..f6f30d1 --- /dev/null +++ b/gcc5/patches/0003-i386-More-use-reference-of-struct-ix86_frame-to-avoi.diff @@ -0,0 +1,59 @@ +From 839ca2d69157ef03c8df0ab912dacdb991738694 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Mon, 15 Jan 2018 11:33:42 +0000 +Subject: [PATCH 3/9] i386: More use reference of struct ix86_frame to avoid copy + +When there is no need to make a copy of ix86_frame, we can use reference +of struct ix86_frame to avoid copy. + + Backport from mainline + * config/i386/i386.c (ix86_expand_prologue): Use reference of + struct ix86_frame. + (ix86_expand_epilogue): Likewise. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256695 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + gcc/ChangeLog | 7 +++++++ + gcc/config/i386/i386.c | 6 ++---- + 2 files changed, 9 insertions(+), 4 deletions(-) + +diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c +index 397ef7c..986e6d7 100644 +--- a/src/gcc/config/i386/i386.c ++++ b/src/gcc/config/i386/i386.c +@@ -13667,7 +13667,6 @@ ix86_expand_prologue (void) + { + struct machine_function *m = cfun->machine; + rtx insn, t; +- struct ix86_frame frame; + HOST_WIDE_INT allocate; + bool int_registers_saved; + bool sse_registers_saved; +@@ -13691,7 +13690,7 @@ ix86_expand_prologue (void) + m->fs.sp_valid = true; + + ix86_compute_frame_layout (); +- frame = m->frame; ++ struct ix86_frame &frame = cfun->machine->frame; + + if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) + { +@@ -14354,13 +14353,12 @@ ix86_expand_epilogue (int style) + { + struct machine_function *m = cfun->machine; + struct machine_frame_state frame_state_save = m->fs; +- struct ix86_frame frame; + bool restore_regs_via_mov; + bool using_drap; + + ix86_finalize_stack_realign_flags (); + ix86_compute_frame_layout (); +- frame = m->frame; ++ struct ix86_frame &frame = cfun->machine->frame; + + m->fs.sp_valid = (!frame_pointer_needed + || (crtl->sp_is_unchanging +-- +2.7.4 + diff --git a/gcc5/patches/0004-i386-Don-t-use-reference-of-struct-ix86_frame.diff b/gcc5/patches/0004-i386-Don-t-use-reference-of-struct-ix86_frame.diff new file mode 100644 index 0000000..7678444 --- /dev/null +++ b/gcc5/patches/0004-i386-Don-t-use-reference-of-struct-ix86_frame.diff @@ -0,0 +1,63 @@ +From c25b81ba01fa9ac0c1baa3aabd64190c47928f03 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 12:49:29 +0000 +Subject: [PATCH 4/9] i386: Don't use reference of struct ix86_frame + +Use reference of struct ix86_frame in ix86_expand_prologue and +ix86_expand_epilogue caused: + +raised STORAGE_ERROR : stack overflow or erroneous memory access +make[5]: *** [/export/gnu/import/git/sources/gcc/gcc/ada/Make-generated.in:45: ada/sinfo.h] Error 1 + +on trunk when bootstrapping GCC with ada on x86-64. + + * config/i386/i386.c (ix86_expand_prologue): Don't use reference + of struct ix86_frame. + (ix86_expand_epilogue): Likewise. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256742 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + gcc/ChangeLog | 10 ++++++++++ + gcc/config/i386/i386.c | 6 ++++-- + 2 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c +index e758387..ba2abc5 100644 +--- a/src/gcc/config/i386/i386.c ++++ b/src/gcc/config/i386/i386.c +@@ -14061,6 +14061,7 @@ ix86_expand_prologue (void) + { + struct machine_function *m = cfun->machine; + rtx insn, t; ++ struct ix86_frame frame; + HOST_WIDE_INT allocate; + bool int_registers_saved; + bool sse_registers_saved; +@@ -14084,7 +14085,7 @@ ix86_expand_prologue (void) + m->fs.sp_valid = true; + + ix86_compute_frame_layout (); +- struct ix86_frame &frame = cfun->machine->frame; ++ frame = m->frame; + + if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) + { +@@ -14747,12 +14748,13 @@ ix86_expand_epilogue (int style) + { + struct machine_function *m = cfun->machine; + struct machine_frame_state frame_state_save = m->fs; ++ struct ix86_frame frame; + bool restore_regs_via_mov; + bool using_drap; + + ix86_finalize_stack_realign_flags (); + ix86_compute_frame_layout (); +- struct ix86_frame &frame = cfun->machine->frame; ++ frame = m->frame; + + m->fs.sp_valid = (!frame_pointer_needed + || (crtl->sp_is_unchanging +-- +2.7.4 + diff --git a/gcc5/patches/0005-x86-Add-mindirect-branch-doc.diff b/gcc5/patches/0005-x86-Add-mindirect-branch-doc.diff new file mode 100644 index 0000000..bcaf572 --- /dev/null +++ b/gcc5/patches/0005-x86-Add-mindirect-branch-doc.diff @@ -0,0 +1,279 @@ +From c6b72be421ded17e0c156070ba6e90aa6c335ed6 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 10:59:42 +0000 +Subject: [PATCH 5/9] x86: Add -mindirect-branch= (documentation) + +Add -mindirect-branch= option to convert indirect call and jump to call +and return thunks. The default is 'keep', which keeps indirect call and +jump unmodified. 'thunk' converts indirect call and jump to call and +return thunk. 'thunk-inline' converts indirect call and jump to inlined +call and return thunk. 'thunk-extern' converts indirect call and jump to +external call and return thunk provided in a separate object file. You +can control this behavior for a specific function by using the function +attribute indirect_branch. + +2 kinds of thunks are geneated. Memory thunk where the function address +is at the top of the stack: + +__x86_indirect_thunk: + call L2 +L1: + pause + lfence + jmp L1 +L2: + lea 8(%rsp), %rsp|lea 4(%esp), %esp + ret + +Indirect jmp via memory, "jmp mem", is converted to + + push memory + jmp __x86_indirect_thunk + +Indirect call via memory, "call mem", is converted to + + jmp L2 +L1: + push [mem] + jmp __x86_indirect_thunk +L2: + call L1 + +Register thunk where the function address is in a register, reg: + +__x86_indirect_thunk_reg: + call L2 +L1: + pause + lfence + jmp L1 +L2: + movq %reg, (%rsp)|movl %reg, (%esp) + ret + +where reg is one of (r|e)ax, (r|e)dx, (r|e)cx, (r|e)bx, (r|e)si, (r|e)di, +(r|e)bp, r8, r9, r10, r11, r12, r13, r14 and r15. + +Indirect jmp via register, "jmp reg", is converted to + + jmp __x86_indirect_thunk_reg + +Indirect call via register, "call reg", is converted to + + call __x86_indirect_thunk_reg + +gcc/ + + Backport from mainline + * config/i386/i386-opts.h (indirect_branch): New. + * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise. + * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone + with local indirect jump when converting indirect call and jump. + (ix86_set_indirect_branch_type): New. + (ix86_set_current_function): Call ix86_set_indirect_branch_type. + (indirectlabelno): New. + (indirect_thunk_needed): Likewise. + (indirect_thunk_bnd_needed): Likewise. + (indirect_thunks_used): Likewise. + (indirect_thunks_bnd_used): Likewise. + (INDIRECT_LABEL): Likewise. + (indirect_thunk_name): Likewise. + (output_indirect_thunk): Likewise. + (output_indirect_thunk_function): Likewise. + (ix86_output_indirect_branch_via_reg): Likewise. + (ix86_output_indirect_branch_via_push): Likewise. + (ix86_output_indirect_branch): Likewise. + (ix86_output_indirect_jmp): Likewise. + (ix86_code_end): Call output_indirect_thunk_function if needed. + (ix86_output_call_insn): Call ix86_output_indirect_branch if + needed. + (ix86_handle_fndecl_attribute): Handle indirect_branch. + (ix86_attribute_table): Add indirect_branch. + * config/i386/i386.h (machine_function): Add indirect_branch_type + and has_local_indirect_jump. + * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump + to true. + (tablejump): Likewise. + (*indirect_jump): Use ix86_output_indirect_jmp. + (*tablejump_1): Likewise. + (simple_return_indirect_internal): Likewise. + * config/i386/i386.opt (mindirect-branch=): New option. + (indirect_branch): New. + (keep): Likewise. + (thunk): Likewise. + (thunk-inline): Likewise. + (thunk-extern): Likewise. + * doc/extend.texi: Document indirect_branch function attribute. + * doc/invoke.texi: Document -mindirect-branch= option. + +gcc/testsuite/ + + Backport from mainline + * gcc.target/i386/indirect-thunk-1.c: New test. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-5.c: Likewise. + * gcc.target/i386/indirect-thunk-6.c: Likewise. + * gcc.target/i386/indirect-thunk-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256732 138bc75d-0d04-0410-961f-82ee72b054a4 + +[UBUNTU NOTES: Updated for gcc-5.4 to include defines for + FIRST_INT_REG, LAST_INT_REG, and LEGACY_INT_REGNO_P as defined in + https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=222269. + Dropped indirect-thunk-5.c, indirect-thunk-6.c, + indirect-thunk-bnd-3.c, indirect-thunk-bnd-4.c, + indirect-thunk-extern-5.c, indirect-thunk-extern-6.c, + indirect-thunk-inline-5.c, and indirect-thunk-inline-6.c tests due + to gcc 5.4 and earlier not supporting the -fno-plt option. + --sbeattie, tyhicks] +--- + src/gcc/config/i386/i386-opts.h | 13 + src/gcc/config/i386/i386-protos.h | 1 + src/gcc/config/i386/i386.c | 621 +++++++++++- + src/gcc/config/i386/i386.h | 12 + src/gcc/config/i386/i386.md | 26 + src/gcc/config/i386/i386.opt | 20 + src/gcc/doc/extend.texi | 10 + src/gcc/doc/invoke.texi | 14 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 44 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c | 23 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c | 23 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c | 22 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c | 22 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c | 44 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c | 42 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c | 19 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c | 19 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c | 43 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c | 44 + 33 files changed, 1334 insertions(+), 15 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-7.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c + +Index: b/src/gcc/doc/extend.texi +=================================================================== +--- a/src/gcc/doc/extend.texi ++++ b/src/gcc/doc/extend.texi +@@ -4119,6 +4119,16 @@ Specify which floating-point unit to use + @code{target("fpmath=sse,387")} option must be specified as + @code{target("fpmath=sse+387")} because the comma would separate + different options. ++ ++@item indirect_branch("@var{choice}") ++@cindex @code{indirect_branch} function attribute, x86 ++On x86 targets, the @code{indirect_branch} attribute causes the compiler ++to convert indirect call and jump with @var{choice}. @samp{keep} ++keeps indirect call and jump unmodified. @samp{thunk} converts indirect ++call and jump to call and return thunk. @samp{thunk-inline} converts ++indirect call and jump to inlined call and return thunk. ++@samp{thunk-extern} converts indirect call and jump to external call ++and return thunk provided in a separate object file. + @end table + + On the PowerPC, the following options are allowed: +Index: b/src/gcc/doc/invoke.texi +=================================================================== +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -1090,7 +1090,8 @@ See RS/6000 and PowerPC Options. + -m32 -m64 -mx32 -m16 -mlarge-data-threshold=@var{num} @gol + -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol + -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol +--malign-data=@var{type} -mstack-protector-guard=@var{guard}} ++-malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol ++-mindirect-branch=@var{choice}} + + @emph{x86 Windows Options} + @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol +@@ -24017,6 +24018,17 @@ The default value of this option is enab + of the option is @option{-fno-sync-libcalls}. This option is used in + the implementation of the @file{libatomic} runtime library. + ++@item -mindirect-branch=@var{choice} ++@opindex -mindirect-branch ++Convert indirect call and jump with @var{choice}. The default is ++@samp{keep}, which keeps indirect call and jump unmodified. ++@samp{thunk} converts indirect call and jump to call and return thunk. ++@samp{thunk-inline} converts indirect call and jump to inlined call ++and return thunk. @samp{thunk-extern} converts indirect call and jump ++to external call and return thunk provided in a separate object file. ++You can control this behavior for a specific function by using the ++function attribute @code{indirect_branch}. @xref{Function Attributes}. ++ + @end table + + @c man end diff --git a/gcc5/patches/0005-x86-Add-mindirect-branch.diff b/gcc5/patches/0005-x86-Add-mindirect-branch.diff new file mode 100644 index 0000000..db9690c --- /dev/null +++ b/gcc5/patches/0005-x86-Add-mindirect-branch.diff @@ -0,0 +1,1870 @@ +From c6b72be421ded17e0c156070ba6e90aa6c335ed6 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 10:59:42 +0000 +Subject: [PATCH 5/9] x86: Add -mindirect-branch= + +Add -mindirect-branch= option to convert indirect call and jump to call +and return thunks. The default is 'keep', which keeps indirect call and +jump unmodified. 'thunk' converts indirect call and jump to call and +return thunk. 'thunk-inline' converts indirect call and jump to inlined +call and return thunk. 'thunk-extern' converts indirect call and jump to +external call and return thunk provided in a separate object file. You +can control this behavior for a specific function by using the function +attribute indirect_branch. + +2 kinds of thunks are geneated. Memory thunk where the function address +is at the top of the stack: + +__x86_indirect_thunk: + call L2 +L1: + pause + lfence + jmp L1 +L2: + lea 8(%rsp), %rsp|lea 4(%esp), %esp + ret + +Indirect jmp via memory, "jmp mem", is converted to + + push memory + jmp __x86_indirect_thunk + +Indirect call via memory, "call mem", is converted to + + jmp L2 +L1: + push [mem] + jmp __x86_indirect_thunk +L2: + call L1 + +Register thunk where the function address is in a register, reg: + +__x86_indirect_thunk_reg: + call L2 +L1: + pause + lfence + jmp L1 +L2: + movq %reg, (%rsp)|movl %reg, (%esp) + ret + +where reg is one of (r|e)ax, (r|e)dx, (r|e)cx, (r|e)bx, (r|e)si, (r|e)di, +(r|e)bp, r8, r9, r10, r11, r12, r13, r14 and r15. + +Indirect jmp via register, "jmp reg", is converted to + + jmp __x86_indirect_thunk_reg + +Indirect call via register, "call reg", is converted to + + call __x86_indirect_thunk_reg + +gcc/ + + Backport from mainline + * config/i386/i386-opts.h (indirect_branch): New. + * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise. + * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone + with local indirect jump when converting indirect call and jump. + (ix86_set_indirect_branch_type): New. + (ix86_set_current_function): Call ix86_set_indirect_branch_type. + (indirectlabelno): New. + (indirect_thunk_needed): Likewise. + (indirect_thunk_bnd_needed): Likewise. + (indirect_thunks_used): Likewise. + (indirect_thunks_bnd_used): Likewise. + (INDIRECT_LABEL): Likewise. + (indirect_thunk_name): Likewise. + (output_indirect_thunk): Likewise. + (output_indirect_thunk_function): Likewise. + (ix86_output_indirect_branch_via_reg): Likewise. + (ix86_output_indirect_branch_via_push): Likewise. + (ix86_output_indirect_branch): Likewise. + (ix86_output_indirect_jmp): Likewise. + (ix86_code_end): Call output_indirect_thunk_function if needed. + (ix86_output_call_insn): Call ix86_output_indirect_branch if + needed. + (ix86_handle_fndecl_attribute): Handle indirect_branch. + (ix86_attribute_table): Add indirect_branch. + * config/i386/i386.h (machine_function): Add indirect_branch_type + and has_local_indirect_jump. + * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump + to true. + (tablejump): Likewise. + (*indirect_jump): Use ix86_output_indirect_jmp. + (*tablejump_1): Likewise. + (simple_return_indirect_internal): Likewise. + * config/i386/i386.opt (mindirect-branch=): New option. + (indirect_branch): New. + (keep): Likewise. + (thunk): Likewise. + (thunk-inline): Likewise. + (thunk-extern): Likewise. + * doc/extend.texi: Document indirect_branch function attribute. + * doc/invoke.texi: Document -mindirect-branch= option. + +gcc/testsuite/ + + Backport from mainline + * gcc.target/i386/indirect-thunk-1.c: New test. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-5.c: Likewise. + * gcc.target/i386/indirect-thunk-6.c: Likewise. + * gcc.target/i386/indirect-thunk-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256732 138bc75d-0d04-0410-961f-82ee72b054a4 + +[UBUNTU NOTES: Updated for gcc-5.4 to include defines for + FIRST_INT_REG, LAST_INT_REG, and LEGACY_INT_REGNO_P as defined in + https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=222269. + Dropped indirect-thunk-5.c, indirect-thunk-6.c, + indirect-thunk-bnd-3.c, indirect-thunk-bnd-4.c, + indirect-thunk-extern-5.c, indirect-thunk-extern-6.c, + indirect-thunk-inline-5.c, and indirect-thunk-inline-6.c tests due + to gcc 5.4 and earlier not supporting the -fno-plt option. + --sbeattie, tyhicks] +--- + src/gcc/config/i386/i386-opts.h | 13 + src/gcc/config/i386/i386-protos.h | 1 + src/gcc/config/i386/i386.c | 621 +++++++++++- + src/gcc/config/i386/i386.h | 12 + src/gcc/config/i386/i386.md | 26 + src/gcc/config/i386/i386.opt | 20 + src/gcc/doc/extend.texi | 10 + src/gcc/doc/invoke.texi | 14 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 44 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c | 23 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c | 23 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c | 22 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c | 22 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c | 44 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c | 42 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c | 19 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c | 19 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c | 43 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c | 20 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c | 21 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c | 44 + 33 files changed, 1334 insertions(+), 15 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-7.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c + +Index: b/src/gcc/config/i386/i386-opts.h +=================================================================== +--- a/src/gcc/config/i386/i386-opts.h ++++ b/src/gcc/config/i386/i386-opts.h +@@ -99,4 +99,17 @@ enum stack_protector_guard { + SSP_GLOBAL /* global canary */ + }; + ++/* This is used to mitigate variant #2 of the speculative execution ++ vulnerabilities on x86 processors identified by CVE-2017-5715, aka ++ Spectre. They convert indirect branches and function returns to ++ call and return thunks to avoid speculative execution via indirect ++ call, jmp and ret. */ ++enum indirect_branch { ++ indirect_branch_unset = 0, ++ indirect_branch_keep, ++ indirect_branch_thunk, ++ indirect_branch_thunk_inline, ++ indirect_branch_thunk_extern ++}; ++ + #endif +Index: b/src/gcc/config/i386/i386-protos.h +=================================================================== +--- a/src/gcc/config/i386/i386-protos.h ++++ b/src/gcc/config/i386/i386-protos.h +@@ -306,6 +306,7 @@ extern enum attr_cpu ix86_schedule; + #endif + + extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); ++extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); + + #ifdef RTX_CODE + /* Target data for multipass lookahead scheduling. +Index: b/src/gcc/config/i386/i386.c +=================================================================== +--- a/src/gcc/config/i386/i386.c ++++ b/src/gcc/config/i386/i386.c +@@ -2554,12 +2554,23 @@ make_pass_insert_vzeroupper (gcc::contex + return new pass_insert_vzeroupper (ctxt); + } + +-/* Return true if a red-zone is in use. */ ++/* Return true if a red-zone is in use. We can't use red-zone when ++ there are local indirect jumps, like "indirect_jump" or "tablejump", ++ which jumps to another place in the function, since "call" in the ++ indirect thunk pushes the return address onto stack, destroying ++ red-zone. ++ ++ TODO: If we can reserve the first 2 WORDs, for PUSH and, another ++ for CALL, in red-zone, we can allow local indirect jumps with ++ indirect thunk. */ + + static inline bool + ix86_using_red_zone (void) + { +- return TARGET_RED_ZONE && !TARGET_64BIT_MS_ABI; ++ return (TARGET_RED_ZONE ++ && !TARGET_64BIT_MS_ABI ++ && (!cfun->machine->has_local_indirect_jump ++ || cfun->machine->indirect_branch_type == indirect_branch_keep)); + } + + /* Return a string that documents the current -m options. The caller is +@@ -5126,6 +5137,37 @@ ix86_reset_previous_fndecl (void) + ix86_previous_fndecl = NULL_TREE; + } + ++/* Set the indirect_branch_type field from the function FNDECL. */ ++ ++static void ++ix86_set_indirect_branch_type (tree fndecl) ++{ ++ if (cfun->machine->indirect_branch_type == indirect_branch_unset) ++ { ++ tree attr = lookup_attribute ("indirect_branch", ++ DECL_ATTRIBUTES (fndecl)); ++ if (attr != NULL) ++ { ++ tree args = TREE_VALUE (attr); ++ if (args == NULL) ++ gcc_unreachable (); ++ tree cst = TREE_VALUE (args); ++ if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0) ++ cfun->machine->indirect_branch_type = indirect_branch_keep; ++ else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0) ++ cfun->machine->indirect_branch_type = indirect_branch_thunk; ++ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0) ++ cfun->machine->indirect_branch_type = indirect_branch_thunk_inline; ++ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0) ++ cfun->machine->indirect_branch_type = indirect_branch_thunk_extern; ++ else ++ gcc_unreachable (); ++ } ++ else ++ cfun->machine->indirect_branch_type = ix86_indirect_branch; ++ } ++} ++ + /* Establish appropriate back-end context for processing the function + FNDECL. The argument might be NULL to indicate processing at top + level, outside of any function scope. */ +@@ -5136,7 +5178,11 @@ ix86_set_current_function (tree fndecl) + several times in the course of compiling a function, and we don't want to + slow things down too much or call target_reinit when it isn't safe. */ + if (fndecl == ix86_previous_fndecl) +- return; ++ { ++ if (fndecl != NULL_TREE) ++ ix86_set_indirect_branch_type (fndecl); ++ return; ++ } + + tree old_tree; + if (ix86_previous_fndecl == NULL_TREE) +@@ -5153,6 +5199,8 @@ ix86_set_current_function (tree fndecl) + return; + } + ++ ix86_set_indirect_branch_type (fndecl); ++ + tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (fndecl); + if (new_tree == NULL_TREE) + new_tree = target_option_default_node; +@@ -9681,6 +9729,220 @@ ix86_setup_frame_addresses (void) + # endif + #endif + ++/* Label count for call and return thunks. It is used to make unique ++ labels in call and return thunks. */ ++static int indirectlabelno; ++ ++/* True if call and return thunk functions are needed. */ ++static bool indirect_thunk_needed = false; ++/* True if call and return thunk functions with the BND prefix are ++ needed. */ ++static bool indirect_thunk_bnd_needed = false; ++ ++/* Bit masks of integer registers, which contain branch target, used ++ by call and return thunks functions. */ ++static int indirect_thunks_used; ++/* Bit masks of integer registers, which contain branch target, used ++ by call and return thunks functions with the BND prefix. */ ++static int indirect_thunks_bnd_used; ++ ++#ifndef INDIRECT_LABEL ++# define INDIRECT_LABEL "LIND" ++#endif ++ ++/* Fills in the label name that should be used for the indirect thunk. */ ++ ++static void ++indirect_thunk_name (char name[32], int regno, bool need_bnd_p) ++{ ++ if (USE_HIDDEN_LINKONCE) ++ { ++ const char *bnd = need_bnd_p ? "_bnd" : ""; ++ if (regno >= 0) ++ { ++ const char *reg_prefix; ++ if (LEGACY_INT_REGNO_P (regno)) ++ reg_prefix = TARGET_64BIT ? "r" : "e"; ++ else ++ reg_prefix = ""; ++ sprintf (name, "__x86_indirect_thunk%s_%s%s", ++ bnd, reg_prefix, reg_names[regno]); ++ } ++ else ++ sprintf (name, "__x86_indirect_thunk%s", bnd); ++ } ++ else ++ { ++ if (regno >= 0) ++ { ++ if (need_bnd_p) ++ ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno); ++ else ++ ASM_GENERATE_INTERNAL_LABEL (name, "LITR", regno); ++ } ++ else ++ { ++ if (need_bnd_p) ++ ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); ++ else ++ ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); ++ } ++ } ++} ++ ++/* Output a call and return thunk for indirect branch. If BND_P is ++ true, the BND prefix is needed. If REGNO != -1, the function ++ address is in REGNO and the call and return thunk looks like: ++ ++ call L2 ++ L1: ++ pause ++ jmp L1 ++ L2: ++ mov %REG, (%sp) ++ ret ++ ++ Otherwise, the function address is on the top of stack and the ++ call and return thunk looks like: ++ ++ call L2 ++ L1: ++ pause ++ jmp L1 ++ L2: ++ lea WORD_SIZE(%sp), %sp ++ ret ++ */ ++ ++static void ++output_indirect_thunk (bool need_bnd_p, int regno) ++{ ++ char indirectlabel1[32]; ++ char indirectlabel2[32]; ++ ++ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, INDIRECT_LABEL, ++ indirectlabelno++); ++ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, INDIRECT_LABEL, ++ indirectlabelno++); ++ ++ /* Call */ ++ if (need_bnd_p) ++ fputs ("\tbnd call\t", asm_out_file); ++ else ++ fputs ("\tcall\t", asm_out_file); ++ assemble_name_raw (asm_out_file, indirectlabel2); ++ fputc ('\n', asm_out_file); ++ ++ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); ++ ++ /* Pause + lfence. */ ++ fprintf (asm_out_file, "\tpause\n\tlfence\n"); ++ ++ /* Jump. */ ++ fputs ("\tjmp\t", asm_out_file); ++ assemble_name_raw (asm_out_file, indirectlabel1); ++ fputc ('\n', asm_out_file); ++ ++ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); ++ ++ if (regno >= 0) ++ { ++ /* MOV. */ ++ rtx xops[2]; ++ xops[0] = gen_rtx_MEM (word_mode, stack_pointer_rtx); ++ xops[1] = gen_rtx_REG (word_mode, regno); ++ output_asm_insn ("mov\t{%1, %0|%0, %1}", xops); ++ } ++ else ++ { ++ /* LEA. */ ++ rtx xops[2]; ++ xops[0] = stack_pointer_rtx; ++ xops[1] = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD); ++ output_asm_insn ("lea\t{%E1, %0|%0, %E1}", xops); ++ } ++ ++ if (need_bnd_p) ++ fputs ("\tbnd ret\n", asm_out_file); ++ else ++ fputs ("\tret\n", asm_out_file); ++} ++ ++/* Output a funtion with a call and return thunk for indirect branch. ++ If BND_P is true, the BND prefix is needed. If REGNO != -1, the ++ function address is in REGNO. Otherwise, the function address is ++ on the top of stack. */ ++ ++static void ++output_indirect_thunk_function (bool need_bnd_p, int regno) ++{ ++ char name[32]; ++ tree decl; ++ ++ /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ ++ indirect_thunk_name (name, regno, need_bnd_p); ++ decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, ++ get_identifier (name), ++ build_function_type_list (void_type_node, NULL_TREE)); ++ DECL_RESULT (decl) = build_decl (BUILTINS_LOCATION, RESULT_DECL, ++ NULL_TREE, void_type_node); ++ TREE_PUBLIC (decl) = 1; ++ TREE_STATIC (decl) = 1; ++ DECL_IGNORED_P (decl) = 1; ++ ++#if TARGET_MACHO ++ if (TARGET_MACHO) ++ { ++ switch_to_section (darwin_sections[picbase_thunk_section]); ++ fputs ("\t.weak_definition\t", asm_out_file); ++ assemble_name (asm_out_file, name); ++ fputs ("\n\t.private_extern\t", asm_out_file); ++ assemble_name (asm_out_file, name); ++ putc ('\n', asm_out_file); ++ ASM_OUTPUT_LABEL (asm_out_file, name); ++ DECL_WEAK (decl) = 1; ++ } ++ else ++#endif ++ if (USE_HIDDEN_LINKONCE) ++ { ++ cgraph_node::create (decl)->set_comdat_group (DECL_ASSEMBLER_NAME (decl)); ++ ++ targetm.asm_out.unique_section (decl, 0); ++ switch_to_section (get_named_section (decl, NULL, 0)); ++ ++ targetm.asm_out.globalize_label (asm_out_file, name); ++ fputs ("\t.hidden\t", asm_out_file); ++ assemble_name (asm_out_file, name); ++ putc ('\n', asm_out_file); ++ ASM_DECLARE_FUNCTION_NAME (asm_out_file, name, decl); ++ } ++ else ++ { ++ switch_to_section (text_section); ++ ASM_OUTPUT_LABEL (asm_out_file, name); ++ } ++ ++ DECL_INITIAL (decl) = make_node (BLOCK); ++ current_function_decl = decl; ++ allocate_struct_function (decl, false); ++ init_function_start (decl); ++ /* We're about to hide the function body from callees of final_* by ++ emitting it directly; tell them we're a thunk, if they care. */ ++ cfun->is_thunk = true; ++ first_function_block_is_cold = false; ++ /* Make sure unwind info is emitted for the thunk if needed. */ ++ final_start_function (emit_barrier (), asm_out_file, 1); ++ ++ output_indirect_thunk (need_bnd_p, regno); ++ ++ final_end_function (); ++ init_insn_lengths (); ++ free_after_compilation (cfun); ++ set_cfun (NULL); ++ current_function_decl = NULL; ++} ++ + static int pic_labels_used; + + /* Fills in the label name that should be used for a pc thunk for +@@ -9707,11 +9969,32 @@ ix86_code_end (void) + rtx xops[2]; + int regno; + ++ if (indirect_thunk_needed) ++ output_indirect_thunk_function (false, -1); ++ if (indirect_thunk_bnd_needed) ++ output_indirect_thunk_function (true, -1); ++ ++ for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++) ++ { ++ int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1; ++ if ((indirect_thunks_used & (1 << i))) ++ output_indirect_thunk_function (false, regno); ++ ++ if ((indirect_thunks_bnd_used & (1 << i))) ++ output_indirect_thunk_function (true, regno); ++ } ++ + for (regno = AX_REG; regno <= SP_REG; regno++) + { + char name[32]; + tree decl; + ++ if ((indirect_thunks_used & (1 << regno))) ++ output_indirect_thunk_function (false, regno); ++ ++ if ((indirect_thunks_bnd_used & (1 << regno))) ++ output_indirect_thunk_function (true, regno); ++ + if (!(pic_labels_used & (1 << regno))) + continue; + +@@ -25805,12 +26088,292 @@ ix86_expand_call (rtx retval, rtx fnaddr + return call; + } + ++/* Output indirect branch via a call and return thunk. CALL_OP is a ++ register which contains the branch target. XASM is the assembly ++ template for CALL_OP. Branch is a tail call if SIBCALL_P is true. ++ A normal call is converted to: ++ ++ call __x86_indirect_thunk_reg ++ ++ and a tail call is converted to: ++ ++ jmp __x86_indirect_thunk_reg ++ */ ++ ++static void ++ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p) ++{ ++ char thunk_name_buf[32]; ++ char *thunk_name; ++ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); ++ int regno = REGNO (call_op); ++ ++ if (cfun->machine->indirect_branch_type ++ != indirect_branch_thunk_inline) ++ { ++ if (cfun->machine->indirect_branch_type == indirect_branch_thunk) ++ { ++ int i = regno; ++ if (i >= FIRST_REX_INT_REG) ++ i -= (FIRST_REX_INT_REG - LAST_INT_REG - 1); ++ if (need_bnd_p) ++ indirect_thunks_bnd_used |= 1 << i; ++ else ++ indirect_thunks_used |= 1 << i; ++ } ++ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); ++ thunk_name = thunk_name_buf; ++ } ++ else ++ thunk_name = NULL; ++ ++ if (sibcall_p) ++ { ++ if (thunk_name != NULL) ++ { ++ if (need_bnd_p) ++ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); ++ else ++ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); ++ } ++ else ++ output_indirect_thunk (need_bnd_p, regno); ++ } ++ else ++ { ++ if (thunk_name != NULL) ++ { ++ if (need_bnd_p) ++ fprintf (asm_out_file, "\tbnd call\t%s\n", thunk_name); ++ else ++ fprintf (asm_out_file, "\tcall\t%s\n", thunk_name); ++ return; ++ } ++ ++ char indirectlabel1[32]; ++ char indirectlabel2[32]; ++ ++ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, ++ INDIRECT_LABEL, ++ indirectlabelno++); ++ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, ++ INDIRECT_LABEL, ++ indirectlabelno++); ++ ++ /* Jump. */ ++ if (need_bnd_p) ++ fputs ("\tbnd jmp\t", asm_out_file); ++ else ++ fputs ("\tjmp\t", asm_out_file); ++ assemble_name_raw (asm_out_file, indirectlabel2); ++ fputc ('\n', asm_out_file); ++ ++ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); ++ ++ if (thunk_name != NULL) ++ { ++ if (need_bnd_p) ++ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); ++ else ++ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); ++ } ++ else ++ output_indirect_thunk (need_bnd_p, regno); ++ ++ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); ++ ++ /* Call. */ ++ if (need_bnd_p) ++ fputs ("\tbnd call\t", asm_out_file); ++ else ++ fputs ("\tcall\t", asm_out_file); ++ assemble_name_raw (asm_out_file, indirectlabel1); ++ fputc ('\n', asm_out_file); ++ } ++} ++ ++/* Output indirect branch via a call and return thunk. CALL_OP is ++ the branch target. XASM is the assembly template for CALL_OP. ++ Branch is a tail call if SIBCALL_P is true. A normal call is ++ converted to: ++ ++ jmp L2 ++ L1: ++ push CALL_OP ++ jmp __x86_indirect_thunk ++ L2: ++ call L1 ++ ++ and a tail call is converted to: ++ ++ push CALL_OP ++ jmp __x86_indirect_thunk ++ */ ++ ++static void ++ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm, ++ bool sibcall_p) ++{ ++ char thunk_name_buf[32]; ++ char *thunk_name; ++ char push_buf[64]; ++ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); ++ int regno = -1; ++ ++ if (cfun->machine->indirect_branch_type ++ != indirect_branch_thunk_inline) ++ { ++ if (cfun->machine->indirect_branch_type == indirect_branch_thunk) ++ { ++ if (need_bnd_p) ++ indirect_thunk_bnd_needed = true; ++ else ++ indirect_thunk_needed = true; ++ } ++ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); ++ thunk_name = thunk_name_buf; ++ } ++ else ++ thunk_name = NULL; ++ ++ snprintf (push_buf, sizeof (push_buf), "push{%c}\t%s", ++ TARGET_64BIT ? 'q' : 'l', xasm); ++ ++ if (sibcall_p) ++ { ++ output_asm_insn (push_buf, &call_op); ++ if (thunk_name != NULL) ++ { ++ if (need_bnd_p) ++ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); ++ else ++ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); ++ } ++ else ++ output_indirect_thunk (need_bnd_p, regno); ++ } ++ else ++ { ++ char indirectlabel1[32]; ++ char indirectlabel2[32]; ++ ++ ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, ++ INDIRECT_LABEL, ++ indirectlabelno++); ++ ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, ++ INDIRECT_LABEL, ++ indirectlabelno++); ++ ++ /* Jump. */ ++ if (need_bnd_p) ++ fputs ("\tbnd jmp\t", asm_out_file); ++ else ++ fputs ("\tjmp\t", asm_out_file); ++ assemble_name_raw (asm_out_file, indirectlabel2); ++ fputc ('\n', asm_out_file); ++ ++ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1); ++ ++ /* An external function may be called via GOT, instead of PLT. */ ++ if (MEM_P (call_op)) ++ { ++ struct ix86_address parts; ++ rtx addr = XEXP (call_op, 0); ++ if (ix86_decompose_address (addr, &parts) ++ && parts.base == stack_pointer_rtx) ++ { ++ /* Since call will adjust stack by -UNITS_PER_WORD, ++ we must convert "disp(stack, index, scale)" to ++ "disp+UNITS_PER_WORD(stack, index, scale)". */ ++ if (parts.index) ++ { ++ addr = gen_rtx_MULT (Pmode, parts.index, ++ GEN_INT (parts.scale)); ++ addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, ++ addr); ++ } ++ else ++ addr = stack_pointer_rtx; ++ ++ rtx disp; ++ if (parts.disp != NULL_RTX) ++ disp = plus_constant (Pmode, parts.disp, ++ UNITS_PER_WORD); ++ else ++ disp = GEN_INT (UNITS_PER_WORD); ++ ++ addr = gen_rtx_PLUS (Pmode, addr, disp); ++ call_op = gen_rtx_MEM (GET_MODE (call_op), addr); ++ } ++ } ++ ++ output_asm_insn (push_buf, &call_op); ++ ++ if (thunk_name != NULL) ++ { ++ if (need_bnd_p) ++ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); ++ else ++ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); ++ } ++ else ++ output_indirect_thunk (need_bnd_p, regno); ++ ++ ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2); ++ ++ /* Call. */ ++ if (need_bnd_p) ++ fputs ("\tbnd call\t", asm_out_file); ++ else ++ fputs ("\tcall\t", asm_out_file); ++ assemble_name_raw (asm_out_file, indirectlabel1); ++ fputc ('\n', asm_out_file); ++ } ++} ++ ++/* Output indirect branch via a call and return thunk. CALL_OP is ++ the branch target. XASM is the assembly template for CALL_OP. ++ Branch is a tail call if SIBCALL_P is true. */ ++ ++static void ++ix86_output_indirect_branch (rtx call_op, const char *xasm, ++ bool sibcall_p) ++{ ++ if (REG_P (call_op)) ++ ix86_output_indirect_branch_via_reg (call_op, sibcall_p); ++ else ++ ix86_output_indirect_branch_via_push (call_op, xasm, sibcall_p); ++} ++/* Output indirect jump. CALL_OP is the jump target. Jump is a ++ function return if RET_P is true. */ ++ ++const char * ++ix86_output_indirect_jmp (rtx call_op, bool ret_p) ++{ ++ if (cfun->machine->indirect_branch_type != indirect_branch_keep) ++ { ++ /* We can't have red-zone if this isn't a function return since ++ "call" in the indirect thunk pushes the return address onto ++ stack, destroying red-zone. */ ++ if (!ret_p && ix86_red_zone_size != 0) ++ gcc_unreachable (); ++ ++ ix86_output_indirect_branch (call_op, "%0", true); ++ return ""; ++ } ++ else ++ return "%!jmp\t%A0"; ++} ++ + /* Output the assembly for a call instruction. */ + + const char * + ix86_output_call_insn (rtx_insn *insn, rtx call_op) + { + bool direct_p = constant_call_address_operand (call_op, VOIDmode); ++ bool output_indirect_p ++ = (!TARGET_SEH ++ && cfun->machine->indirect_branch_type != indirect_branch_keep); + bool seh_nop_p = false; + const char *xasm; + +@@ -25823,9 +26386,17 @@ ix86_output_call_insn (rtx_insn *insn, r + else if (TARGET_SEH) + xasm = "%!rex.W jmp %A0"; + else +- xasm = "%!jmp\t%A0"; ++ { ++ if (output_indirect_p) ++ xasm = "%0"; ++ else ++ xasm = "%!jmp\t%A0"; ++ } + +- output_asm_insn (xasm, &call_op); ++ if (output_indirect_p && !direct_p) ++ ix86_output_indirect_branch (call_op, xasm, true); ++ else ++ output_asm_insn (xasm, &call_op); + return ""; + } + +@@ -25862,9 +26433,17 @@ ix86_output_call_insn (rtx_insn *insn, r + if (direct_p) + xasm = "%!call\t%P0"; + else +- xasm = "%!call\t%A0"; ++ { ++ if (output_indirect_p) ++ xasm = "%0"; ++ else ++ xasm = "%!call\t%A0"; ++ } + +- output_asm_insn (xasm, &call_op); ++ if (output_indirect_p && !direct_p) ++ ix86_output_indirect_branch (call_op, xasm, false); ++ else ++ output_asm_insn (xasm, &call_op); + + if (seh_nop_p) + return "nop"; +@@ -43014,7 +43593,7 @@ ix86_handle_struct_attribute (tree *node + } + + static tree +-ix86_handle_fndecl_attribute (tree *node, tree name, tree, int, ++ix86_handle_fndecl_attribute (tree *node, tree name, tree args, int, + bool *no_add_attrs) + { + if (TREE_CODE (*node) != FUNCTION_DECL) +@@ -43023,6 +43602,29 @@ ix86_handle_fndecl_attribute (tree *node + name); + *no_add_attrs = true; + } ++ ++ if (is_attribute_p ("indirect_branch", name)) ++ { ++ tree cst = TREE_VALUE (args); ++ if (TREE_CODE (cst) != STRING_CST) ++ { ++ warning (OPT_Wattributes, ++ "%qE attribute requires a string constant argument", ++ name); ++ *no_add_attrs = true; ++ } ++ else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0 ++ && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0 ++ && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0 ++ && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0) ++ { ++ warning (OPT_Wattributes, ++ "argument to %qE attribute is not " ++ "(keep|thunk|thunk-inline|thunk-extern)", name); ++ *no_add_attrs = true; ++ } ++ } ++ + return NULL_TREE; + } + +@@ -46915,6 +47517,9 @@ static const struct attribute_spec ix86_ + false }, + { "callee_pop_aggregate_return", 1, 1, false, true, true, + ix86_handle_callee_pop_aggregate_return, true }, ++ { "indirect_branch", 1, 1, true, false, false, ++ ix86_handle_fndecl_attribute, false }, ++ + /* End element. */ + { NULL, 0, 0, false, false, false, NULL, false } + }; +Index: b/src/gcc/config/i386/i386.h +=================================================================== +--- a/src/gcc/config/i386/i386.h ++++ b/src/gcc/config/i386/i386.h +@@ -1229,6 +1229,9 @@ extern const char *host_detect_local_cpu + /* Base register for access to local variables of the function. */ + #define FRAME_POINTER_REGNUM 20 + ++#define FIRST_INT_REG AX_REG ++#define LAST_INT_REG SP_REG ++ + /* First floating point reg */ + #define FIRST_FLOAT_REG 8 + +@@ -1465,6 +1468,8 @@ enum reg_class + registers. */ + #define TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P hook_bool_mode_true + ++#define LEGACY_INT_REGNO_P(N) (IN_RANGE ((N), FIRST_INT_REG, LAST_INT_REG)) ++ + #define QI_REG_P(X) (REG_P (X) && QI_REGNO_P (REGNO (X))) + #define QI_REGNO_P(N) IN_RANGE ((N), AX_REG, BX_REG) + +@@ -2550,6 +2555,13 @@ struct GTY(()) machine_function { + /* If true, it is safe to not save/restore DRAP register. */ + BOOL_BITFIELD no_drap_save_restore : 1; + ++ /* How to generate indirec branch. */ ++ ENUM_BITFIELD(indirect_branch) indirect_branch_type : 3; ++ ++ /* If true, the current function has local indirect jumps, like ++ "indirect_jump" or "tablejump". */ ++ BOOL_BITFIELD has_local_indirect_jump : 1; ++ + /* During prologue/epilogue generation, the current frame state. + Otherwise, the frame state at the end of the prologue. */ + struct machine_frame_state fs; +Index: b/src/gcc/config/i386/i386.md +=================================================================== +--- a/src/gcc/config/i386/i386.md ++++ b/src/gcc/config/i386/i386.md +@@ -11556,13 +11556,18 @@ + { + if (TARGET_X32) + operands[0] = convert_memory_address (word_mode, operands[0]); ++ cfun->machine->has_local_indirect_jump = true; + }) + + (define_insn "*indirect_jump" + [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw"))] + "" +- "%!jmp\t%A0" +- [(set_attr "type" "ibr") ++ "* return ix86_output_indirect_jmp (operands[0], false);" ++ [(set (attr "type") ++ (if_then_else (match_test "(cfun->machine->indirect_branch_type ++ != indirect_branch_keep)") ++ (const_string "multi") ++ (const_string "ibr"))) + (set_attr "length_immediate" "0")]) + + (define_expand "tablejump" +@@ -11604,14 +11609,19 @@ + + if (TARGET_X32) + operands[0] = convert_memory_address (word_mode, operands[0]); ++ cfun->machine->has_local_indirect_jump = true; + }) + + (define_insn "*tablejump_1" + [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw")) + (use (label_ref (match_operand 1)))] + "" +- "%!jmp\t%A0" +- [(set_attr "type" "ibr") ++ "* return ix86_output_indirect_jmp (operands[0], false);" ++ [(set (attr "type") ++ (if_then_else (match_test "(cfun->machine->indirect_branch_type ++ != indirect_branch_keep)") ++ (const_string "multi") ++ (const_string "ibr"))) + (set_attr "length_immediate" "0")]) + + ;; Convert setcc + movzbl to xor + setcc if operands don't overlap. +@@ -12198,8 +12208,12 @@ + [(simple_return) + (use (match_operand:SI 0 "register_operand" "r"))] + "reload_completed" +- "%!jmp\t%A0" +- [(set_attr "type" "ibr") ++ "* return ix86_output_indirect_jmp (operands[0], true);" ++ [(set (attr "type") ++ (if_then_else (match_test "(cfun->machine->indirect_branch_type ++ != indirect_branch_keep)") ++ (const_string "multi") ++ (const_string "ibr"))) + (set_attr "length_immediate" "0")]) + + (define_insn "nop" +Index: b/src/gcc/config/i386/i386.opt +=================================================================== +--- a/src/gcc/config/i386/i386.opt ++++ b/src/gcc/config/i386/i386.opt +@@ -876,3 +876,23 @@ Enum(stack_protector_guard) String(tls) + + EnumValue + Enum(stack_protector_guard) String(global) Value(SSP_GLOBAL) ++ ++mindirect-branch= ++Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_indirect_branch) Init(indirect_branch_keep) ++Convert indirect call and jump to call and return thunks. ++ ++Enum ++Name(indirect_branch) Type(enum indirect_branch) ++Known indirect branch choices (for use with the -mindirect-branch= option): ++ ++EnumValue ++Enum(indirect_branch) String(keep) Value(indirect_branch_keep) ++ ++EnumValue ++Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk) ++ ++EnumValue ++Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline) ++ ++EnumValue ++Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c +@@ -0,0 +1,20 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c +@@ -0,0 +1,20 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch[256]; ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch[offset](offset); ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c +@@ -0,0 +1,21 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++int ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c +@@ -0,0 +1,21 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch[256]; ++ ++int ++male_indirect_jump (long offset) ++{ ++ dispatch[offset](offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c +@@ -0,0 +1,44 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++ ++void func0 (void); ++void func1 (void); ++void func2 (void); ++void func3 (void); ++void func4 (void); ++void func4 (void); ++void func5 (void); ++ ++void ++bar (int i) ++{ ++ switch (i) ++ { ++ default: ++ func0 (); ++ break; ++ case 1: ++ func1 (); ++ break; ++ case 2: ++ func2 (); ++ break; ++ case 3: ++ func3 (); ++ break; ++ case 4: ++ func4 (); ++ break; ++ case 5: ++ func5 (); ++ break; ++ } ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c +@@ -0,0 +1,23 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++extern void male_indirect_jump (long) ++ __attribute__ ((indirect_branch("thunk"))); ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c +@@ -0,0 +1,21 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch[256]; ++ ++__attribute__ ((indirect_branch("thunk"))) ++void ++male_indirect_jump (long offset) ++{ ++ dispatch[offset](offset); ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c +@@ -0,0 +1,23 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++extern int male_indirect_jump (long) ++ __attribute__ ((indirect_branch("thunk-inline"))); ++ ++int ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ ++/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c +@@ -0,0 +1,22 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch[256]; ++ ++__attribute__ ((indirect_branch("thunk-inline"))) ++int ++male_indirect_jump (long offset) ++{ ++ dispatch[offset](offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ ++/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c +@@ -0,0 +1,22 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++extern int male_indirect_jump (long) ++ __attribute__ ((indirect_branch("thunk-extern"))); ++ ++int ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c +@@ -0,0 +1,21 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch[256]; ++ ++__attribute__ ((indirect_branch("thunk-extern"))) ++int ++male_indirect_jump (long offset) ++{ ++ dispatch[offset](offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c +@@ -0,0 +1,44 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fno-pic" } */ ++ ++void func0 (void); ++void func1 (void); ++void func2 (void); ++void func3 (void); ++void func4 (void); ++void func4 (void); ++void func5 (void); ++ ++__attribute__ ((indirect_branch("thunk-extern"))) ++void ++bar (int i) ++{ ++ switch (i) ++ { ++ default: ++ func0 (); ++ break; ++ case 1: ++ func1 (); ++ break; ++ case 2: ++ func2 (); ++ break; ++ case 3: ++ func3 (); ++ break; ++ case 4: ++ func4 (); ++ break; ++ case 5: ++ func5 (); ++ break; ++ } ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c +@@ -0,0 +1,42 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++ ++void func0 (void); ++void func1 (void); ++void func2 (void); ++void func3 (void); ++void func4 (void); ++void func4 (void); ++void func5 (void); ++ ++__attribute__ ((indirect_branch("keep"))) ++void ++bar (int i) ++{ ++ switch (i) ++ { ++ default: ++ func0 (); ++ break; ++ case 1: ++ func1 (); ++ break; ++ case 2: ++ func2 (); ++ break; ++ case 3: ++ func3 (); ++ break; ++ case 4: ++ func4 (); ++ break; ++ case 5: ++ func5 (); ++ break; ++ } ++} ++ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c +@@ -0,0 +1,20 @@ ++/* { dg-do compile { target { ! x32 } } } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ ++ ++void (*dispatch) (char *); ++char buf[10]; ++ ++void ++foo (void) ++{ ++ dispatch (buf); ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ ++/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "bnd ret" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c +@@ -0,0 +1,21 @@ ++/* { dg-do compile { target { ! x32 } } } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ ++ ++void (*dispatch) (char *); ++char buf[10]; ++ ++int ++foo (void) ++{ ++ dispatch (buf); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ ++/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ ++/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "bnd ret" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c +@@ -0,0 +1,19 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c +@@ -0,0 +1,19 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch[256]; ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch[offset](offset); ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c +@@ -0,0 +1,20 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++int ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c +@@ -0,0 +1,20 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch[256]; ++ ++int ++male_indirect_jump (long offset) ++{ ++ dispatch[offset](offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c +@@ -0,0 +1,43 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++ ++void func0 (void); ++void func1 (void); ++void func2 (void); ++void func3 (void); ++void func4 (void); ++void func4 (void); ++void func5 (void); ++ ++void ++bar (int i) ++{ ++ switch (i) ++ { ++ default: ++ func0 (); ++ break; ++ case 1: ++ func1 (); ++ break; ++ case 2: ++ func2 (); ++ break; ++ case 3: ++ func3 (); ++ break; ++ case 4: ++ func4 (); ++ break; ++ case 5: ++ func5 (); ++ break; ++ } ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c +@@ -0,0 +1,20 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c +@@ -0,0 +1,20 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch[256]; ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch[offset](offset); ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c +@@ -0,0 +1,21 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++int ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ ++/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ ++/* { dg-final { scan-assembler-times {\tpause} 1 } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c +@@ -0,0 +1,21 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch[256]; ++ ++int ++male_indirect_jump (long offset) ++{ ++ dispatch[offset](offset); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ ++/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ ++/* { dg-final { scan-assembler-times {\tpause} 1 } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c +@@ -0,0 +1,44 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++ ++void func0 (void); ++void func1 (void); ++void func2 (void); ++void func3 (void); ++void func4 (void); ++void func4 (void); ++void func5 (void); ++ ++void ++bar (int i) ++{ ++ switch (i) ++ { ++ default: ++ func0 (); ++ break; ++ case 1: ++ func1 (); ++ break; ++ case 2: ++ func2 (); ++ break; ++ case 3: ++ func3 (); ++ break; ++ case 4: ++ func4 (); ++ break; ++ case 5: ++ func5 (); ++ break; ++ } ++} ++ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ diff --git a/gcc5/patches/0006-x86-Add-mfunction-return-doc.diff b/gcc5/patches/0006-x86-Add-mfunction-return-doc.diff new file mode 100644 index 0000000..b40d524 --- /dev/null +++ b/gcc5/patches/0006-x86-Add-mfunction-return-doc.diff @@ -0,0 +1,300 @@ +From 357311dd400f7f72d2132f2f94161ece39bf08c6 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 11:10:44 +0000 +Subject: [PATCH 6/9] x86: Add -mfunction-return= + +Add -mfunction-return= option to convert function return to call and +return thunks. The default is 'keep', which keeps function return +unmodified. 'thunk' converts function return to call and return thunk. +'thunk-inline' converts function return to inlined call and return thunk. +'thunk-extern' converts function return to external call and return +thunk provided in a separate object file. You can control this behavior +for a specific function by using the function attribute function_return. + +Function return thunk is the same as memory thunk for -mindirect-branch= +where the return address is at the top of the stack: + +__x86_return_thunk: + call L2 +L1: + pause + lfence + jmp L1 +L2: + lea 8(%rsp), %rsp|lea 4(%esp), %esp + ret + +and function return becomes + + jmp __x86_return_thunk + +-mindirect-branch= tests are updated with -mfunction-return=keep to +avoid false test failures when -mfunction-return=thunk is added to +RUNTESTFLAGS for "make check". + +gcc/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * config/i386/i386-protos.h (ix86_output_function_return): New. + * config/i386/i386.c (ix86_set_indirect_branch_type): Also + set function_return_type. + (indirect_thunk_name): Add ret_p to indicate thunk for function + return. + (output_indirect_thunk_function): Pass false to + indirect_thunk_name. + (ix86_output_indirect_branch_via_reg): Likewise. + (ix86_output_indirect_branch_via_push): Likewise. + (output_indirect_thunk_function): Create alias for function + return thunk if regno < 0. + (ix86_output_function_return): New function. + (ix86_handle_fndecl_attribute): Handle function_return. + (ix86_attribute_table): Add function_return. + * config/i386/i386.h (machine_function): Add + function_return_type. + * config/i386/i386.md (simple_return_internal): Use + ix86_output_function_return. + (simple_return_internal_long): Likewise. + * config/i386/i386.opt (mfunction-return=): New option. + (indirect_branch): Mention -mfunction-return=. + * doc/extend.texi: Document function_return function attribute. + * doc/invoke.texi: Document -mfunction-return= option. + +gcc/testsuite/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * gcc.target/i386/indirect-thunk-1.c (dg-options): Add + -mfunction-return=keep. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-5.c: Likewise. + * gcc.target/i386/indirect-thunk-6.c: Likewise. + * gcc.target/i386/indirect-thunk-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. + * gcc.target/i386/ret-thunk-1.c: New test. + * gcc.target/i386/ret-thunk-10.c: Likewise. + * gcc.target/i386/ret-thunk-11.c: Likewise. + * gcc.target/i386/ret-thunk-12.c: Likewise. + * gcc.target/i386/ret-thunk-13.c: Likewise. + * gcc.target/i386/ret-thunk-14.c: Likewise. + * gcc.target/i386/ret-thunk-15.c: Likewise. + * gcc.target/i386/ret-thunk-16.c: Likewise. + * gcc.target/i386/ret-thunk-2.c: Likewise. + * gcc.target/i386/ret-thunk-3.c: Likewise. + * gcc.target/i386/ret-thunk-4.c: Likewise. + * gcc.target/i386/ret-thunk-5.c: Likewise. + * gcc.target/i386/ret-thunk-6.c: Likewise. + * gcc.target/i386/ret-thunk-7.c: Likewise. + * gcc.target/i386/ret-thunk-8.c: Likewise. + * gcc.target/i386/ret-thunk-9.c: Likewise. + +i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO + +ASM_OUTPUT_DEF isn't defined for TARGET_MACHO. Use ASM_OUTPUT_LABEL to +generate the __x86_return_thunk label, instead of the set directive. +Update testcase to remove the __x86_return_thunk label check. Since +-fno-pic is ignored on Darwin, update testcases to sscan or "push" +only on Linux. + +gcc/ + + Backport from mainline + 2018-01-15 H.J. Lu + + PR target/83839 + * config/i386/i386.c (output_indirect_thunk_function): Use + ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO + for __x86.return_thunk. + +gcc/testsuite/ + + Backport from mainline + 2018-01-15 H.J. Lu + + PR target/83839 + * gcc.target/i386/indirect-thunk-1.c: Scan for "push" only on + Linux. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. + * gcc.target/i386/indirect-thunk-register-1.c: Likewise. + * gcc.target/i386/indirect-thunk-register-3.c: Likewise. + * gcc.target/i386/indirect-thunk-register-4.c: Likewise. + * gcc.target/i386/ret-thunk-10.c: Likewise. + * gcc.target/i386/ret-thunk-11.c: Likewise. + * gcc.target/i386/ret-thunk-12.c: Likewise. + * gcc.target/i386/ret-thunk-13.c: Likewise. + * gcc.target/i386/ret-thunk-14.c: Likewise. + * gcc.target/i386/ret-thunk-15.c: Likewise. + * gcc.target/i386/ret-thunk-9.c: Don't check the + __x86_return_thunk label. + Scan for "push" only for Linux. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256734 138bc75d-0d04-0410-961f-82ee72b054a4 + +[Ubuntu note: Dropped indirect-thunk-5.c, indirect-thunk-6.c, + indirect-thunk-bnd-3.c, indirect-thunk-bnd-4.c, + indirect-thunk-extern-5.c, indirect-thunk-extern-6.c, + indirect-thunk-inline-5.c, and indirect-thunk-inline-6.c tests due + to gcc 5.4 and earlier not supporting the -fno-plt option. + --sbeattie,] + +--- + src/gcc/config/i386/i386-protos.h | 1 + src/gcc/config/i386/i386.c | 152 +++++++++++- + src/gcc/config/i386/i386.h | 3 + src/gcc/config/i386/i386.md | 9 + src/gcc/config/i386/i386.opt | 6 + src/gcc/doc/extend.texi | 9 + src/gcc/doc/invoke.texi | 13 - + src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c | 4 + src/gcc/testsuite/gcc.target/i386/ret-thunk-1.c | 13 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 23 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 23 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 22 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 22 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 22 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 22 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-16.c | 18 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-2.c | 13 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-3.c | 12 + src/gcc/testsuite/gcc.target/i386/ret-thunk-4.c | 12 + src/gcc/testsuite/gcc.target/i386/ret-thunk-5.c | 15 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-6.c | 14 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-7.c | 13 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-8.c | 14 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 24 + + 48 files changed, 507 insertions(+), 66 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-10.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-11.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-12.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-13.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-14.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-15.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-16.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-7.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-8.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-9.c + +Index: b/src/gcc/doc/extend.texi +=================================================================== +--- a/src/gcc/doc/extend.texi ++++ b/src/gcc/doc/extend.texi +@@ -4129,6 +4129,15 @@ call and jump to call and return thunk. + indirect call and jump to inlined call and return thunk. + @samp{thunk-extern} converts indirect call and jump to external call + and return thunk provided in a separate object file. ++ ++@item function_return("@var{choice}") ++@cindex @code{function_return} function attribute, x86 ++On x86 targets, the @code{function_return} attribute causes the compiler ++to convert function return with @var{choice}. @samp{keep} keeps function ++return unmodified. @samp{thunk} converts function return to call and ++return thunk. @samp{thunk-inline} converts function return to inlined ++call and return thunk. @samp{thunk-extern} converts function return to ++external call and return thunk provided in a separate object file. + @end table + + On the PowerPC, the following options are allowed: +Index: b/src/gcc/doc/invoke.texi +=================================================================== +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -1091,7 +1091,7 @@ See RS/6000 and PowerPC Options. + -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol + -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol + -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol +--mindirect-branch=@var{choice}} ++-mindirect-branch=@var{choice} -mfunction-return=@var{choice}} + + @emph{x86 Windows Options} + @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol +@@ -24029,6 +24029,17 @@ to external call and return thunk provid + You can control this behavior for a specific function by using the + function attribute @code{indirect_branch}. @xref{Function Attributes}. + ++@item -mfunction-return=@var{choice} ++@opindex -mfunction-return ++Convert function return with @var{choice}. The default is @samp{keep}, ++which keeps function return unmodified. @samp{thunk} converts function ++return to call and return thunk. @samp{thunk-inline} converts function ++return to inlined call and return thunk. @samp{thunk-extern} converts ++function return to external call and return thunk provided in a separate ++object file. You can control this behavior for a specific function by ++using the function attribute @code{function_return}. ++@xref{Function Attributes}. ++ + @end table + + @c man end diff --git a/gcc5/patches/0006-x86-Add-mfunction-return.diff b/gcc5/patches/0006-x86-Add-mfunction-return.diff new file mode 100644 index 0000000..1883cc6 --- /dev/null +++ b/gcc5/patches/0006-x86-Add-mfunction-return.diff @@ -0,0 +1,1409 @@ +From 357311dd400f7f72d2132f2f94161ece39bf08c6 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 11:10:44 +0000 +Subject: [PATCH 6/9] x86: Add -mfunction-return= + +Add -mfunction-return= option to convert function return to call and +return thunks. The default is 'keep', which keeps function return +unmodified. 'thunk' converts function return to call and return thunk. +'thunk-inline' converts function return to inlined call and return thunk. +'thunk-extern' converts function return to external call and return +thunk provided in a separate object file. You can control this behavior +for a specific function by using the function attribute function_return. + +Function return thunk is the same as memory thunk for -mindirect-branch= +where the return address is at the top of the stack: + +__x86_return_thunk: + call L2 +L1: + pause + lfence + jmp L1 +L2: + lea 8(%rsp), %rsp|lea 4(%esp), %esp + ret + +and function return becomes + + jmp __x86_return_thunk + +-mindirect-branch= tests are updated with -mfunction-return=keep to +avoid false test failures when -mfunction-return=thunk is added to +RUNTESTFLAGS for "make check". + +gcc/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * config/i386/i386-protos.h (ix86_output_function_return): New. + * config/i386/i386.c (ix86_set_indirect_branch_type): Also + set function_return_type. + (indirect_thunk_name): Add ret_p to indicate thunk for function + return. + (output_indirect_thunk_function): Pass false to + indirect_thunk_name. + (ix86_output_indirect_branch_via_reg): Likewise. + (ix86_output_indirect_branch_via_push): Likewise. + (output_indirect_thunk_function): Create alias for function + return thunk if regno < 0. + (ix86_output_function_return): New function. + (ix86_handle_fndecl_attribute): Handle function_return. + (ix86_attribute_table): Add function_return. + * config/i386/i386.h (machine_function): Add + function_return_type. + * config/i386/i386.md (simple_return_internal): Use + ix86_output_function_return. + (simple_return_internal_long): Likewise. + * config/i386/i386.opt (mfunction-return=): New option. + (indirect_branch): Mention -mfunction-return=. + * doc/extend.texi: Document function_return function attribute. + * doc/invoke.texi: Document -mfunction-return= option. + +gcc/testsuite/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * gcc.target/i386/indirect-thunk-1.c (dg-options): Add + -mfunction-return=keep. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-5.c: Likewise. + * gcc.target/i386/indirect-thunk-6.c: Likewise. + * gcc.target/i386/indirect-thunk-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. + * gcc.target/i386/ret-thunk-1.c: New test. + * gcc.target/i386/ret-thunk-10.c: Likewise. + * gcc.target/i386/ret-thunk-11.c: Likewise. + * gcc.target/i386/ret-thunk-12.c: Likewise. + * gcc.target/i386/ret-thunk-13.c: Likewise. + * gcc.target/i386/ret-thunk-14.c: Likewise. + * gcc.target/i386/ret-thunk-15.c: Likewise. + * gcc.target/i386/ret-thunk-16.c: Likewise. + * gcc.target/i386/ret-thunk-2.c: Likewise. + * gcc.target/i386/ret-thunk-3.c: Likewise. + * gcc.target/i386/ret-thunk-4.c: Likewise. + * gcc.target/i386/ret-thunk-5.c: Likewise. + * gcc.target/i386/ret-thunk-6.c: Likewise. + * gcc.target/i386/ret-thunk-7.c: Likewise. + * gcc.target/i386/ret-thunk-8.c: Likewise. + * gcc.target/i386/ret-thunk-9.c: Likewise. + +i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO + +ASM_OUTPUT_DEF isn't defined for TARGET_MACHO. Use ASM_OUTPUT_LABEL to +generate the __x86_return_thunk label, instead of the set directive. +Update testcase to remove the __x86_return_thunk label check. Since +-fno-pic is ignored on Darwin, update testcases to sscan or "push" +only on Linux. + +gcc/ + + Backport from mainline + 2018-01-15 H.J. Lu + + PR target/83839 + * config/i386/i386.c (output_indirect_thunk_function): Use + ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO + for __x86.return_thunk. + +gcc/testsuite/ + + Backport from mainline + 2018-01-15 H.J. Lu + + PR target/83839 + * gcc.target/i386/indirect-thunk-1.c: Scan for "push" only on + Linux. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. + * gcc.target/i386/indirect-thunk-register-1.c: Likewise. + * gcc.target/i386/indirect-thunk-register-3.c: Likewise. + * gcc.target/i386/indirect-thunk-register-4.c: Likewise. + * gcc.target/i386/ret-thunk-10.c: Likewise. + * gcc.target/i386/ret-thunk-11.c: Likewise. + * gcc.target/i386/ret-thunk-12.c: Likewise. + * gcc.target/i386/ret-thunk-13.c: Likewise. + * gcc.target/i386/ret-thunk-14.c: Likewise. + * gcc.target/i386/ret-thunk-15.c: Likewise. + * gcc.target/i386/ret-thunk-9.c: Don't check the + __x86_return_thunk label. + Scan for "push" only for Linux. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256734 138bc75d-0d04-0410-961f-82ee72b054a4 + +[Ubuntu note: Dropped indirect-thunk-5.c, indirect-thunk-6.c, + indirect-thunk-bnd-3.c, indirect-thunk-bnd-4.c, + indirect-thunk-extern-5.c, indirect-thunk-extern-6.c, + indirect-thunk-inline-5.c, and indirect-thunk-inline-6.c tests due + to gcc 5.4 and earlier not supporting the -fno-plt option. + --sbeattie,] + +--- + src/gcc/config/i386/i386-protos.h | 1 + src/gcc/config/i386/i386.c | 152 +++++++++++- + src/gcc/config/i386/i386.h | 3 + src/gcc/config/i386/i386.md | 9 + src/gcc/config/i386/i386.opt | 6 + src/gcc/doc/extend.texi | 9 + src/gcc/doc/invoke.texi | 13 - + src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c | 4 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c | 4 + src/gcc/testsuite/gcc.target/i386/ret-thunk-1.c | 13 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 23 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 23 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 22 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 22 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 22 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 22 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-16.c | 18 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-2.c | 13 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-3.c | 12 + src/gcc/testsuite/gcc.target/i386/ret-thunk-4.c | 12 + src/gcc/testsuite/gcc.target/i386/ret-thunk-5.c | 15 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-6.c | 14 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-7.c | 13 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-8.c | 14 + + src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 24 + + 48 files changed, 507 insertions(+), 66 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-10.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-11.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-12.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-13.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-14.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-15.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-16.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-3.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-4.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-5.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-6.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-7.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-8.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-9.c + +Index: b/src/gcc/config/i386/i386-protos.h +=================================================================== +--- a/src/gcc/config/i386/i386-protos.h ++++ b/src/gcc/config/i386/i386-protos.h +@@ -307,6 +307,7 @@ extern enum attr_cpu ix86_schedule; + + extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op); + extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p); ++extern const char * ix86_output_function_return (bool long_p); + + #ifdef RTX_CODE + /* Target data for multipass lookahead scheduling. +Index: b/src/gcc/config/i386/i386.c +=================================================================== +--- a/src/gcc/config/i386/i386.c ++++ b/src/gcc/config/i386/i386.c +@@ -5166,6 +5166,31 @@ ix86_set_indirect_branch_type (tree fnde + else + cfun->machine->indirect_branch_type = ix86_indirect_branch; + } ++ ++ if (cfun->machine->function_return_type == indirect_branch_unset) ++ { ++ tree attr = lookup_attribute ("function_return", ++ DECL_ATTRIBUTES (fndecl)); ++ if (attr != NULL) ++ { ++ tree args = TREE_VALUE (attr); ++ if (args == NULL) ++ gcc_unreachable (); ++ tree cst = TREE_VALUE (args); ++ if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0) ++ cfun->machine->function_return_type = indirect_branch_keep; ++ else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0) ++ cfun->machine->function_return_type = indirect_branch_thunk; ++ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0) ++ cfun->machine->function_return_type = indirect_branch_thunk_inline; ++ else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0) ++ cfun->machine->function_return_type = indirect_branch_thunk_extern; ++ else ++ gcc_unreachable (); ++ } ++ else ++ cfun->machine->function_return_type = ix86_function_return; ++ } + } + + /* Establish appropriate back-end context for processing the function +@@ -9753,8 +9778,12 @@ static int indirect_thunks_bnd_used; + /* Fills in the label name that should be used for the indirect thunk. */ + + static void +-indirect_thunk_name (char name[32], int regno, bool need_bnd_p) ++indirect_thunk_name (char name[32], int regno, bool need_bnd_p, ++ bool ret_p) + { ++ if (regno >= 0 && ret_p) ++ gcc_unreachable (); ++ + if (USE_HIDDEN_LINKONCE) + { + const char *bnd = need_bnd_p ? "_bnd" : ""; +@@ -9769,7 +9798,10 @@ indirect_thunk_name (char name[32], int + bnd, reg_prefix, reg_names[regno]); + } + else +- sprintf (name, "__x86_indirect_thunk%s", bnd); ++ { ++ const char *ret = ret_p ? "return" : "indirect"; ++ sprintf (name, "__x86_%s_thunk%s", ret, bnd); ++ } + } + else + { +@@ -9782,10 +9814,20 @@ indirect_thunk_name (char name[32], int + } + else + { +- if (need_bnd_p) +- ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); ++ if (ret_p) ++ { ++ if (need_bnd_p) ++ ASM_GENERATE_INTERNAL_LABEL (name, "LRTB", 0); ++ else ++ ASM_GENERATE_INTERNAL_LABEL (name, "LRT", 0); ++ } + else +- ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); ++ { ++ if (need_bnd_p) ++ ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0); ++ else ++ ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0); ++ } + } + } + } +@@ -9880,7 +9922,7 @@ output_indirect_thunk_function (bool nee + tree decl; + + /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd. */ +- indirect_thunk_name (name, regno, need_bnd_p); ++ indirect_thunk_name (name, regno, need_bnd_p, false); + decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, + get_identifier (name), + build_function_type_list (void_type_node, NULL_TREE)); +@@ -9923,6 +9965,36 @@ output_indirect_thunk_function (bool nee + ASM_OUTPUT_LABEL (asm_out_file, name); + } + ++ if (regno < 0) ++ { ++ /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */ ++ char alias[32]; ++ ++ indirect_thunk_name (alias, regno, need_bnd_p, true); ++#if TARGET_MACHO ++ if (TARGET_MACHO) ++ { ++ fputs ("\t.weak_definition\t", asm_out_file); ++ assemble_name (asm_out_file, alias); ++ fputs ("\n\t.private_extern\t", asm_out_file); ++ assemble_name (asm_out_file, alias); ++ putc ('\n', asm_out_file); ++ ASM_OUTPUT_LABEL (asm_out_file, alias); ++ } ++#else ++ ASM_OUTPUT_DEF (asm_out_file, alias, name); ++ if (USE_HIDDEN_LINKONCE) ++ { ++ fputs ("\t.globl\t", asm_out_file); ++ assemble_name (asm_out_file, alias); ++ putc ('\n', asm_out_file); ++ fputs ("\t.hidden\t", asm_out_file); ++ assemble_name (asm_out_file, alias); ++ putc ('\n', asm_out_file); ++ } ++#endif ++ } ++ + DECL_INITIAL (decl) = make_node (BLOCK); + current_function_decl = decl; + allocate_struct_function (decl, false); +@@ -26121,7 +26193,7 @@ ix86_output_indirect_branch_via_reg (rtx + else + indirect_thunks_used |= 1 << i; + } +- indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); ++ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false); + thunk_name = thunk_name_buf; + } + else +@@ -26230,7 +26302,7 @@ ix86_output_indirect_branch_via_push (rt + else + indirect_thunk_needed = true; + } +- indirect_thunk_name (thunk_name_buf, regno, need_bnd_p); ++ indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false); + thunk_name = thunk_name_buf; + } + else +@@ -26365,6 +26437,46 @@ ix86_output_indirect_jmp (rtx call_op, b + return "%!jmp\t%A0"; + } + ++/* Output function return. CALL_OP is the jump target. Add a REP ++ prefix to RET if LONG_P is true and function return is kept. */ ++ ++const char * ++ix86_output_function_return (bool long_p) ++{ ++ if (cfun->machine->function_return_type != indirect_branch_keep) ++ { ++ char thunk_name[32]; ++ bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn); ++ ++ if (cfun->machine->function_return_type ++ != indirect_branch_thunk_inline) ++ { ++ bool need_thunk = (cfun->machine->function_return_type ++ == indirect_branch_thunk); ++ indirect_thunk_name (thunk_name, -1, need_bnd_p, true); ++ if (need_bnd_p) ++ { ++ indirect_thunk_bnd_needed |= need_thunk; ++ fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name); ++ } ++ else ++ { ++ indirect_thunk_needed |= need_thunk; ++ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name); ++ } ++ } ++ else ++ output_indirect_thunk (need_bnd_p, -1); ++ ++ return ""; ++ } ++ ++ if (!long_p || ix86_bnd_prefixed_insn_p (current_output_insn)) ++ return "%!ret"; ++ ++ return "rep%; ret"; ++} ++ + /* Output the assembly for a call instruction. */ + + const char * +@@ -43625,6 +43737,28 @@ ix86_handle_fndecl_attribute (tree *node + } + } + ++ if (is_attribute_p ("function_return", name)) ++ { ++ tree cst = TREE_VALUE (args); ++ if (TREE_CODE (cst) != STRING_CST) ++ { ++ warning (OPT_Wattributes, ++ "%qE attribute requires a string constant argument", ++ name); ++ *no_add_attrs = true; ++ } ++ else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0 ++ && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0 ++ && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0 ++ && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0) ++ { ++ warning (OPT_Wattributes, ++ "argument to %qE attribute is not " ++ "(keep|thunk|thunk-inline|thunk-extern)", name); ++ *no_add_attrs = true; ++ } ++ } ++ + return NULL_TREE; + } + +@@ -47519,6 +47653,8 @@ static const struct attribute_spec ix86_ + ix86_handle_callee_pop_aggregate_return, true }, + { "indirect_branch", 1, 1, true, false, false, + ix86_handle_fndecl_attribute, false }, ++ { "function_return", 1, 1, true, false, false, ++ ix86_handle_fndecl_attribute, false }, + + /* End element. */ + { NULL, 0, 0, false, false, false, NULL, false } +Index: b/src/gcc/config/i386/i386.h +=================================================================== +--- a/src/gcc/config/i386/i386.h ++++ b/src/gcc/config/i386/i386.h +@@ -2562,6 +2562,9 @@ struct GTY(()) machine_function { + "indirect_jump" or "tablejump". */ + BOOL_BITFIELD has_local_indirect_jump : 1; + ++ /* How to generate function return. */ ++ ENUM_BITFIELD(indirect_branch) function_return_type : 3; ++ + /* During prologue/epilogue generation, the current frame state. + Otherwise, the frame state at the end of the prologue. */ + struct machine_frame_state fs; +Index: b/src/gcc/config/i386/i386.md +=================================================================== +--- a/src/gcc/config/i386/i386.md ++++ b/src/gcc/config/i386/i386.md +@@ -12169,7 +12169,7 @@ + (define_insn "simple_return_internal" + [(simple_return)] + "reload_completed" +- "%!ret" ++ "* return ix86_output_function_return (false);" + [(set_attr "length_nobnd" "1") + (set_attr "atom_unit" "jeu") + (set_attr "length_immediate" "0") +@@ -12182,12 +12182,7 @@ + [(simple_return) + (unspec [(const_int 0)] UNSPEC_REP)] + "reload_completed" +-{ +- if (ix86_bnd_prefixed_insn_p (insn)) +- return "%!ret"; +- +- return "rep%; ret"; +-} ++ "* return ix86_output_function_return (true);" + [(set_attr "length" "2") + (set_attr "atom_unit" "jeu") + (set_attr "length_immediate" "0") +Index: b/src/gcc/config/i386/i386.opt +=================================================================== +--- a/src/gcc/config/i386/i386.opt ++++ b/src/gcc/config/i386/i386.opt +@@ -881,9 +881,13 @@ mindirect-branch= + Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_indirect_branch) Init(indirect_branch_keep) + Convert indirect call and jump to call and return thunks. + ++mfunction-return= ++Target Report RejectNegative Joined Enum(indirect_branch) Var(ix86_function_return) Init(indirect_branch_keep) ++Convert function return to call and return thunk. ++ + Enum + Name(indirect_branch) Type(enum indirect_branch) +-Known indirect branch choices (for use with the -mindirect-branch= option): ++Known indirect branch choices (for use with the -mindirect-branch=/-mfunction-return= options): + + EnumValue + Enum(indirect_branch) String(keep) Value(indirect_branch_keep) +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -11,7 +11,7 @@ male_indirect_jump (long offset) + dispatch(offset); + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -11,7 +11,7 @@ male_indirect_jump (long offset) + dispatch[offset](offset); + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -12,7 +12,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -12,7 +12,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + void func0 (void); + void func1 (void); +@@ -35,7 +35,7 @@ bar (int i) + } + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -14,7 +14,7 @@ male_indirect_jump (long offset) + dispatch(offset); + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -12,7 +12,7 @@ male_indirect_jump (long offset) + dispatch[offset](offset); + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -14,7 +14,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ + /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ + /* { dg-final { scan-assembler {\tpause} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -13,7 +13,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ + /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ + /* { dg-final { scan-assembler {\tpause} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -14,7 +14,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ + /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -13,7 +13,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ + /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ + + void func0 (void); + void func1 (void); +@@ -36,7 +36,7 @@ bar (int i) + } + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */ + /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-8.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + void func0 (void); + void func1 (void); +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile { target { ! x32 } } } */ +-/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ + + void (*dispatch) (char *); + char buf[10]; +@@ -10,7 +10,7 @@ foo (void) + dispatch (buf); + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ + /* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile { target { ! x32 } } } */ +-/* { dg-options "-O2 -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ + + void (*dispatch) (char *); + char buf[10]; +@@ -11,7 +11,7 @@ foo (void) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */ + /* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */ + /* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -11,7 +11,7 @@ male_indirect_jump (long offset) + dispatch(offset); + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -11,7 +11,7 @@ male_indirect_jump (long offset) + dispatch[offset](offset); + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -12,7 +12,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ + /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -12,7 +12,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ + /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + void func0 (void); + void func1 (void); +@@ -35,7 +35,7 @@ bar (int i) + } + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ + /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -11,7 +11,7 @@ male_indirect_jump (long offset) + dispatch(offset); + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ + /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ + /* { dg-final { scan-assembler {\tpause} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -11,7 +11,7 @@ male_indirect_jump (long offset) + dispatch[offset](offset); + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ + /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ + /* { dg-final { scan-assembler {\tpause} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -12,7 +12,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ + /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ + /* { dg-final { scan-assembler-times {\tpause} 1 } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +@@ -12,7 +12,7 @@ male_indirect_jump (long offset) + return 0; + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */ + /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */ + /* { dg-final { scan-assembler-times {\tpause} 1 } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + void func0 (void); + void func1 (void); +@@ -35,7 +35,7 @@ bar (int i) + } + } + +-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */ + /* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ + /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ + /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-1.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-1.c +@@ -0,0 +1,13 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=thunk" } */ ++ ++void ++foo (void) ++{ ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-10.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-10.c +@@ -0,0 +1,23 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ ++ ++extern void (*bar) (void); ++ ++int ++foo (void) ++{ ++ bar (); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler-times {\tpause} 2 } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ ++/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-11.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-11.c +@@ -0,0 +1,23 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ ++ ++extern void (*bar) (void); ++ ++int ++foo (void) ++{ ++ bar (); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler-times {\tpause} 1 } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ ++/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-12.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-12.c +@@ -0,0 +1,22 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ ++ ++extern void (*bar) (void); ++ ++int ++foo (void) ++{ ++ bar (); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler-times {\tpause} 1 } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ ++/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-13.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-13.c +@@ -0,0 +1,22 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ ++ ++extern void (*bar) (void); ++extern int foo (void) __attribute__ ((function_return("thunk"))); ++ ++int ++foo (void) ++{ ++ bar (); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler-times {\tpause} 2 } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 2 } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ ++/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */ ++/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c +@@ -0,0 +1,22 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ ++ ++extern void (*bar) (void); ++ ++__attribute__ ((function_return("thunk-inline"))) ++int ++foo (void) ++{ ++ bar (); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler-times {\tpause} 1 } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c +@@ -0,0 +1,22 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ ++ ++extern void (*bar) (void); ++ ++__attribute__ ((function_return("thunk-extern"), indirect_branch("thunk"))) ++int ++foo (void) ++{ ++ bar (); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-times {\tpause} 1 } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 1 } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-16.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-16.c +@@ -0,0 +1,18 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk-extern -fno-pic" } */ ++ ++extern void (*bar) (void); ++ ++__attribute__ ((function_return("keep"), indirect_branch("keep"))) ++int ++foo (void) ++{ ++ bar (); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ ++/* { dg-final { scan-assembler-not "__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-2.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-2.c +@@ -0,0 +1,13 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ ++ ++void ++foo (void) ++{ ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-3.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-3.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=thunk-extern" } */ ++ ++void ++foo (void) ++{ ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-4.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-4.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=keep" } */ ++ ++void ++foo (void) ++{ ++} ++ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-5.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-5.c +@@ -0,0 +1,15 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=keep" } */ ++ ++extern void foo (void) __attribute__ ((function_return("thunk"))); ++ ++void ++foo (void) ++{ ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-6.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-6.c +@@ -0,0 +1,14 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=keep" } */ ++ ++__attribute__ ((function_return("thunk-inline"))) ++void ++foo (void) ++{ ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler {\tlfence} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-7.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-7.c +@@ -0,0 +1,13 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=keep" } */ ++ ++__attribute__ ((function_return("thunk-extern"))) ++void ++foo (void) ++{ ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-8.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-8.c +@@ -0,0 +1,14 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=thunk-inline" } */ ++ ++extern void foo (void) __attribute__ ((function_return("keep"))); ++ ++void ++foo (void) ++{ ++} ++ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c +@@ -0,0 +1,24 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ ++ ++extern void (*bar) (void); ++ ++int ++foo (void) ++{ ++ bar (); ++ return 0; ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */ ++/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */ ++/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */ ++/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */ diff --git a/gcc5/patches/0007-x86-Add-mindirect-branch-register-doc.diff b/gcc5/patches/0007-x86-Add-mindirect-branch-register-doc.diff new file mode 100644 index 0000000..9780bfc --- /dev/null +++ b/gcc5/patches/0007-x86-Add-mindirect-branch-register-doc.diff @@ -0,0 +1,231 @@ +From 86118fbdbafe6af54b2da467e1073c49e1742116 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 11:17:49 +0000 +Subject: [PATCH 7/9] x86: Add -mindirect-branch-register (documentation) + +Add -mindirect-branch-register to force indirect branch via register. +This is implemented by disabling patterns of indirect branch via memory, +similar to TARGET_X32. + +-mindirect-branch= and -mfunction-return= tests are updated with +-mno-indirect-branch-register to avoid false test failures when +-mindirect-branch-register is added to RUNTESTFLAGS for "make check". + +gcc/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * config/i386/constraints.md (Bs): Disallow memory operand for + -mindirect-branch-register. + (Bw): Likewise. + * config/i386/predicates.md (indirect_branch_operand): Likewise. + (GOT_memory_operand): Likewise. + (call_insn_operand): Likewise. + (sibcall_insn_operand): Likewise. + (GOT32_symbol_operand): Likewise. + * config/i386/i386.md (indirect_jump): Call convert_memory_address + for -mindirect-branch-register. + (tablejump): Likewise. + (*sibcall_memory): Likewise. + (*sibcall_value_memory): Likewise. + Disallow peepholes of indirect call and jump via memory for + -mindirect-branch-register. + (*call_pop): Replace m with Bw. + (*call_value_pop): Likewise. + (*sibcall_pop_memory): Replace m with Bs. + * config/i386/i386.opt (mindirect-branch-register): New option. + * doc/invoke.texi: Document -mindirect-branch-register option. + +gcc/testsuite/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * gcc.target/i386/indirect-thunk-1.c (dg-options): Add + -mno-indirect-branch-register. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-5.c: Likewise. + * gcc.target/i386/indirect-thunk-6.c: Likewise. + * gcc.target/i386/indirect-thunk-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. + * gcc.target/i386/ret-thunk-10.c: Likewise. + * gcc.target/i386/ret-thunk-11.c: Likewise. + * gcc.target/i386/ret-thunk-12.c: Likewise. + * gcc.target/i386/ret-thunk-13.c: Likewise. + * gcc.target/i386/ret-thunk-14.c: Likewise. + * gcc.target/i386/ret-thunk-15.c: Likewise. + * gcc.target/i386/ret-thunk-9.c: Likewise. + * gcc.target/i386/indirect-thunk-register-1.c: New test. + * gcc.target/i386/indirect-thunk-register-2.c: Likewise. + * gcc.target/i386/indirect-thunk-register-3.c: Likewise. + +i386: Rename to ix86_indirect_branch_register + +Rename the variable for -mindirect-branch-register to +ix86_indirect_branch_register to match the command-line option name. + + Backport from mainline + 2018-01-15 H.J. Lu + + * config/i386/constraints.md (Bs): Replace + ix86_indirect_branch_thunk_register with + ix86_indirect_branch_register. + (Bw): Likewise. + * config/i386/i386.md (indirect_jump): Likewise. + (tablejump): Likewise. + (*sibcall_memory): Likewise. + (*sibcall_value_memory): Likewise. + Peepholes of indirect call and jump via memory: Likewise. + * config/i386/i386.opt: Likewise. + * config/i386/predicates.md (indirect_branch_operand): Likewise. + (GOT_memory_operand): Likewise. + (call_insn_operand): Likewise. + (sibcall_insn_operand): Likewise. + (GOT32_symbol_operand): Likewise. + +x86: Rewrite ix86_indirect_branch_register logic + +Rewrite ix86_indirect_branch_register logic with + +(and (not (match_test "ix86_indirect_branch_register")) + (original condition before r256662)) + + Backport from mainline + 2018-01-15 H.J. Lu + + * config/i386/predicates.md (constant_call_address_operand): + Rewrite ix86_indirect_branch_register logic. + (sibcall_insn_operand): Likewise. + +Don't check ix86_indirect_branch_register for GOT operand + +Since GOT_memory_operand and GOT32_symbol_operand are simple pattern +matches, don't check ix86_indirect_branch_register here. If needed, +-mindirect-branch= will convert indirect branch via GOT slot to a call +and return thunk. + + Backport from mainline + 2018-01-15 H.J. Lu + + * config/i386/constraints.md (Bs): Update + ix86_indirect_branch_register check. Don't check + ix86_indirect_branch_register with GOT_memory_operand. + (Bw): Likewise. + * config/i386/predicates.md (GOT_memory_operand): Don't check + ix86_indirect_branch_register here. + (GOT32_symbol_operand): Likewise. + +i386: Rewrite indirect_branch_operand logic + + Backport from mainline + 2018-01-15 H.J. Lu + + * config/i386/predicates.md (indirect_branch_operand): Rewrite + ix86_indirect_branch_register logic. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256735 138bc75d-0d04-0410-961f-82ee72b054a4 + +[Ubuntu note: Dropped indirect-thunk-5.c, indirect-thunk-6.c, + indirect-thunk-bnd-3.c, indirect-thunk-bnd-4.c, + indirect-thunk-extern-5.c, indirect-thunk-extern-6.c, + indirect-thunk-inline-5.c, and indirect-thunk-inline-6.c tests due + to gcc 5.4 and earlier not supporting the -fno-plt option. + --sbeattie,] +--- + src/gcc/config/i386/constraints.md | 6 + + src/gcc/config/i386/i386.md | 34 ++++++---- + src/gcc/config/i386/i386.opt | 4 + + src/gcc/config/i386/predicates.md | 9 +- + src/gcc/doc/invoke.texi | 7 +- + src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c | 22 ++++++ + src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c | 20 +++++ + src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c | 19 +++++ + src/gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 2 + 39 files changed, 134 insertions(+), 49 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c + +Index: b/src/gcc/doc/invoke.texi +=================================================================== +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -1091,7 +1091,8 @@ See RS/6000 and PowerPC Options. + -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv @gol + -mavx256-split-unaligned-load -mavx256-split-unaligned-store @gol + -malign-data=@var{type} -mstack-protector-guard=@var{guard} @gol +--mindirect-branch=@var{choice} -mfunction-return=@var{choice}} ++-mindirect-branch=@var{choice} -mfunction-return=@var{choice} @gol ++-mindirect-branch-register} + + @emph{x86 Windows Options} + @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol +@@ -24040,6 +24041,10 @@ object file. You can control this behav + using the function attribute @code{function_return}. + @xref{Function Attributes}. + ++@item -mindirect-branch-register ++@opindex -mindirect-branch-register ++Force indirect call and jump via register. ++ + @end table + + @c man end diff --git a/gcc5/patches/0007-x86-Add-mindirect-branch-register.diff b/gcc5/patches/0007-x86-Add-mindirect-branch-register.diff new file mode 100644 index 0000000..2113689 --- /dev/null +++ b/gcc5/patches/0007-x86-Add-mindirect-branch-register.diff @@ -0,0 +1,812 @@ +From 86118fbdbafe6af54b2da467e1073c49e1742116 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 11:17:49 +0000 +Subject: [PATCH 7/9] x86: Add -mindirect-branch-register + +Add -mindirect-branch-register to force indirect branch via register. +This is implemented by disabling patterns of indirect branch via memory, +similar to TARGET_X32. + +-mindirect-branch= and -mfunction-return= tests are updated with +-mno-indirect-branch-register to avoid false test failures when +-mindirect-branch-register is added to RUNTESTFLAGS for "make check". + +gcc/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * config/i386/constraints.md (Bs): Disallow memory operand for + -mindirect-branch-register. + (Bw): Likewise. + * config/i386/predicates.md (indirect_branch_operand): Likewise. + (GOT_memory_operand): Likewise. + (call_insn_operand): Likewise. + (sibcall_insn_operand): Likewise. + (GOT32_symbol_operand): Likewise. + * config/i386/i386.md (indirect_jump): Call convert_memory_address + for -mindirect-branch-register. + (tablejump): Likewise. + (*sibcall_memory): Likewise. + (*sibcall_value_memory): Likewise. + Disallow peepholes of indirect call and jump via memory for + -mindirect-branch-register. + (*call_pop): Replace m with Bw. + (*call_value_pop): Likewise. + (*sibcall_pop_memory): Replace m with Bs. + * config/i386/i386.opt (mindirect-branch-register): New option. + * doc/invoke.texi: Document -mindirect-branch-register option. + +gcc/testsuite/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * gcc.target/i386/indirect-thunk-1.c (dg-options): Add + -mno-indirect-branch-register. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-5.c: Likewise. + * gcc.target/i386/indirect-thunk-6.c: Likewise. + * gcc.target/i386/indirect-thunk-7.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. + * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. + * gcc.target/i386/ret-thunk-10.c: Likewise. + * gcc.target/i386/ret-thunk-11.c: Likewise. + * gcc.target/i386/ret-thunk-12.c: Likewise. + * gcc.target/i386/ret-thunk-13.c: Likewise. + * gcc.target/i386/ret-thunk-14.c: Likewise. + * gcc.target/i386/ret-thunk-15.c: Likewise. + * gcc.target/i386/ret-thunk-9.c: Likewise. + * gcc.target/i386/indirect-thunk-register-1.c: New test. + * gcc.target/i386/indirect-thunk-register-2.c: Likewise. + * gcc.target/i386/indirect-thunk-register-3.c: Likewise. + +i386: Rename to ix86_indirect_branch_register + +Rename the variable for -mindirect-branch-register to +ix86_indirect_branch_register to match the command-line option name. + + Backport from mainline + 2018-01-15 H.J. Lu + + * config/i386/constraints.md (Bs): Replace + ix86_indirect_branch_thunk_register with + ix86_indirect_branch_register. + (Bw): Likewise. + * config/i386/i386.md (indirect_jump): Likewise. + (tablejump): Likewise. + (*sibcall_memory): Likewise. + (*sibcall_value_memory): Likewise. + Peepholes of indirect call and jump via memory: Likewise. + * config/i386/i386.opt: Likewise. + * config/i386/predicates.md (indirect_branch_operand): Likewise. + (GOT_memory_operand): Likewise. + (call_insn_operand): Likewise. + (sibcall_insn_operand): Likewise. + (GOT32_symbol_operand): Likewise. + +x86: Rewrite ix86_indirect_branch_register logic + +Rewrite ix86_indirect_branch_register logic with + +(and (not (match_test "ix86_indirect_branch_register")) + (original condition before r256662)) + + Backport from mainline + 2018-01-15 H.J. Lu + + * config/i386/predicates.md (constant_call_address_operand): + Rewrite ix86_indirect_branch_register logic. + (sibcall_insn_operand): Likewise. + +Don't check ix86_indirect_branch_register for GOT operand + +Since GOT_memory_operand and GOT32_symbol_operand are simple pattern +matches, don't check ix86_indirect_branch_register here. If needed, +-mindirect-branch= will convert indirect branch via GOT slot to a call +and return thunk. + + Backport from mainline + 2018-01-15 H.J. Lu + + * config/i386/constraints.md (Bs): Update + ix86_indirect_branch_register check. Don't check + ix86_indirect_branch_register with GOT_memory_operand. + (Bw): Likewise. + * config/i386/predicates.md (GOT_memory_operand): Don't check + ix86_indirect_branch_register here. + (GOT32_symbol_operand): Likewise. + +i386: Rewrite indirect_branch_operand logic + + Backport from mainline + 2018-01-15 H.J. Lu + + * config/i386/predicates.md (indirect_branch_operand): Rewrite + ix86_indirect_branch_register logic. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256735 138bc75d-0d04-0410-961f-82ee72b054a4 + +[Ubuntu note: Dropped indirect-thunk-5.c, indirect-thunk-6.c, + indirect-thunk-bnd-3.c, indirect-thunk-bnd-4.c, + indirect-thunk-extern-5.c, indirect-thunk-extern-6.c, + indirect-thunk-inline-5.c, and indirect-thunk-inline-6.c tests due + to gcc 5.4 and earlier not supporting the -fno-plt option. + --sbeattie,] +--- + src/gcc/config/i386/constraints.md | 6 + + src/gcc/config/i386/i386.md | 34 ++++++---- + src/gcc/config/i386/i386.opt | 4 + + src/gcc/config/i386/predicates.md | 9 +- + src/gcc/doc/invoke.texi | 7 +- + src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c | 2 + src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c | 22 ++++++ + src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c | 20 +++++ + src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c | 19 +++++ + src/gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 2 + src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 2 + 39 files changed, 134 insertions(+), 49 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c + +Index: b/src/gcc/config/i386/constraints.md +=================================================================== +--- a/src/gcc/config/i386/constraints.md ++++ b/src/gcc/config/i386/constraints.md +@@ -157,12 +157,14 @@ + + (define_constraint "Bs" + "@internal Sibcall memory operand." +- (and (not (match_test "TARGET_X32")) ++ (and (not (match_test "ix86_indirect_branch_register")) ++ (not (match_test "TARGET_X32")) + (match_operand 0 "sibcall_memory_operand"))) + + (define_constraint "Bw" + "@internal Call memory operand." +- (and (not (match_test "TARGET_X32")) ++ (and (not (match_test "ix86_indirect_branch_register")) ++ (not (match_test "TARGET_X32")) + (match_operand 0 "memory_operand"))) + + (define_constraint "Bz" +Index: b/src/gcc/config/i386/i386.md +=================================================================== +--- a/src/gcc/config/i386/i386.md ++++ b/src/gcc/config/i386/i386.md +@@ -11554,7 +11554,7 @@ + [(set (pc) (match_operand 0 "indirect_branch_operand"))] + "" + { +- if (TARGET_X32) ++ if (TARGET_X32 || ix86_indirect_branch_register) + operands[0] = convert_memory_address (word_mode, operands[0]); + cfun->machine->has_local_indirect_jump = true; + }) +@@ -11607,7 +11607,7 @@ + OPTAB_DIRECT); + } + +- if (TARGET_X32) ++ if (TARGET_X32 || ix86_indirect_branch_register) + operands[0] = convert_memory_address (word_mode, operands[0]); + cfun->machine->has_local_indirect_jump = true; + }) +@@ -11764,7 +11764,7 @@ + [(call (mem:QI (match_operand:W 0 "memory_operand" "m")) + (match_operand 1)) + (unspec [(const_int 0)] UNSPEC_PEEPSIB)] +- "!TARGET_X32" ++ "!TARGET_X32 && !ix86_indirect_branch_register" + "* return ix86_output_call_insn (insn, operands[0]);" + [(set_attr "type" "call")]) + +@@ -11773,7 +11773,9 @@ + (match_operand:W 1 "memory_operand")) + (call (mem:QI (match_dup 0)) + (match_operand 3))] +- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1)) ++ "!TARGET_X32 ++ && !ix86_indirect_branch_register ++ && SIBLING_CALL_P (peep2_next_insn (1)) + && peep2_reg_dead_p (2, operands[0])" + [(parallel [(call (mem:QI (match_dup 1)) + (match_dup 3)) +@@ -11785,7 +11787,9 @@ + (unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) + (call (mem:QI (match_dup 0)) + (match_operand 3))] +- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2)) ++ "!TARGET_X32 ++ && !ix86_indirect_branch_register ++ && SIBLING_CALL_P (peep2_next_insn (2)) + && peep2_reg_dead_p (3, operands[0])" + [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) + (parallel [(call (mem:QI (match_dup 1)) +@@ -11806,7 +11810,7 @@ + }) + + (define_insn "*call_pop" +- [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lmBz")) ++ [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lBwBz")) + (match_operand 1)) + (set (reg:SI SP_REG) + (plus:SI (reg:SI SP_REG) +@@ -11826,7 +11830,7 @@ + [(set_attr "type" "call")]) + + (define_insn "*sibcall_pop_memory" +- [(call (mem:QI (match_operand:SI 0 "memory_operand" "m")) ++ [(call (mem:QI (match_operand:SI 0 "memory_operand" "Bs")) + (match_operand 1)) + (set (reg:SI SP_REG) + (plus:SI (reg:SI SP_REG) +@@ -11878,7 +11882,9 @@ + [(set (match_operand:W 0 "register_operand") + (match_operand:W 1 "memory_operand")) + (set (pc) (match_dup 0))] +- "!TARGET_X32 && peep2_reg_dead_p (2, operands[0])" ++ "!TARGET_X32 ++ && !ix86_indirect_branch_register ++ && peep2_reg_dead_p (2, operands[0])" + [(set (pc) (match_dup 1))]) + + ;; Call subroutine, returning value in operand 0 +@@ -11928,7 +11934,7 @@ + (call (mem:QI (match_operand:W 1 "memory_operand" "m")) + (match_operand 2))) + (unspec [(const_int 0)] UNSPEC_PEEPSIB)] +- "!TARGET_X32" ++ "!TARGET_X32 && !ix86_indirect_branch_register" + "* return ix86_output_call_insn (insn, operands[1]);" + [(set_attr "type" "callv")]) + +@@ -11938,7 +11944,9 @@ + (set (match_operand 2) + (call (mem:QI (match_dup 0)) + (match_operand 3)))] +- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1)) ++ "!TARGET_X32 ++ && !ix86_indirect_branch_register ++ && SIBLING_CALL_P (peep2_next_insn (1)) + && peep2_reg_dead_p (2, operands[0])" + [(parallel [(set (match_dup 2) + (call (mem:QI (match_dup 1)) +@@ -11952,7 +11960,9 @@ + (set (match_operand 2) + (call (mem:QI (match_dup 0)) + (match_operand 3)))] +- "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2)) ++ "!TARGET_X32 ++ && !ix86_indirect_branch_register ++ && SIBLING_CALL_P (peep2_next_insn (2)) + && peep2_reg_dead_p (3, operands[0])" + [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE) + (parallel [(set (match_dup 2) +@@ -11976,7 +11986,7 @@ + + (define_insn "*call_value_pop" + [(set (match_operand 0) +- (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lmBz")) ++ (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lBwBz")) + (match_operand 2))) + (set (reg:SI SP_REG) + (plus:SI (reg:SI SP_REG) +Index: b/src/gcc/config/i386/i386.opt +=================================================================== +--- a/src/gcc/config/i386/i386.opt ++++ b/src/gcc/config/i386/i386.opt +@@ -900,3 +900,7 @@ Enum(indirect_branch) String(thunk-inlin + + EnumValue + Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern) ++ ++mindirect-branch-register ++Target Report Var(ix86_indirect_branch_register) Init(0) ++Force indirect call and jump via register. +Index: b/src/gcc/config/i386/predicates.md +=================================================================== +--- a/src/gcc/config/i386/predicates.md ++++ b/src/gcc/config/i386/predicates.md +@@ -607,7 +607,8 @@ + ;; Test for a valid operand for indirect branch. + (define_predicate "indirect_branch_operand" + (ior (match_operand 0 "register_operand") +- (and (not (match_test "TARGET_X32")) ++ (and (not (match_test "ix86_indirect_branch_register")) ++ (not (match_test "TARGET_X32")) + (match_operand 0 "memory_operand")))) + + ;; Test for a valid operand for a call instruction. +@@ -616,7 +617,8 @@ + (ior (match_test "constant_call_address_operand + (op, mode == VOIDmode ? mode : Pmode)") + (match_operand 0 "call_register_no_elim_operand") +- (and (not (match_test "TARGET_X32")) ++ (and (not (match_test "ix86_indirect_branch_register")) ++ (not (match_test "TARGET_X32")) + (match_operand 0 "memory_operand")))) + + ;; Similarly, but for tail calls, in which we cannot allow memory references. +@@ -624,7 +626,8 @@ + (ior (match_test "constant_call_address_operand + (op, mode == VOIDmode ? mode : Pmode)") + (match_operand 0 "register_no_elim_operand") +- (and (not (match_test "TARGET_X32")) ++ (and (not (match_test "ix86_indirect_branch_register")) ++ (not (match_test "TARGET_X32")) + (match_operand 0 "sibcall_memory_operand")))) + + ;; Match exactly zero. +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + void func0 (void); + void func1 (void); +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -fno-pic" } */ + + void func0 (void); + void func1 (void); +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile { target { ! x32 } } } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ + + void (*dispatch) (char *); + char buf[10]; +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile { target { ! x32 } } } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fcheck-pointer-bounds -mmpx -fno-pic" } */ + + void (*dispatch) (char *); + char buf[10]; +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + void func0 (void); + void func1 (void); +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + typedef void (*dispatch_t)(long offset); + +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + void func0 (void); + void func1 (void); +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-1.c +@@ -0,0 +1,22 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -mindirect-branch-register -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk\n" } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk_bnd\n" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-2.c +@@ -0,0 +1,20 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-inline -mindirect-branch-register -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler "mov\[ \t\](%eax|%rax), \\((%esp|%rsp)\\)" } } */ ++/* { dg-final { scan-assembler {\tpause} } } */ ++/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ ++/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c +=================================================================== +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-3.c +@@ -0,0 +1,19 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-extern -mindirect-branch-register -fno-pic" } */ ++ ++typedef void (*dispatch_t)(long offset); ++ ++dispatch_t dispatch; ++ ++void ++male_indirect_jump (long offset) ++{ ++ dispatch(offset); ++} ++ ++/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */ ++/* { dg-final { scan-assembler-not "push(?:l|q)\[ \t\]*_?dispatch" } } */ ++/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ ++/* { dg-final { scan-assembler-not {\t(pause|pause|nop)} } } */ ++/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */ ++/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */ +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-10.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-10.c ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-10.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-inline -mindirect-branch=thunk -fno-pic" } */ + + extern void (*bar) (void); + +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-11.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-11.c ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-11.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk-extern -mindirect-branch=thunk -fno-pic" } */ + + extern void (*bar) (void); + +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-12.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-12.c ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-12.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */ + + extern void (*bar) (void); + +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-13.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-13.c ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-13.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */ + + extern void (*bar) (void); + extern int foo (void) __attribute__ ((function_return("thunk"))); +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */ + + extern void (*bar) (void); + +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=keep -fno-pic" } */ + + extern void (*bar) (void); + +Index: b/src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c +=================================================================== +--- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ ++/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */ + + extern void (*bar) (void); + diff --git a/gcc5/patches/0008-x86-Add-V-register-operand-modifier-doc.diff b/gcc5/patches/0008-x86-Add-V-register-operand-modifier-doc.diff new file mode 100644 index 0000000..b3bd93a --- /dev/null +++ b/gcc5/patches/0008-x86-Add-V-register-operand-modifier-doc.diff @@ -0,0 +1,65 @@ +From 8a47615dd04a02fdae9691f5ad73fd5a5530c156 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 11:19:51 +0000 +Subject: [PATCH 8/9] x86: Add 'V' register operand modifier (documentation) + +Add 'V', a special modifier which prints the name of the full integer +register without '%'. For + +extern void (*func_p) (void); + +void +foo (void) +{ + asm ("call __x86_indirect_thunk_%V0" : : "a" (func_p)); +} + +it generates: + +foo: + movq func_p(%rip), %rax + call __x86_indirect_thunk_rax + ret + +gcc/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * config/i386/i386.c (print_reg): Print the name of the full + integer register without '%'. + (ix86_print_operand): Handle 'V'. + * doc/extend.texi: Document 'V' modifier. + +gcc/testsuite/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * gcc.target/i386/indirect-thunk-register-4.c: New test. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256736 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + gcc/ChangeLog | 10 ++++++++++ + gcc/config/i386/i386.c | 13 ++++++++++++- + gcc/doc/extend.texi | 3 +++ + gcc/testsuite/ChangeLog | 7 +++++++ + gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c | 13 +++++++++++++ + 5 files changed, 45 insertions(+), 1 deletion(-) + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c + +diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi +index 46e0a36..9db9e0e 100644 +--- a/src/gcc/doc/extend.texi ++++ b/src/gcc/doc/extend.texi +@@ -8778,6 +8778,9 @@ The table below shows the list of supported modifiers and their effects. + @tab @code{2} + @end multitable + ++@code{V} is a special modifier which prints the name of the full integer ++register without @code{%}. ++ + @anchor{x86floatingpointasmoperands} + @subsubsection x86 Floating-Point @code{asm} Operands + diff --git a/gcc5/patches/0008-x86-Add-V-register-operand-modifier.diff b/gcc5/patches/0008-x86-Add-V-register-operand-modifier.diff new file mode 100644 index 0000000..fb1ccd9 --- /dev/null +++ b/gcc5/patches/0008-x86-Add-V-register-operand-modifier.diff @@ -0,0 +1,125 @@ +From 8a47615dd04a02fdae9691f5ad73fd5a5530c156 Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 11:19:51 +0000 +Subject: [PATCH 8/9] x86: Add 'V' register operand modifier + +Add 'V', a special modifier which prints the name of the full integer +register without '%'. For + +extern void (*func_p) (void); + +void +foo (void) +{ + asm ("call __x86_indirect_thunk_%V0" : : "a" (func_p)); +} + +it generates: + +foo: + movq func_p(%rip), %rax + call __x86_indirect_thunk_rax + ret + +gcc/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * config/i386/i386.c (print_reg): Print the name of the full + integer register without '%'. + (ix86_print_operand): Handle 'V'. + * doc/extend.texi: Document 'V' modifier. + +gcc/testsuite/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * gcc.target/i386/indirect-thunk-register-4.c: New test. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256736 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + gcc/ChangeLog | 10 ++++++++++ + gcc/config/i386/i386.c | 13 ++++++++++++- + gcc/doc/extend.texi | 3 +++ + gcc/testsuite/ChangeLog | 7 +++++++ + gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c | 13 +++++++++++++ + 5 files changed, 45 insertions(+), 1 deletion(-) + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c + +diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c +index 8fb8902..1bbdd0c 100644 +--- a/src/gcc/config/i386/i386.c ++++ b/src/gcc/config/i386/i386.c +@@ -17941,6 +17941,7 @@ put_condition_code (enum rtx_code code, machine_mode mode, bool reverse, + If CODE is 'h', pretend the reg is the 'high' byte register. + If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op. + If CODE is 'd', duplicate the operand for AVX instruction. ++ If CODE is 'V', print naked full integer register name without %. + */ + + void +@@ -17951,7 +17952,7 @@ print_reg (rtx x, int code, FILE *file) + unsigned int regno; + bool duplicated = code == 'd' && TARGET_AVX; + +- if (ASSEMBLER_DIALECT == ASM_ATT) ++ if (ASSEMBLER_DIALECT == ASM_ATT && code != 'V') + putc ('%', file); + + if (x == pc_rtx) +@@ -17999,6 +18000,14 @@ print_reg (rtx x, int code, FILE *file) + else + code = GET_MODE_SIZE (GET_MODE (x)); + ++ if (code == 'V') ++ { ++ if (GENERAL_REGNO_P (regno)) ++ code = GET_MODE_SIZE (word_mode); ++ else ++ error ("'V' modifier on non-integer register"); ++ } ++ + /* Irritatingly, AMD extended registers use different naming convention + from the normal registers: "r%d[bwd]" */ + if (REX_INT_REGNO_P (regno)) +@@ -18118,6 +18127,7 @@ print_reg (rtx x, int code, FILE *file) + & -- print some in-use local-dynamic symbol name. + H -- print a memory address offset by 8; used for sse high-parts + Y -- print condition for XOP pcom* instruction. ++ V -- print naked full integer register name without %. + + -- print a branch hint as 'cs' or 'ds' prefix + ; -- print a semicolon (after prefixes due to bug in older gas). + ~ -- print "i" if TARGET_AVX2, "f" otherwise. +@@ -18342,6 +18352,7 @@ ix86_print_operand (FILE *file, rtx x, int code) + case 'X': + case 'P': + case 'p': ++ case 'V': + break; + + case 's': +diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c +new file mode 100644 +index 0000000..f0cd9b7 +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c +@@ -0,0 +1,13 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -mindirect-branch=keep -fno-pic" } */ ++ ++extern void (*func_p) (void); ++ ++void ++foo (void) ++{ ++ asm("call __x86_indirect_thunk_%V0" : : "a" (func_p)); ++} ++ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_eax" { target ia32 } } } */ ++/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_rax" { target { ! ia32 } } } } */ +-- +2.7.4 + diff --git a/gcc5/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-.diff b/gcc5/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-.diff new file mode 100644 index 0000000..fdaab62 --- /dev/null +++ b/gcc5/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-.diff @@ -0,0 +1,275 @@ +From 5d1c53c6fd593de2360c1a2ae44ebf5fa3c5263b Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 11:22:01 +0000 +Subject: [PATCH 9/9] x86: Disallow -mindirect-branch=/-mfunction-return= with + -mcmodel=large + +Since the thunk function may not be reachable in large code model, +-mcmodel=large is incompatible with -mindirect-branch=thunk, +-mindirect-branch=thunk-extern, -mfunction-return=thunk and +-mfunction-return=thunk-extern. Issue an error when they are used with +-mcmodel=large. + +gcc/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * config/i386/i386.c (ix86_set_indirect_branch_type): Disallow + -mcmodel=large with -mindirect-branch=thunk, + -mindirect-branch=thunk-extern, -mfunction-return=thunk and + -mfunction-return=thunk-extern. + * doc/invoke.texi: Document -mcmodel=large is incompatible with + -mindirect-branch=thunk, -mindirect-branch=thunk-extern, + -mfunction-return=thunk and -mfunction-return=thunk-extern. + +gcc/testsuite/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * gcc.target/i386/indirect-thunk-10.c: New test. + * gcc.target/i386/indirect-thunk-8.c: Likewise. + * gcc.target/i386/indirect-thunk-9.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-10.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-11.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-9.c: Likewise. + * gcc.target/i386/ret-thunk-17.c: Likewise. + * gcc.target/i386/ret-thunk-18.c: Likewise. + * gcc.target/i386/ret-thunk-19.c: Likewise. + * gcc.target/i386/ret-thunk-20.c: Likewise. + * gcc.target/i386/ret-thunk-21.c: Likewise. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256737 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + gcc/ChangeLog | 13 +++++++++++ + gcc/config/i386/i386.c | 26 ++++++++++++++++++++++ + gcc/doc/invoke.texi | 11 +++++++++ + gcc/testsuite/ChangeLog | 17 ++++++++++++++ + gcc/testsuite/gcc.target/i386/indirect-thunk-10.c | 7 ++++++ + gcc/testsuite/gcc.target/i386/indirect-thunk-8.c | 7 ++++++ + gcc/testsuite/gcc.target/i386/indirect-thunk-9.c | 7 ++++++ + .../gcc.target/i386/indirect-thunk-attr-10.c | 9 ++++++++ + .../gcc.target/i386/indirect-thunk-attr-11.c | 9 ++++++++ + .../gcc.target/i386/indirect-thunk-attr-9.c | 9 ++++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-17.c | 7 ++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-18.c | 8 +++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-19.c | 8 +++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-20.c | 9 ++++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-21.c | 9 ++++++++ + 15 files changed, 156 insertions(+) + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-10.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-8.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-9.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-17.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-18.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-19.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-20.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-21.c + +diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c +index 1bbdd0c..e758387 100644 +--- a/src/gcc/config/i386/i386.c ++++ b/src/gcc/config/i386/i386.c +@@ -7187,6 +7187,19 @@ ix86_set_indirect_branch_type (tree fndecl) + } + else + cfun->machine->indirect_branch_type = ix86_indirect_branch; ++ ++ /* -mcmodel=large is not compatible with -mindirect-branch=thunk ++ nor -mindirect-branch=thunk-extern. */ ++ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) ++ && ((cfun->machine->indirect_branch_type ++ == indirect_branch_thunk_extern) ++ || (cfun->machine->indirect_branch_type ++ == indirect_branch_thunk))) ++ error ("%<-mindirect-branch=%s%> and %<-mcmodel=large%> are not " ++ "compatible", ++ ((cfun->machine->indirect_branch_type ++ == indirect_branch_thunk_extern) ++ ? "thunk-extern" : "thunk")); + } + + if (cfun->machine->function_return_type == indirect_branch_unset) +@@ -7212,6 +7225,19 @@ ix86_set_indirect_branch_type (tree fndecl) + } + else + cfun->machine->function_return_type = ix86_function_return; ++ ++ /* -mcmodel=large is not compatible with -mfunction-return=thunk ++ nor -mfunction-return=thunk-extern. */ ++ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) ++ && ((cfun->machine->function_return_type ++ == indirect_branch_thunk_extern) ++ || (cfun->machine->function_return_type ++ == indirect_branch_thunk))) ++ error ("%<-mfunction-return=%s%> and %<-mcmodel=large%> are not " ++ "compatible", ++ ((cfun->machine->function_return_type ++ == indirect_branch_thunk_extern) ++ ? "thunk-extern" : "thunk")); + } + } + +diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c +new file mode 100644 +index 0000000..a0674bd +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c +@@ -0,0 +1,7 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-inline -mfunction-return=keep -mcmodel=large" } */ ++ ++void ++bar (void) ++{ ++} +diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c +new file mode 100644 +index 0000000..7a80a89 +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c +@@ -0,0 +1,7 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mindirect-branch=thunk -mfunction-return=keep -mcmodel=large" } */ ++ ++void ++bar (void) ++{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ ++} +diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c +new file mode 100644 +index 0000000..d4d45c5 +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c +@@ -0,0 +1,7 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mindirect-branch=thunk-extern -mfunction-return=keep -mcmodel=large" } */ ++ ++void ++bar (void) ++{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ ++} +diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c +new file mode 100644 +index 0000000..3a2aead +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c +@@ -0,0 +1,9 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ ++/* { dg-additional-options "-fPIC" { target fpic } } */ ++ ++__attribute__ ((indirect_branch("thunk-extern"))) ++void ++bar (void) ++{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ ++} +diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c +new file mode 100644 +index 0000000..8e52f03 +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c +@@ -0,0 +1,9 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ ++/* { dg-additional-options "-fPIC" { target fpic } } */ ++ ++__attribute__ ((indirect_branch("thunk-inline"))) ++void ++bar (void) ++{ ++} +diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c +new file mode 100644 +index 0000000..bdaa4f6 +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c +@@ -0,0 +1,9 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ ++/* { dg-additional-options "-fPIC" { target fpic } } */ ++ ++__attribute__ ((indirect_branch("thunk"))) ++void ++bar (void) ++{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ ++} +diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-17.c b/gcc/testsuite/gcc.target/i386/ret-thunk-17.c +new file mode 100644 +index 0000000..0605e2c +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-17.c +@@ -0,0 +1,7 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=keep -mcmodel=large" } */ ++ ++void ++bar (void) ++{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ ++} +diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-18.c b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c +new file mode 100644 +index 0000000..307019d +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-18.c +@@ -0,0 +1,8 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=keep -mcmodel=large" } */ ++/* { dg-additional-options "-fPIC" { target fpic } } */ ++ ++void ++bar (void) ++{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ ++} +diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-19.c b/gcc/testsuite/gcc.target/i386/ret-thunk-19.c +new file mode 100644 +index 0000000..772617f +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-19.c +@@ -0,0 +1,8 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ ++ ++__attribute__ ((function_return("thunk"))) ++void ++bar (void) ++{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ ++} +diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-20.c b/gcc/testsuite/gcc.target/i386/ret-thunk-20.c +new file mode 100644 +index 0000000..1e9f9bd +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-20.c +@@ -0,0 +1,9 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ ++/* { dg-additional-options "-fPIC" { target fpic } } */ ++ ++__attribute__ ((function_return("thunk-extern"))) ++void ++bar (void) ++{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ ++} +diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-21.c b/gcc/testsuite/gcc.target/i386/ret-thunk-21.c +new file mode 100644 +index 0000000..eea07f7 +--- /dev/null ++++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-21.c +@@ -0,0 +1,9 @@ ++/* { dg-do compile { target { lp64 } } } */ ++/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ ++/* { dg-additional-options "-fPIC" { target fpic } } */ ++ ++__attribute__ ((function_return("thunk-inline"))) ++void ++bar (void) ++{ ++} +-- +2.7.4 + diff --git a/gcc5/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-doc.diff b/gcc5/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-doc.diff new file mode 100644 index 0000000..c107900 --- /dev/null +++ b/gcc5/patches/0009-x86-Disallow-mindirect-branch-mfunction-return-with-doc.diff @@ -0,0 +1,102 @@ +From 5d1c53c6fd593de2360c1a2ae44ebf5fa3c5263b Mon Sep 17 00:00:00 2001 +From: hjl +Date: Tue, 16 Jan 2018 11:22:01 +0000 +Subject: [PATCH 9/9] x86: Disallow -mindirect-branch=/-mfunction-return= with + -mcmodel=large + +Since the thunk function may not be reachable in large code model, +-mcmodel=large is incompatible with -mindirect-branch=thunk, +-mindirect-branch=thunk-extern, -mfunction-return=thunk and +-mfunction-return=thunk-extern. Issue an error when they are used with +-mcmodel=large. + +gcc/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * config/i386/i386.c (ix86_set_indirect_branch_type): Disallow + -mcmodel=large with -mindirect-branch=thunk, + -mindirect-branch=thunk-extern, -mfunction-return=thunk and + -mfunction-return=thunk-extern. + * doc/invoke.texi: Document -mcmodel=large is incompatible with + -mindirect-branch=thunk, -mindirect-branch=thunk-extern, + -mfunction-return=thunk and -mfunction-return=thunk-extern. + +gcc/testsuite/ + + Backport from mainline + 2018-01-14 H.J. Lu + + * gcc.target/i386/indirect-thunk-10.c: New test. + * gcc.target/i386/indirect-thunk-8.c: Likewise. + * gcc.target/i386/indirect-thunk-9.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-10.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-11.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-9.c: Likewise. + * gcc.target/i386/ret-thunk-17.c: Likewise. + * gcc.target/i386/ret-thunk-18.c: Likewise. + * gcc.target/i386/ret-thunk-19.c: Likewise. + * gcc.target/i386/ret-thunk-20.c: Likewise. + * gcc.target/i386/ret-thunk-21.c: Likewise. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256737 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + gcc/ChangeLog | 13 +++++++++++ + gcc/config/i386/i386.c | 26 ++++++++++++++++++++++ + gcc/doc/invoke.texi | 11 +++++++++ + gcc/testsuite/ChangeLog | 17 ++++++++++++++ + gcc/testsuite/gcc.target/i386/indirect-thunk-10.c | 7 ++++++ + gcc/testsuite/gcc.target/i386/indirect-thunk-8.c | 7 ++++++ + gcc/testsuite/gcc.target/i386/indirect-thunk-9.c | 7 ++++++ + .../gcc.target/i386/indirect-thunk-attr-10.c | 9 ++++++++ + .../gcc.target/i386/indirect-thunk-attr-11.c | 9 ++++++++ + .../gcc.target/i386/indirect-thunk-attr-9.c | 9 ++++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-17.c | 7 ++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-18.c | 8 +++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-19.c | 8 +++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-20.c | 9 ++++++++ + gcc/testsuite/gcc.target/i386/ret-thunk-21.c | 9 ++++++++ + 15 files changed, 156 insertions(+) + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-10.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-8.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-9.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c + create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-17.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-18.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-19.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-20.c + create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-21.c + +diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi +index 1e572b1..6f3c344 100644 +--- a/src/gcc/doc/invoke.texi ++++ b/src/gcc/doc/invoke.texi +@@ -25699,6 +25699,11 @@ to external call and return thunk provided in a separate object file. + You can control this behavior for a specific function by using the + function attribute @code{indirect_branch}. @xref{Function Attributes}. + ++Note that @option{-mcmodel=large} is incompatible with ++@option{-mindirect-branch=thunk} nor ++@option{-mindirect-branch=thunk-extern} since the thunk function may ++not be reachable in large code model. ++ + @item -mfunction-return=@var{choice} + @opindex -mfunction-return + Convert function return with @var{choice}. The default is @samp{keep}, +@@ -25710,6 +25715,12 @@ object file. You can control this behavior for a specific function by + using the function attribute @code{function_return}. + @xref{Function Attributes}. + ++Note that @option{-mcmodel=large} is incompatible with ++@option{-mfunction-return=thunk} nor ++@option{-mfunction-return=thunk-extern} since the thunk function may ++not be reachable in large code model. ++ ++ + @item -mindirect-branch-register + @opindex -mindirect-branch-register + Force indirect call and jump via register. diff --git a/gcc5/patches/gcc-no_fixincludes.diff b/gcc5/patches/gcc-no_fixincludes.diff new file mode 100644 index 0000000..52b6616 --- /dev/null +++ b/gcc5/patches/gcc-no_fixincludes.diff @@ -0,0 +1,27 @@ +--- ./gcc/Makefile.in.orig 2010-04-02 02:49:06.000000000 -0500 ++++ ./gcc/Makefile.in 2010-08-01 16:55:30.088318841 -0500 +@@ -3864,9 +3864,9 @@ + chmod a+r $${fix_dir}/limits.h; \ + done + # Install the README +- rm -f include-fixed/README +- cp $(srcdir)/../fixincludes/README-fixinc include-fixed/README +- chmod a+r include-fixed/README ++# rm -f include-fixed/README ++# cp $(srcdir)/../fixincludes/README-fixinc include-fixed/README ++# chmod a+r include-fixed/README + $(STAMP) $@ + + .PHONY: install-gcc-tooldir +@@ -3947,10 +3947,7 @@ + (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \ + SHELL='$(SHELL)'; MACRO_LIST=`${PWD_COMMAND}`/macro_list ; \ + gcc_dir=`${PWD_COMMAND}` ; \ +- export TARGET_MACHINE srcdir SHELL MACRO_LIST && \ +- cd $(build_objdir)/fixincludes && \ +- $(SHELL) ./fixinc.sh "$${gcc_dir}/$${fix_dir}" \ +- $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \ ++ export TARGET_MACHINE srcdir SHELL MACRO_LIST ); \ + rm -f $${fix_dir}/syslimits.h; \ + if [ -f $${fix_dir}/limits.h ]; then \ + mv $${fix_dir}/limits.h $${fix_dir}/syslimits.h; \ diff --git a/gcc5/patches/gcc.66782.diff b/gcc5/patches/gcc.66782.diff new file mode 100644 index 0000000..0743f88 --- /dev/null +++ b/gcc5/patches/gcc.66782.diff @@ -0,0 +1,124 @@ +Index: config/i386/i386.md +=================================================================== +--- config/i386/i386.md (revision 225539) ++++ config/i386/i386.md (working copy) +@@ -108,6 +108,7 @@ + UNSPEC_LD_MPIC ; load_macho_picbase + UNSPEC_TRUNC_NOOP + UNSPEC_DIV_ALREADY_SPLIT ++ UNSPEC_MS_TO_SYSV_CALL + UNSPEC_PAUSE + UNSPEC_LEA_ADDR + UNSPEC_XBEGIN_ABORT +@@ -11584,6 +11585,15 @@ + "* return ix86_output_call_insn (insn, operands[0]);" + [(set_attr "type" "call")]) + ++(define_insn "*call_rex64_ms_sysv" ++ [(match_parallel 2 "call_rex64_ms_sysv_operation" ++ [(call (mem:QI (match_operand:DI 0 "call_insn_operand" "rBwBz")) ++ (match_operand 1)) ++ (unspec [(const_int 0)] UNSPEC_MS_TO_SYSV_CALL)])] ++ "TARGET_64BIT && !SIBLING_CALL_P (insn)" ++ "* return ix86_output_call_insn (insn, operands[0]);" ++ [(set_attr "type" "call")]) ++ + (define_insn "*sibcall" + [(call (mem:QI (match_operand:W 0 "sibcall_insn_operand" "UBsBz")) + (match_operand 1))] +@@ -11808,6 +11818,16 @@ + (match_dup 3))) + (unspec [(const_int 0)] UNSPEC_PEEPSIB)])]) + ++(define_insn "*call_value_rex64_ms_sysv" ++ [(match_parallel 3 "call_rex64_ms_sysv_operation" ++ [(set (match_operand 0) ++ (call (mem:QI (match_operand:DI 1 "call_insn_operand" "rBwBz")) ++ (match_operand 2))) ++ (unspec [(const_int 0)] UNSPEC_MS_TO_SYSV_CALL)])] ++ "TARGET_64BIT && !SIBLING_CALL_P (insn)" ++ "* return ix86_output_call_insn (insn, operands[1]);" ++ [(set_attr "type" "callv")]) ++ + (define_expand "call_value_pop" + [(parallel [(set (match_operand 0) + (call (match_operand:QI 1) +Index: config/i386/predicates.md +=================================================================== +--- config/i386/predicates.md (revision 225533) ++++ config/i386/predicates.md (working copy) +@@ -616,6 +616,36 @@ + && XINT (XEXP (op, 0), 1) == UNSPEC_GOTPCREL); + }) + ++;; Return true if OP is a call from MS ABI to SYSV ABI function. ++(define_predicate "call_rex64_ms_sysv_operation" ++ (match_code "parallel") ++{ ++ unsigned creg_size = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers); ++ unsigned i; ++ ++ if ((unsigned) XVECLEN (op, 0) != creg_size + 2) ++ return false; ++ ++ for (i = 0; i < creg_size; i++) ++ { ++ rtx elt = XVECEXP (op, 0, i+2); ++ enum machine_mode mode; ++ unsigned regno; ++ ++ if (GET_CODE (elt) != CLOBBER ++ || GET_CODE (SET_DEST (elt)) != REG) ++ return false; ++ ++ regno = x86_64_ms_sysv_extra_clobbered_registers[i]; ++ mode = SSE_REGNO_P (regno) ? TImode : DImode; ++ ++ if (GET_MODE (SET_DEST (elt)) != mode ++ || REGNO (SET_DEST (elt)) != regno) ++ return false; ++ } ++ return true; ++}) ++ + ;; Match exactly zero. + (define_predicate "const0_operand" + (match_code "const_int,const_wide_int,const_double,const_vector") +Index: config/i386/i386.c +=================================================================== +--- config/i386/i386.c (revision 225533) ++++ config/i386/i386.c (working copy) +@@ -25639,7 +25639,9 @@ + rtx callarg2, + rtx pop, bool sibcall) + { +- rtx vec[3]; ++ unsigned int const cregs_size ++ = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers); ++ rtx vec[3 + cregs_size]; + rtx use = NULL, call; + unsigned int vec_len = 0; + +@@ -25742,16 +25744,18 @@ + if (TARGET_64BIT_MS_ABI + && (!callarg2 || INTVAL (callarg2) != -2)) + { +- int const cregs_size +- = ARRAY_SIZE (x86_64_ms_sysv_extra_clobbered_registers); +- int i; ++ unsigned i; + ++ vec[vec_len++] = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, const0_rtx), ++ UNSPEC_MS_TO_SYSV_CALL); ++ + for (i = 0; i < cregs_size; i++) + { + int regno = x86_64_ms_sysv_extra_clobbered_registers[i]; + machine_mode mode = SSE_REGNO_P (regno) ? TImode : DImode; + +- clobber_reg (&use, gen_rtx_REG (mode, regno)); ++ vec[vec_len++] ++ = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (mode, regno)); + } + } + diff --git a/gcc5/patches/gcc.69140.diff b/gcc5/patches/gcc.69140.diff new file mode 100644 index 0000000..ace60eb --- /dev/null +++ b/gcc5/patches/gcc.69140.diff @@ -0,0 +1,13 @@ +--- ./gcc/config/i386/i386.c.orig 2015-11-18 09:45:26.000000000 -0600 ++++ ./gcc/config/i386/i386.c 2016-02-05 13:50:07.202981920 -0600 +@@ -9677,6 +9677,10 @@ + if (TARGET_64BIT_MS_ABI && get_frame_size () > SEH_MAX_FRAME_SIZE) + return true; + ++ /* SSE saves require frame-pointer when stack is misaligned. */ ++ if (TARGET_64BIT_MS_ABI && ix86_incoming_stack_boundary < 128) ++ return true; ++ + /* In ix86_option_override_internal, TARGET_OMIT_LEAF_FRAME_POINTER + turns off the frame pointer by default. Turn it back on now if + we've not got a leaf function. */ diff --git a/gcc5/patches/glibc2.28-ustat.diff b/gcc5/patches/glibc2.28-ustat.diff new file mode 100644 index 0000000..c7d71d0 --- /dev/null +++ b/gcc5/patches/glibc2.28-ustat.diff @@ -0,0 +1,31 @@ +--- libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc 2018/04/25 07:39:32 259630 ++++ libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc 2018/05/24 20:07:25 260687 +@@ -138,7 +138,6 @@ + # include + #endif + #include +-#include + #include + #include + #include +@@ -231,7 +230,19 @@ + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD + + #if SANITIZER_LINUX && !SANITIZER_ANDROID +- unsigned struct_ustat_sz = sizeof(struct ustat); ++ // Use pre-computed size of struct ustat to avoid which ++ // has been removed from glibc 2.28. ++#if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \ ++ || defined(__powerpc64__) || defined(__arch64__) || defined(__sparcv9) \ ++ || defined(__x86_64__) ++#define SIZEOF_STRUCT_USTAT 32 ++#elif defined(__arm__) || defined(__i386__) || defined(__mips__) \ ++ || defined(__powerpc__) || defined(__s390__) ++#define SIZEOF_STRUCT_USTAT 20 ++#else ++#error Unknown size of struct ustat ++#endif ++ unsigned struct_ustat_sz = SIZEOF_STRUCT_USTAT; + unsigned struct_rlimit64_sz = sizeof(struct rlimit64); + unsigned struct_statvfs64_sz = sizeof(struct statvfs64); + #endif // SANITIZER_LINUX && !SANITIZER_ANDROID diff --git a/gcc5/patches/glibc2.30-ipc_perm.diff b/gcc5/patches/glibc2.30-ipc_perm.diff new file mode 100644 index 0000000..d1a75dd --- /dev/null +++ b/gcc5/patches/glibc2.30-ipc_perm.diff @@ -0,0 +1,12 @@ +--- libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h 2020-02-28 11:49:29.763277856 +0000 ++++ libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h 2020-02-28 11:49:45.092909823 +0000 +@@ -198,8 +198,7 @@ + unsigned long long __unused1; + unsigned long long __unused2; + #else +- unsigned short mode; +- unsigned short __pad1; ++ unsigned int mode; + unsigned short __seq; + unsigned short __pad2; + #if defined(__x86_64__) && !defined(_LP64) \ No newline at end of file diff --git a/gcc5/patches/kernel-5.12.diff b/gcc5/patches/kernel-5.12.diff new file mode 100644 index 0000000..fb2c7e5 --- /dev/null +++ b/gcc5/patches/kernel-5.12.diff @@ -0,0 +1,37 @@ +(this patch has to be applied after the glibc-2.28 one) + +diff -Naur gcc-5.5.0.orig/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc gcc-5.5.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc +--- gcc-5.5.0.orig/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc 2021-08-19 12:21:14.786000000 +0200 ++++ gcc-5.5.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc 2021-08-19 12:22:30.135000000 +0200 +@@ -138,7 +138,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -387,7 +386,6 @@ + + #if SANITIZER_LINUX && !SANITIZER_ANDROID + unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct); +- unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor); + #if EV_VERSION > (0x010000) + unsigned struct_input_keymap_entry_sz = sizeof(struct input_keymap_entry); + #else +@@ -754,15 +752,6 @@ + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD + + #if SANITIZER_LINUX && !SANITIZER_ANDROID +- unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH; +- unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT; +- unsigned IOCTL_CYGETMON = CYGETMON; +- unsigned IOCTL_CYGETTHRESH = CYGETTHRESH; +- unsigned IOCTL_CYGETTIMEOUT = CYGETTIMEOUT; +- unsigned IOCTL_CYSETDEFTHRESH = CYSETDEFTHRESH; +- unsigned IOCTL_CYSETDEFTIMEOUT = CYSETDEFTIMEOUT; +- unsigned IOCTL_CYSETTHRESH = CYSETTHRESH; +- unsigned IOCTL_CYSETTIMEOUT = CYSETTIMEOUT; + unsigned IOCTL_EQL_EMANCIPATE = EQL_EMANCIPATE; + unsigned IOCTL_EQL_ENSLAVE = EQL_ENSLAVE; + unsigned IOCTL_EQL_GETMASTRCFG = EQL_GETMASTRCFG; diff --git a/gcc5/profile.d/gcc5.csh b/gcc5/profile.d/gcc5.csh new file mode 100644 index 0000000..25f9dc1 --- /dev/null +++ b/gcc5/profile.d/gcc5.csh @@ -0,0 +1,7 @@ +setenv CC gcc-5 +setenv CPP cpp-5 +setenv CXX g++-5 +setenv AR gcc-ar-5 +setenv NM gcc-nm-5 +setenv RANLIB gcc-ranlib-5 + diff --git a/gcc5/profile.d/gcc5.sh b/gcc5/profile.d/gcc5.sh new file mode 100644 index 0000000..7143b5d --- /dev/null +++ b/gcc5/profile.d/gcc5.sh @@ -0,0 +1,7 @@ +export CC=gcc-5 +export CPP=cpp-5 +export CXX=g++-5 +export AR=gcc-ar-5 +export NM=gcc-nm-5 +export RANLIB=gcc-ranlib-5 + diff --git a/gcc5/slack-desc b/gcc5/slack-desc new file mode 100644 index 0000000..dbf4827 --- /dev/null +++ b/gcc5/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' on +# the right side marks the last column you can put a character in. You must make +# exactly 11 lines for the formatting to be correct. It's also customary to +# leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +gcc5: gcc5 (Co-installable GCC-5 package with C, C++ and Java support) +gcc5: +gcc5: GCC is the GNU Compiler Collection. +gcc5: +gcc5: This package contains those parts of the compiler collection needed to +gcc5: compile C and C++ code and programs written in the Java programming +gcc5: language.@MULTILIB@ +gcc5: +gcc5: This gcc5 package must be co-installed with Slackware's gcc11 compiler +gcc5: +gcc5: diff --git a/gitea/README b/gitea/README new file mode 100644 index 0000000..0db2444 --- /dev/null +++ b/gitea/README @@ -0,0 +1,25 @@ +Gitea - Git with a cup of tea + +Gitea is a painless self-hosted Git service. It is similar to GitHub, +Bitbucket, and GitLab. Gitea is a fork of Gogs. + +The goal of this project is to provide the easiest, fastest, and most painless +way of setting up a self-hosted Git service. With Go, this can be done with an +independent binary distribution across all platforms and architectures that Go +supports. This support includes Linux, macOS, and Windows, on architectures +like amd64, i386, ARM, PowerPC, and others. + +In order to run gitea you should create user named git (for example) and +adjust configs according selected username. + +groupadd -g 5001 git +useradd -u 5001 -d /var/lib/git -s /bin/bash -g git git + +Git requires valid shell to operate properly, so in sshd config you should +disable password-less login. Ideally allow only certificate authrized logins +via ssh. + +Don't forget to set long enough random complex password for this user and +forget it immediately. + +Also never give this user full sudo privileges. diff --git a/gitea/doinst.sh b/gitea/doinst.sh new file mode 100644 index 0000000..46283b4 --- /dev/null +++ b/gitea/doinst.sh @@ -0,0 +1,28 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +config etc/gitea/gitea.ini.new +config etc/default/gitea.new +config etc/rc.d/rc.gitea.new +config etc/logrotate.d/gitea.new diff --git a/gitea/gitea.SlackBuild b/gitea/gitea.SlackBuild new file mode 100644 index 0000000..3a08aa2 --- /dev/null +++ b/gitea/gitea.SlackBuild @@ -0,0 +1,127 @@ +#!/bin/sh + +# Slackware build script for gitea + +# Copyright 2020 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM="gitea" +VERSION="${VERSION:-1.20.4}" +BUILD="${BUILD:-1}" +TAG="${TAG:-_EXs}" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH="i586" ;; + arm*) ARCH="arm" ;; + *) ARCH="$( uname -m )" ;; + esac +fi + +CWD="$(pwd)" +TMP="${TMP:-/tmp/EXs}" +PKG="$TMP/package-$PRGNAM" +OUTPUT="${OUTPUT:-/tmp}" + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +USERNAME=${USERNAME:-git} +GROUPNAME=${GROUPNAME:-git} +USERID=${USERID:-5001} +GROUPID=${GROUPID:-5001} +HOMEDIR=${HOMEDIR:-/var/lib/git} +SHELLNAME=${SHELLNAME:-/bin/bash} + +GETUSER=$(getent passwd $USERNAME) +GETGROUP=$(getent group $GROUPNAME) + +set -e + +if [ -z "$GETUSER" -o -z "$GETGROUP" ]; then + printf "\n You must have a \"$PRGNAM\" user and a group to run this script\n\n" + [ -z "$GETGROUP" ] && printf " # groupadd -g $GROUPID $GROUPNAME\n" + [ -z "$GETUSER" ] && printf " # useradd -u $USERID -d $HOMEDIR -s $SHELLNAME -g $GROUPNAME $USERNAME\n" + printf "\n" + exit 1 +fi + +rm -rf "$PKG" +mkdir -p "$TMP" "$PKG" "$OUTPUT" +cd "$TMP" +rm -rf "$PRGNAM-$VERSION" +tar xvf "$CWD/$PRGNAM-src-$VERSION.tar.gz" +cd "$PRGNAM-src-$VERSION" +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +export TAGS="bindata sqlite sqlite_unlock_notify pgsql mysql mysql8 redis" +export LDFLAGS="-X 'code.gitea.io/gitea/modules/setting.CustomPath=/var/lib/gitea/custom'\ + -X 'code.gitea.io/gitea/modules/setting.CustomConf=/etc/gitea/gitea.ini'\ + -X 'code.gitea.io/gitea/modules/setting.AppWorkPath=/var/lib/gitea'" +make generate +make + +install -Dpm 0755 gitea "$PKG/usr/sbin/gitea" +install -Dpm 0644 "$CWD/gitea.ini" "$PKG/etc/gitea/gitea.ini.new" + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +install -Dpm 0644 "$CWD/gitea.init" "$PKG/etc/rc.d/rc.gitea.new" +install -Dpm 0644 "$CWD/gitea.sysconfig" "$PKG/etc/default/gitea.new" +install -Dpm 0644 "$CWD/gitea.logrotate" "$PKG/etc/logrotate.d/gitea.new" + +for file in CHANGELOG.md CONTRIBUTING.md LICENSE README.md; do + install -Dpm 0644 "$file" "${PKG}/usr/doc/${PRGNAM}-${VERSION}/${file}" +done + +install -dm 0755 -o "${USERNAME}" -g "${GROUPNAME}" "$PKG/var/lib/gitea" +install -dm 0755 -o "${USERNAME}" -g "${GROUPNAME}" "$PKG/var/lib/gitea/custom" +install -dm 0755 -o "${USERNAME}" -g "${GROUPNAME}" "$PKG/var/log/gitea" +install -dm 0755 -o "${USERNAME}" -g "${GROUPNAME}" "$PKG/var/run/gitea" + +install -Dpm 0644 "$CWD/$PRGNAM.SlackBuild" "$PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild" + +pushd "$CWD" + for file in slack-desc slack-required doinst.sh; do + install -Dpm 0644 "$file" "$PKG/install/$file" + done +popd + +cd "$PKG" +/sbin/makepkg -l y -c n "$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}" + +# vim: ft=sh noet ai ts=4 sw=4 sts=4: diff --git a/gitea/gitea.info b/gitea/gitea.info new file mode 100644 index 0000000..f45dfa0 --- /dev/null +++ b/gitea/gitea.info @@ -0,0 +1,10 @@ +PRGNAM="gitea" +VERSION="1.20.4" +HOMEPAGE="https://github.com/go-gitea/gitea" +DOWNLOAD="https://dl.gitea.com/gitea/1.20.4/gitea-src-1.20.4.tar.gz" +MD5SUM="e4acf5caa7f787545a80d225204a5242" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +BUILD_REQUIRES="google-go-lang nodejs" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/gitea/gitea.ini b/gitea/gitea.ini new file mode 100644 index 0000000..b57caac --- /dev/null +++ b/gitea/gitea.ini @@ -0,0 +1,177 @@ +APP_NAME = Gitea +RUN_USER = git +RUN_MODE = prod + +[repository] +ROOT = /var/lib/git +DEFAULT_BRANCH = master + +[repository.pull-request] + +[repository.issue] + +[repository.signing] + +[cors] + +[ui] + +[ui.admin] + +[ui.notification] + +[markdown] + +[server] +PROTOCOL = http +DOMAIN = localhost +ROOT_URL = http://localhost/ +HTTP_ADDR = 127.0.0.1 +HTTP_PORT = 3000 +SSH_DOMAIN = localhost +LOCAL_ROOT_URL = http://localhost/ +DISABLE_SSH = false +SSH_PORT = 22 +STATIC_ROOT_PATH = ./git +LANDING_PAGE = explore +SSH_ROOT_PATH = /var/lib/git/.ssh + +[database] +DB_TYPE = sqlite3 +HOST = +NAME = gitea +USER = gitea +PASSWD = +SSL_MODE = disable +PATH = /var/lib/gitea/data/gitea.db +LOG_SQL = false + +[indexer] + +[queue] + +[admin] + +[security] +INSTALL_LOCK = true +SECRET_KEY = PPNRXQ6Mosal0niF6bR2b3Et7fG6RqPDgFHMMJlMYWXNfCz0odgNj7KNby89KLsO +LOGIN_REMEMBER_DAYS = 30 +ONLY_ALLOW_PUSH_IF_GITEA_ENVIRONMENT_SET = true +INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE1NDk1NTQ5NjV9.liHgDqe12-bRR5kEw1YNrCMtI4mghBeAm9PNDWkc7Kw + +[openid] +ENABLE_OPENID_SIGNIN = false +ENABLE_OPENID_SIGNUP = false + +[service] +REGISTER_EMAIL_CONFIRM = false +DISABLE_REGISTRATION = true +REQUIRE_SIGNIN_VIEW = false +ENABLE_NOTIFY_MAIL = false +ENABLE_BASIC_AUTHENTICATION = true +ENABLE_REVERSE_PROXY_AUTHENTICATION = false +ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false +ENABLE_REVERSE_PROXY_EMAIL = false +ENABLE_CAPTCHA = false +REQUIRE_EXTERNAL_REGISTRATION_CAPTCHA = false +CAPTCHA_TYPE = image +DEFAULT_ENABLE_DEPENDENCIES = true +ALLOW_CROSS_REPOSITORY_DEPENDENCIES = true +ENABLE_USER_HEATMAP = true +SHOW_REGISTRATION_BUTTON = false +SHOW_MILESTONES_DASHBOARD_PAGE = true +AUTO_WATCH_NEW_REPOS = false +AUTO_WATCH_ON_CHANGES = false +DEFAULT_ORG_VISIBILITY = public +DEFAULT_ORG_MEMBER_VISIBLE = true +ALLOW_ONLY_EXTERNAL_REGISTRATION = false +DEFAULT_KEEP_EMAIL_PRIVATE = false +DEFAULT_ALLOW_CREATE_ORGANIZATION = false +DEFAULT_ENABLE_TIMETRACKING = false +NO_REPLY_ADDRESS = noreply.localhost + +[webhook] +SKIP_TLS_VERIFY = true + +[mailer] +ENABLED = true +DISABLE_HELO = false +HELO_HOSTNAME = localhost +HOST = localhost +IS_TLS_ENABLED = false +FROM = gitea@localhost +USER = root +PASSWD = +SKIP_VERIFY = true +MAILER_TYPE = smtp + +[cache] +ENABLED = true +ADAPTER = memory + +[cache.last_commit] +ENABLED = true + +[session] +PROVIDER = memory +COOKIE_SECURE = false +ENABLE_SET_COOKIE = true + +[picture] +DISABLE_GRAVATAR = true +ENABLE_FEDERATED_AVATAR = false + +[attachment] +ENABLED = false + +[log] +MODE = file +LEVEL = Warn +STACKTRACE_LEVEL = None +ROUTER_LOG_LEVEL = Warn +ROOT_PATH = /var/log/gitea +ENABLE_ACCESS_LOG = false +ACCESS = file +ENABLE_XORM_LOG = false +DISABLE_ROUTER_LOG = true + +[cron] + +[cron.archive_cleanup] + +[cron.update_mirrors] + +[cron.repo_health_check] + +[cron.check_repo_stats] + +[cron.update_migration_poster_id] + +[git] + +[git.timeout] + +[metrics] +ENABLED = false + +[api] +ENABLE_SWAGGER = false + +[oauth2] +ENABLE = false + +[i18n] + +[U2F] + +[time] +FORMAT = RFC1123 + +[task] + +[migrations] + +[other] +SHOW_FOOTER_VERSION = false +SHOW_FOOTER_TEMPLATE_LOAD_TIME = false +SHOW_FOOTER_BRANDING = false diff --git a/gitea/gitea.init b/gitea/gitea.init new file mode 100644 index 0000000..ee27689 --- /dev/null +++ b/gitea/gitea.init @@ -0,0 +1,92 @@ +#!/bin/sh +# Start/stop/restart Gitea daemon. + +. /etc/default/gitea + +__start() { + echo "Starting Gitea daemon: /usr/sbin/gitea" + + if [ -z $GITEAUSER ]; then + echo "Please set user to run gitea as, usually, git" + exit 1 + fi + + getent passwd $GITEAUSER 1>/dev/null 2>/dev/null + + if [ $? != 0 ]; then + echo "No user $GITEAUSER mentioned in /etc/default/gitea" + exit 1 + fi + + if [ -z "$PIDFILE" ]; then + echo "Please set PIDFILE in /etc/default/gitea" + exit 1 + fi + + if [ ! -d $(dirname $PIDFILE) ]; then + mkdir -p $(dirname $PIDFILE) + chown -R $GITEAUSER:root $(dirname $PIDFILE) + fi + + if [ -z "$CONFIG" ]; then + echo "Please set full path to gitea config in /etc/default/gitea" + exit 1 + fi + + if [ -f "$PIDFILE" ]; then + echo "Gitea daemon is already running as PID $(< ${PIDFILE}) " >&2 + exit 3 + fi + + if [ ! -d $(dirname $PIDFILE) ]; then + install -d -m 0755 -o $GITEAUSER "$(basename $PIDFILE)" + fi + + if [ ! -d $(dirname $LOG) ]; then + mkdir -p $(dirname $LOG) + fi + + chown -R $GITEAUSER "$(dirname $LOG)" + + exec sudo -b -u $GITEAUSER -- /usr/sbin/gitea web \ + --config "$CONFIG" \ + --pid "$PIDFILE" \ + --custom-path "$CUSTOMDIR" \ + --work-path "$WORKDIR" >> /dev/null 2>&1 +} + +__stop() { + # do you know not so racy way here? + if [ -f "$PIDFILE" ]; then + kill $(cat ${PIDFILE}) + rm -f "${PIDFILE}" + else + echo "Gitea daemon is not running" + fi +} + +__restart() { + __stop + # pidfile being deleted immediately after sending SIGTERM to gitea process + # so we have to wait 'till it leave network socket alone + sleep 3 + __start +} + + +case "$1" in + 'start') + __start + ;; + 'stop') + __stop + ;; + 'restart') + __restart + ;; + *) + echo "usage $0 start|stop|restart" + exit 2 +esac + +# vim: ft=sh noet ai ts=4 sw=4 sts=4: diff --git a/gitea/gitea.logrotate b/gitea/gitea.logrotate new file mode 100644 index 0000000..e0acd84 --- /dev/null +++ b/gitea/gitea.logrotate @@ -0,0 +1,6 @@ +/var/log/gitea/*.log { + daily + rotate 7 + compress + missingok +} diff --git a/gitea/gitea.sysconfig b/gitea/gitea.sysconfig new file mode 100644 index 0000000..1394535 --- /dev/null +++ b/gitea/gitea.sysconfig @@ -0,0 +1,17 @@ +# run as user +GITEAUSER=git + +# path to config +CONFIG=/etc/gitea/gitea.ini + +# Custom dir path +CUSTOMDIR=/var/lib/gitea/custom + +# Working dir, where data is stored +WORKDIR=/var/lib/gitea + +# Pid file of gitea +PIDFILE=/var/run/gitea/gitea.pid + +# Log to +LOG=/var/log/gitea/gitea.log diff --git a/gitea/slack-desc b/gitea/slack-desc new file mode 100644 index 0000000..9ad39f5 --- /dev/null +++ b/gitea/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +gitea: gitea (A painless self-hosted Git service.) +gitea: +gitea: Gitea is a painless self-hosted Git service. It is similar to GitHub, +gitea: Bitbucket, and GitLab. Gitea is a fork of Gogs. +gitea: The goal of this project is to provide the easiest, fastest, and most +gitea: painless way of setting up a self-hosted Git service. With Go, this +gitea: can be done with an independent binary distribution across all +gitea: platforms and architectures that Go supports. This support includes +gitea: Linux, macOS, and Windows, on architectures like amd64, i386, ARM, +gitea: PowerPC, and others. +gitea: Home: https://gitea.io/ diff --git a/gitea/slack-required b/gitea/slack-required new file mode 100644 index 0000000..c024739 --- /dev/null +++ b/gitea/slack-required @@ -0,0 +1 @@ +daemonize diff --git a/google-go-lang/README b/google-go-lang/README new file mode 100644 index 0000000..1c1d8bf --- /dev/null +++ b/google-go-lang/README @@ -0,0 +1,55 @@ +The Go programming language is an open source project to make programmers more +productive. Go is expressive, concise, clean, and efficient. Its concurrency +mechanisms make it easy to write programs that get the most out of multicore and +networked machines, while its novel type system enables flexible and modular +program construction. Go compiles quickly to machine code yet has the +convenience of garbage collection and the power of run-time reflection. It's a +fast, statically typed, compiled language that feels like a dynamically typed, +interpreted language. + +The tools are added to the path by putting go.sh and go.csh files in +/etc/profile.d and letting the system's /etc/profile or /etc/csh.login pick it +up. If you want to add any of Go's environment variables you can add them +there. + +Also, to easily setup a user-independent path for Go libraries to be installed +to and used, is the GOPATH environment variable. This variable can be colon +delimited. For example, once installing the built google-go-lang package, then +set in your user's ~/.bashrc something like: + + export GOPATH="$HOME" + +Then, you'll be able to use the `go` command to install an additional library +that will not need root permission and will be in the compiler's path. +Like so: + + go get golang.org/x/tools/cmd/godoc + +Now in ~/src you'll have this source code checked-out, and a binary built at +~/bin/godoc + +Since the golang idiom is very `go get'able as a limited user, installed +libraries from slackbuilds.org are located outside of GOROOT (which is only for +golang standard library), in /usr/share/gocode +By not setting a system-wide GOPATH defaulting to this location, then it is up +to the user of whether to include this system path as well, like: + + export GOPATH="$HOME:/usr/share/gocode" + +This system source directory is primarly only for buildtime of slackbuilds. + +This is because `go get' iterates through the paths provided, looking for +matching imports. If a match is not found, then is cloned to the first path +provided. You would not want this to be a system path, as to need root +privilege to clone source. + +As of go1.2, the 'go doc ...' command has been relocated to the go.tools +library (golang-googlecode-gotools), which provide `godoc`. + +As of go1.5, shared libraries are now supported. The flags to use linking are +available for `go get`, `go install` and `go build`. +To learn more see `go help buildmode`. + + +To run the buildtime tests of this package, provide the environment variable +RUN_TEST=true at build time. diff --git a/google-go-lang/google-go-lang.SlackBuild b/google-go-lang/google-go-lang.SlackBuild new file mode 100644 index 0000000..767c24f --- /dev/null +++ b/google-go-lang/google-go-lang.SlackBuild @@ -0,0 +1,158 @@ +#!/bin/sh + +# Slackware build script for google-go-lang + +# Written by Eric Schultz eric at schultzter.ca +# Taken over by Vincent Batts vbatts@hashbangbash.com +# Picked by Sergei Fedosoff + +# Copyright (c) 2021 Sergei Fedosoff +# Copyright (c) 2012, 2013, 2014, 2015, 2016, 2017, 2018 Vincent Batts +# Copyright (c) 2012 Eric Schultz +# +# 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. + +PRGNAM=google-go-lang +VERSION=${VERSION:-1.21.4} +BOOTSTRAP_VERSION=1.18.10 +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +RELEASE=${RELEASE:-linux} + +RUN_TEST=${RUN_TEST:-false} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ "$ARCH" = "i586" ]; then + LIBDIRSUFFIX="" + GOARCH="386" +elif [ "$ARCH" = "x86_64" ]; then + LIBDIRSUFFIX="64" + GOARCH="amd64" +elif [ "$ARCH" = "arm" ]; then + LIBDIRSUFFIX="" + GOARCH="arm" + export GOARM="6" # can be '5' as well, to use soft float instead of hardware +else + LIBDIRSUFFIX="" + GOARCH=386 +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} +BOOTSTRAP_DIR="${TMP}/bootstrap-go${BOOTSTRAP_VERSION}" + +set -e + +rm -rf $PKG +mkdir -p "$BOOTSTRAP_DIR" $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION} $OUTPUT +cd "$BOOTSTRAP_DIR" +tar xf $CWD/go${BOOTSTRAP_VERSION}.src.tar.gz +cd go +chown -R root:root . +cd $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION} +tar xf $CWD/go${VERSION}.src.tar.gz +cd go +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +# as of >= go1.5, the cross-compiler does not need to be bootstrap, so the +# compiler need only be compiled for the host OS, which it detects +unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED + +# Now go requires at least 1.17.something api to build, so we have to bootstrap bootstrap compiler +cd "${BOOTSTRAP_DIR}/go" +export GOROOT_BOOTSTRAP="/usr" # gcc 5+ is go1.4 API, so we'll bootstrap with it +export GOROOT="$(pwd)" +export GOROOT_FINAL="${BOOTSTRAP_DIR}/go" +cd src +LC_ALL=C ./make.bash +$GOROOT/bin/go install std + +# Time to build target compiler +export PATH="${TMP}/bootstrap-go/go/bin:${PATH}" +cd "$PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go" +unset GOBIN GOPATH GOOS GOARCH CGO_ENABLED +export GOROOT_BOOTSTRAP="$BOOTSTRAP_DIR/go" +export GOROOT="$(pwd)" +export GOROOT_FINAL="/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go" +export GO_LDFLAGS="-s -w" +export GO_GCFLAGS="-trimpath" + +cd src + +if [ "${RUN_TEST}" = "true" ] ; then + LC_ALL=C \ + ./all.bash +else + LC_ALL=C \ + ./make.bash +fi + +# As of go1.5, golang supports shared libraries, so generate them for use. +$GOROOT/bin/go install -buildmode=shared std + +cd .. + +# remove Go build cache +rm -rf pkg/obj/go-build/* + +# remove the doc Makefile +rm -f doc/Makefile + +# Put the profile scripts for setting PATH and env variables +mkdir -p $PKG/etc/profile.d +cat > $PKG/etc/profile.d/go.csh << EOF +#!/bin/csh +setenv GOROOT ${GOROOT_FINAL} +setenv PATH \${GOROOT}/bin:\${PATH} +EOF +cat > $PKG/etc/profile.d/go.sh << EOF +#!/bin/sh +export GOROOT="${GOROOT_FINAL}" +export PATH="\${GOROOT}/bin:\${PATH}" +EOF + +chmod 0755 $PKG/etc/profile.d/go.csh +chmod 0755 $PKG/etc/profile.d/go.sh + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + CONTRIBUTING.md LICENSE PATENTS README.md VERSION \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/google-go-lang/google-go-lang.info b/google-go-lang/google-go-lang.info new file mode 100644 index 0000000..5de5a22 --- /dev/null +++ b/google-go-lang/google-go-lang.info @@ -0,0 +1,10 @@ +PRGNAM="google-go-lang" +VERSION="1.21.1" +HOMEPAGE="https://go.dev/" +DOWNLOAD="https://go.dev/dl/go1.18.10.src.tar.gz https://go.dev/dl/go1.21.1.src.tar.gz" +MD5SUM="002b4daec72ab396dc023a5ec445a68a 00ef7b2f4c47990c37dd60bd15fa8c0f" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/google-go-lang/slack-desc b/google-go-lang/slack-desc new file mode 100644 index 0000000..84d7e1d --- /dev/null +++ b/google-go-lang/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +google-go-lang: google-go-lang (Google's Go Language kit with gc tool chain) +google-go-lang: +google-go-lang: The Go programming language is an open source project to make +google-go-lang: programmers more productive. Go is expressive, concise, clean, and +google-go-lang: efficient. Its concurrency mechanisms make it easy to write programs +google-go-lang: that get the most out of multicore and networked machines, while its +google-go-lang: novel type system enables flexible and modular program construction. +google-go-lang: +google-go-lang: +google-go-lang: +google-go-lang: diff --git a/hackrf/README b/hackrf/README new file mode 100644 index 0000000..6f72155 --- /dev/null +++ b/hackrf/README @@ -0,0 +1,9 @@ +This is the host software for hackrf, a project to produce +a low cost, open source software radio platform. + +Below are some paramaters that can be passed to the slackbuild +to turn on some optional components. + +RULES=yes|no (Default is no) In order to be able to use the +dongle as a non-root user, you may install the appropriate +udev rules diff --git a/hackrf/hackrf.SlackBuild b/hackrf/hackrf.SlackBuild new file mode 100755 index 0000000..bf6b408 --- /dev/null +++ b/hackrf/hackrf.SlackBuild @@ -0,0 +1,120 @@ +#!/bin/bash + +# Slackware build script for hackrf + +# Copyright 2015-2018 Panagiotis Nikolaou, Culver City, CA +# Copyright 2023 pyllyukko +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=hackrf +VERSION=${VERSION:-2023.01.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC -mfpmath=sse -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2 -mavx -mavx2" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT + +# Use the dongle as a non-root user. +if [ "${RULES:-no}" == "yes" ]; then + OPT1="$OPT -DINSTALL_UDEV_RULES=ON" +fi + +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.xz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +cd host +sed -i "s|lib/pkgconfig|lib${LIBDIRSUFFIX}/pkgconfig|" libhackrf/CMakeLists.txt +mkdir -p build +cd build +cmake \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS -rdynamic" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS -rdynamic" \ + -DCMAKE_LINK_FLAGS:STRING="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + $OPT1 \ + -DCMAKE_BUILD_TYPE=Release \ + -DLIB_SUFFIX=$LIBDIRSUFFIX .. + +make -j$(nproc) +make install DESTDIR=$PKG +cd ../.. + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a CODE_OF_CONDUCT.md RELEASENOTES Readme.md COPYING $PKG/usr/doc/$PRGNAM-$VERSION + +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/hackrf/hackrf.info b/hackrf/hackrf.info new file mode 100644 index 0000000..12e7d61 --- /dev/null +++ b/hackrf/hackrf.info @@ -0,0 +1,10 @@ +PRGNAM="hackrf" +VERSION="2023.01.1" +HOMEPAGE="https://github.com/mossmann/hackrf" +DOWNLOAD="https://github.com/greatscottgadgets/hackrf/releases/download/v2023.01.1/hackrf-2023.01.1.tar.xz" +MD5SUM="3f681b74fd1629c859a08b1946453fcd" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/hackrf/slack-desc b/hackrf/slack-desc new file mode 100644 index 0000000..b34786f --- /dev/null +++ b/hackrf/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +hackrf: hackrf (radio platform) +hackrf: +hackrf: HackRF, a project to produce a low cost, open source software +hackrf: radio platform. +hackrf: +hackrf: homepage: https://github.com/mossmann/hackrf +hackrf: +hackrf: +hackrf: +hackrf: +hackrf: diff --git a/hamlib/README b/hamlib/README new file mode 100644 index 0000000..8ae5de3 --- /dev/null +++ b/hamlib/README @@ -0,0 +1,46 @@ +Hamlib (the ham radio control libraries) + +Hamlib is a development effort to provide a consistent C language +interface for programmers wanting to incorporate radio controls in their +programs. Network daemons for radio and rotator control, along with +language bindings for C++, Perl, Python, TCL, and Lua are included. + +Optional language bindings + +To build either or all of the Perl, Python, or TCL bindings, pass one of +or in combination: + + PL_MOD=yes + PY_MOD=yes + TCL_MOD=yes + +to the build script. + +Optional Lua binding + +Also available are bindings for Lua 5.2 or later. As Lua 5.2 and Lua +5.3 are now available from SlackBuilds.org, once the preferred version +of Lua is installed, the Lua bindings may be built by passing: + + LUA_VER=5.2 + LUA_VER=5.3 + +to the build script. + +Optional Python3 binding (experimental) + +For those wishing to experiment with Python3 and Hamlib, bindings may be +built (exclusive of the normal Python2 bindings) by passing: + + PY3_MOD=yes + +to the build script. This option overrides PY_MOD. + +While Python allows for version 2 and 3 modules to be installed +concurrently, and while there does exist a method for doing so with +Hamlib, that has not been included in this build script at this time. +If concurrent installation is needed, please contact the build script +maintainer. + +All four bindings (either of the Python and either of the Lua versions) +may be passed to the script to enable all bindings at build time. diff --git a/hamlib/doinst.sh b/hamlib/doinst.sh new file mode 100644 index 0000000..1bef502 --- /dev/null +++ b/hamlib/doinst.sh @@ -0,0 +1,6 @@ +if [ -x /usr/bin/install-info -a -d usr/info ]; then + ( cd usr/info + rm -f dir + for i in *.info*; do /usr/bin/install-info $i dir 2>/dev/null; done + ) +fi diff --git a/hamlib/hamlib.SlackBuild b/hamlib/hamlib.SlackBuild new file mode 100755 index 0000000..f8d97eb --- /dev/null +++ b/hamlib/hamlib.SlackBuild @@ -0,0 +1,191 @@ +#!/bin/bash + +# SlackBuild script for Hamlib + +# Copyright 2010 Howard Pepper +# Copyright 2017,2018 Nate Bargmann +# Copyright 2020 JK Wood +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +# 20230630 bkw: Modified by SlackBuilds.org, BUILD=2: +# - add doinst.sh to handle /usr/info/dir. +# - rm INSTALL (compile instructions only). + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=hamlib +VERSION=${VERSION:-4.5.5} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +DOCFILES="AUTHORS COPYING COPYING.LIB ChangeLog LICENSE NEWS PLAN + README README.betatester README.developer THANKS" + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC -mfpmath=sse -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2 -mavx -mavx2" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} + -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} + + +if [ x"${PL_MOD}" = x"yes" ]; then + PERL_BINDING="--with-perl-binding" +else + PERL_BINDING="" +fi + +if { [ x"${PY_MOD}" = x"yes" ] || [ x"${PY3_MOD}" = x"yes" ]; } then + PYTHON_BINDING="--with-python-binding" + PYV=`python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)";` +else + PYTHON_BINDING="" +fi + +if [ x"${PY3_MOD}" = x"yes" ]; then + export PYTHON=`which python3` + PYV=`python3 -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)";` +fi + +if [ x"${TCL_MOD}" = x"yes" ]; then + TCL_BINDING="--with-tcl-binding" + TCLV=`echo 'puts $tcl_version;exit 0' | tclsh` +else + TCL_BINDING="" +fi + +# Only if Lua >= 5.2 installed +if { [ x"${LUA_VER}" = x"5.2" ] || [ x"${LUA_VER}" = x"5.3" ]; } then + LUA_BINDING="--with-lua-binding" + export LUA_INCLUDE="-I/usr/include/lua${LUA_VER}" + export LUA="/usr/bin/lua${LUA_VER}" +else + LUA_BINDING="" +fi + +CFLAGS="$SLKCFLAGS -rdynamic" \ +CXXFLAGS="$SLKCFLAGS -rdynamic" \ +LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --infodir=/usr/info \ + --disable-static \ + --disable-html-matrix \ + $PERL_BINDING \ + $PYTHON_BINDING \ + $TCL_BINDING \ + $LUA_BINDING + +# Fix linking when --libdir=/usr/lib64 +sed -i \ + -e '/RANLIB/s:$(libdir)/\(.*LIBNAME)\):$(libdir)/`basename \1`:g' \ + src/Makefile + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +if [ x"${PL_MOD}" = x"yes" ]; then + find $PKG -name perllocal.pod \ + -o -name ".packlist" \ + -o -name "*.bs" \ + | xargs rm -f +fi + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/ +cp -a $DOCFILES $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +if [ x"${PY_MOD}" = x"yes" ]; then + rm -f $PKG/usr/lib${LIBDIRSUFFIX}/python${PYV}/site-packages/_Hamlib.la + rm -f $PKG/usr/lib${LIBDIRSUFFIX}/python${PYV}/site-packages/Hamlib.pyo +fi + +if [ x"${PY3_MOD}" = x"yes" ]; then + rm -f $PKG/usr/lib${LIBDIRSUFFIX}/python${PYV}/site-packages/_Hamlib.la + rm -f $PKG/usr/lib${LIBDIRSUFFIX}/python${PYV}/site-packages/__pycache__/Hamlib.cpython-36.opt-1.pyc +fi + +if [ x"${TCL_MOD}" = x"yes" ]; then + rm -f $PKG/usr/lib${LIBDIRSUFFIX}/tcl${TCLV}/Hamlib/hamlibtcl.la +fi + +if { [ x"${LUA_VER}" = x"5.2" ] || [ x"${LUA_VER}" = x"5.3" ]; } then + rm -f $PKG/usr/lib${LIBDIRSUFFIX}/lua/${LUA_VER}/Hamliblua.la +fi + +rm -f $PKG/usr/lib*/*.la + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh +cat $CWD/doinst.sh > $PKG/install/douninst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/hamlib/hamlib.info b/hamlib/hamlib.info new file mode 100644 index 0000000..9fc1336 --- /dev/null +++ b/hamlib/hamlib.info @@ -0,0 +1,10 @@ +PRGNAM="hamlib" +VERSION="3.3" +HOMEPAGE="http://www.hamlib.org" +DOWNLOAD="https://sourceforge.net/projects/hamlib/files/hamlib/3.3/hamlib-3.3.tar.gz" +MD5SUM="2faa2894a61ed0ef307740aa6e3b73e4" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="JK Wood" +EMAIL="joshuakwood@gmail.com" diff --git a/hamlib/slack-desc b/hamlib/slack-desc new file mode 100644 index 0000000..1f24e02 --- /dev/null +++ b/hamlib/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +hamlib: hamlib (the ham radio control libraries) +hamlib: +hamlib: Hamlib is a development effort to provide a consistent C language +hamlib: interface for programmers wanting to incorporate radio controls in +hamlib: their programs. Language bindings for C++, Perl, Python, and TCL +hamlib: are included along with network daemons for radio and rotator +hamlib: control. +hamlib: +hamlib: Homepage: http://www.hamlib.org +hamlib: +hamlib: diff --git a/i3/README b/i3/README new file mode 100644 index 0000000..350415f --- /dev/null +++ b/i3/README @@ -0,0 +1,10 @@ +i3 is a tiling window manager, completely written from scratch. + +i3 was created because wmii, our favorite window manager at the time, +didn't provide some features we wanted (multi-monitor done right, +for example), had some bugs, didn't progress since quite some time and +wasn't easy to hack at all (source code comments/documentation completely +lacking). Still, we think the wmii developers and contributors did a +great job. Thank you for inspiring us to create i3. + +i3status is optional, but useful to provide a system status bar. diff --git a/i3/doinst.sh b/i3/doinst.sh new file mode 100644 index 0000000..78f4e66 --- /dev/null +++ b/i3/doinst.sh @@ -0,0 +1,19 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/i3/config.new +config etc/i3/config.keycodes.new + +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi diff --git a/i3/i3.SlackBuild b/i3/i3.SlackBuild new file mode 100755 index 0000000..7dbc057 --- /dev/null +++ b/i3/i3.SlackBuild @@ -0,0 +1,158 @@ +#!/bin/sh + +# Slackware build script for i3wm. + +# Written by Eugene Wissner +# Updated by Eugene Suter +# Updated by Marcin Herda +# Cleaning up docs by ponce +# Copyright 2017 - 2018 Johannes Schoepfer, Germany +# Updated by Emmanuel N. Millan, Argentina, 2019 +# Updated by Sergei Fedosoff +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=i3 +VERSION=${VERSION:-4.23} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.xz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# Configure, build, and install: +export CFLAGS="-g3 $SLKCFLAGS -flto -rdynamic" +export CXXFLAGS="-g3 $SLKCFLAGS -flto -rdynamic" +export LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" +mkdir meson-build +cd meson-build +meson setup \ + --prefix=/usr \ + --libdir=lib${LIBDIRSUFFIX} \ + --libexecdir=/usr/libexec \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --includedir=/usr/include \ + --datadir=/usr/share \ + --mandir=/usr/man \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --buildtype=release \ + -Dmans=true \ + .. || exit 1 + "${NINJA:=ninja}" $NUMJOBS || exit 1 + DESTDIR=$PKG $NINJA install || exit 1 +cd .. + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# Don't clobber the default config +mv $PKG/etc/i3/config $PKG/etc/i3/config.new +mv $PKG/etc/i3/config.keycodes $PKG/etc/i3/config.keycodes.new + +# Make xterm default terminal +sed -i 's/i3-sensible-terminal/xterm/' $PKG/etc/i3/config.new + +# KDM menu entry +mkdir -p $PKG/usr/share/apps/kdm/sessions +ln -s /usr/share/xsessions/i3.desktop $PKG/usr/share/apps/kdm/sessions/ + +# Install an xinitrc script +mkdir -p $PKG/etc/X11/xinit +cat $CWD/xinitrc.i3 > $PKG/etc/X11/xinit/xinitrc.i3 +chmod 0755 $PKG/etc/X11/xinit/xinitrc.i3 + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/html $PKG/usr/doc/$PRGNAM-$VERSION/txt +cp -a DEPENDS LICENSE RELEASE-NOTES-* $PKG/usr/doc/$PRGNAM-$VERSION +cp -a docs/* $PKG/usr/doc/$PRGNAM-$VERSION/txt +( cd $PKG/usr/doc/$PRGNAM-$VERSION/txt + mv *.html *.png *.css ../html/ + rm i3-pod2html *.conf *.dia +) + +cd AnyEvent-I3 + +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN1DIR=/usr/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make -j$(nproc) +#make test +make install DESTDIR=$PKG + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/AnyEvent-I3 +cp -a Changes README MANIFEST $PKG/usr/doc/$PRGNAM-$VERSION/AnyEvent-I3/ + +# man pages +find $PKG/usr/man -type f -exec gzip -9 {} + +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +find $PKG -depth -type d -empty -delete || true + +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh +cat $CWD/slack-required > $PKG/install/slack-required + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/i3/i3.info b/i3/i3.info new file mode 100644 index 0000000..ddb321d --- /dev/null +++ b/i3/i3.info @@ -0,0 +1,10 @@ +PRGNAM="i3" +VERSION="4.23" +HOMEPAGE="https://www.i3wm.org" +DOWNLOAD="https://i3wm.org/downloads/i3-4.23.tar.xz" +MD5SUM="ea71162d40b403b6098fe833697b747a" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="dmenu libev xcb-util-xrm yajl perl-JSON-XS perl-AnyEvent" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/i3/slack-desc b/i3/slack-desc new file mode 100644 index 0000000..3f28472 --- /dev/null +++ b/i3/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +i3: i3 (an improved dynamic tiling window manager) +i3: +i3: i3 is a tiling window manager, completely written from scratch. +i3: +i3: i3 was created because wmii, our favorite window manager at the time, +i3: didn't provide some features we wanted (multi-monitor done right, +i3: for example), had some bugs, didn't progress since quite some time +i3: and wasn't easy to hack at all (source code comments/documentation +i3: completely lacking). Still, we think the wmii developers and +i3: contributors did a great job. +i3: diff --git a/i3/slack-required b/i3/slack-required new file mode 100644 index 0000000..d86f7ac --- /dev/null +++ b/i3/slack-required @@ -0,0 +1,7 @@ +dmenu +libev +perl-AnyEvent +perl-JSON-XS +xcb-util-xrm +yajl +i3lock diff --git a/i3/testcase.patch b/i3/testcase.patch new file mode 100644 index 0000000..1f47476 --- /dev/null +++ b/i3/testcase.patch @@ -0,0 +1,15 @@ +diff -ruNp i3-4.19/testcases/inject_randr1.5.c i3-4.19.new/testcases/inject_randr1.5.c +--- i3-4.19/testcases/inject_randr1.5.c 2020-11-15 20:23:01.532988500 +0300 ++++ i3-4.19.new/testcases/inject_randr1.5.c 2020-11-20 12:23:02.176011604 +0300 +@@ -267,9 +267,9 @@ static void read_client_x11_packet_cb(EV + } + } else if (opcode == connstate->randr_major_opcode) { + const uint8_t randr_opcode = ((generic_x11_request_t *)request)->pad0; +- if (randr_opcode == XCB_RANDR_GET_MONITORS) { ++ if (randr_opcode == 42) { + connstate->getmonitors = connstate->sequence; +- } else if (randr_opcode == XCB_RANDR_GET_OUTPUT_INFO) { ++ } else if (randr_opcode == 9) { + connstate->getoutputinfo = connstate->sequence; + } + } diff --git a/i3/xinitrc.i3 b/i3/xinitrc.i3 new file mode 100644 index 0000000..ed8dfd0 --- /dev/null +++ b/i3/xinitrc.i3 @@ -0,0 +1,20 @@ +#!/bin/sh + +userresources=$HOME/.Xresources +usermodmap=$HOME/.Xmodmap +sysresources=/etc/X11/xinit/.Xresources +sysmodmap=/etc/X11/xinit/.Xmodmap + +# Merge in defaults and keymaps +[ -f $sysresources ] && /usr/bin/xrdb -merge $sysresources +[ -f $sysmodmap ] && /usr/bin/xmodmap $sysmodmap +[ -f $userresources ] && /usr/bin/xrdb -merge $userresources +[ -f $usermodmap ] && /usr/bin/xmodmap $usermodmap + +# Start i3 +if [ -z "$DESKTOP_SESSION" -a -x /usr/bin/ck-launch-session ]; then + exec ck-launch-session dbus-launch --exit-with-session /usr/bin/i3 +else + exec /usr/bin/i3 +fi + diff --git a/i3lock/README b/i3lock/README new file mode 100644 index 0000000..adf8e93 --- /dev/null +++ b/i3lock/README @@ -0,0 +1,7 @@ +i3lock is a simple screen locker like slock. + +This SlackBuild patches i3lock to not to use PAM, and is as such usable in +Slackware. +For verifying the password it uses shadow instead. Because of that, it needs +suid permissions, but those privileges are dropped as soon as possible. +The code for this was taken from slock. See the patch and LICENSE-slock. diff --git a/i3lock/i3lock.SlackBuild b/i3lock/i3lock.SlackBuild new file mode 100755 index 0000000..9edc443 --- /dev/null +++ b/i3lock/i3lock.SlackBuild @@ -0,0 +1,120 @@ +#!/bin/sh + +# Slackware build script for i3lock + +# Copyright 2016 mid-kid +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=i3lock +VERSION=${VERSION:-2.14.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.xz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +mkdir build +cd build +CFLAGS="-g $SLKCFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +CXXFLAGS="$CFLAGS" \ +meson setup \ + --prefix=/usr \ + --bindir=/usr/bin \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --buildtype release \ + .. + +meson install --destdir $PKG +cd .. + +# i3lock needs setuid to make sure it isn't killed by the kernel and to read shadow. +# Don't worry, the privileges are dropped really soon after starting +# and everything else runs without privileges. +chown root:root $PKG/usr/bin/i3lock +chmod 4751 $PKG/usr/bin/i3lock +# We need setuid to set the out of memory score, and drop permissions once done. +# This makes the program's init slightly more insecure, since we'd only need +# setgid to change the group to shadow to read the password, otherwise. +# In fact, both Slackware's xlock and xscreensaver use (root.shadow 2751) as permissions. + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# Install the manpage +install -Dpm 0644 i3lock.1 $PKG/usr/man/man1/i3lock.1 + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a CHANGELOG LICENSE README.md $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/i3lock/i3lock.info b/i3lock/i3lock.info new file mode 100644 index 0000000..18e3ee4 --- /dev/null +++ b/i3lock/i3lock.info @@ -0,0 +1,10 @@ +PRGNAM="i3lock" +VERSION="2.14.1" +HOMEPAGE="https://i3wm.org/i3lock/" +DOWNLOAD="https://i3wm.org/i3lock/i3lock-2.14.1.tar.bz2" +MD5SUM="33d4bc8256a1566fbac911e405e53fdd" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="libev xcb-util-xrm" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/i3lock/slack-desc b/i3lock/slack-desc new file mode 100644 index 0000000..422652b --- /dev/null +++ b/i3lock/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +i3lock: i3lock (a simple screen locker) +i3lock: +i3lock: i3lock is a simple screen locker like slock. +i3lock: After starting it, you will see a white screen +i3lock: (you can configure the color/an image). +i3lock: You can return to your screen by entering your password. +i3lock: +i3lock: This version is patched to not to use PAM. +i3lock: +i3lock: Homepage: https://i3wm.org/i3lock/ +i3lock: diff --git a/i3lock/slack-required b/i3lock/slack-required new file mode 100644 index 0000000..e36df58 --- /dev/null +++ b/i3lock/slack-required @@ -0,0 +1,2 @@ +libev +xcb-util-xrm diff --git a/imlib2/README b/imlib2/README new file mode 100644 index 0000000..6788db8 --- /dev/null +++ b/imlib2/README @@ -0,0 +1,7 @@ +Imlib2 is the (intended) successor to Imlib. + +Imlib2 can load image files from disk in one of many formats, save +images to disk in one of many formats, render image data onto other +images, render images to an X-Windows drawable, produce pixmaps and +pixmap masks of images, apply filters to images, rotate images, +accept RGBA data for images, scale images, and more. diff --git a/imlib2/imlib2.SlackBuild b/imlib2/imlib2.SlackBuild new file mode 100644 index 0000000..215e6f4 --- /dev/null +++ b/imlib2/imlib2.SlackBuild @@ -0,0 +1,102 @@ +#!/bin/sh +# Slackware build script for imlib2 + +# Copyright 2006-2009 Chess Griffin +# Copyright 2011 Grigorios Bouzakis +# Copyright 2011-2017 Ryan P.C. McQuen | Everett, WA | ryanpcmcquen@member.fsf.org +# Copyright 2017-2018 Willy Sudiarto Raharjo +# Copyright 2023 Sergei Fedosoff +# +# 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. +# +# THIS SOFTWARE IS PROVIDED ``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 +# AUTHORS AND COPYRIGHT HOLDERS AND 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. + +PRGNAM=imlib2 +VERSION=${VERSION:-1.12.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +DOCS="AUTHORS COPYING COPYING-PLAIN ChangeLog INSTALL README TODO" + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +CFLAGS="-g $SLKFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +CXXFLAGS="$CFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --disable-static \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/imlib2/imlib2.info b/imlib2/imlib2.info new file mode 100644 index 0000000..c64e1db --- /dev/null +++ b/imlib2/imlib2.info @@ -0,0 +1,10 @@ +PRGNAM="imlib2" +VERSION="1.12.1" +HOMEPAGE="https://sourceforge.net/projects/enlightenment/files/imlib2-src/" +DOWNLOAD="https://deac-ams.dl.sourceforge.net/project/enlightenment/imlib2-src/1.12.1/imlib2-1.12.1.tar.gz" +MD5SUM="b8a4fe429628ec99d07055658d77163e" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/imlib2/slack-desc b/imlib2/slack-desc new file mode 100644 index 0000000..9e2f5e8 --- /dev/null +++ b/imlib2/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +imlib2: imlib2 (successor to Imlib) +imlib2: +imlib2: Imlib2 can load image files from disk in one of many formats, save +imlib2: images to disk in one of many formats, render image data onto other +imlib2: images, render images to an X-Windows drawable, produce pixmaps and +imlib2: pixmap masks of images, apply filters to images, rotate images, +imlib2: accept RGBA data for images, scale images, and more. +imlib2: +imlib2: +imlib2: +imlib2: diff --git a/iotop/README b/iotop/README new file mode 100644 index 0000000..48e6108 --- /dev/null +++ b/iotop/README @@ -0,0 +1,9 @@ +iotop identifies processes that use high amount of input/output +requests on your machine. +It is similar to the well known top utility, but instead of showing +you what consumes CPU the most, it lists processes by their IO usage. +Inspired by iotop Python script from Guillaume Chazarain, rewritten +in C by Vyacheslav Trushkin and improved by Boian Bonev so it runs +without Python at all. + +Note that this conflicts with iotop (install one of the two). diff --git a/iotop/iotop.SlackBuild b/iotop/iotop.SlackBuild new file mode 100755 index 0000000..1f8c3a1 --- /dev/null +++ b/iotop/iotop.SlackBuild @@ -0,0 +1,105 @@ +#!/bin/bash + +# Slackware build script for iotop + +# Copyright 20222023 Matteo Bernardini , Pisa, Italy +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=iotop +SRCNAM=iotop +VERSION=${VERSION:-1.25} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +DOCS="COPYING LICENSE README.md TODO" + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xf $CWD/$SRCNAM-$VERSION.tar.xz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +sed -i "s|share/man|man|" Makefile || exit 1 + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/iotop/iotop.info b/iotop/iotop.info new file mode 100644 index 0000000..5ec593f --- /dev/null +++ b/iotop/iotop.info @@ -0,0 +1,10 @@ +PRGNAM="iotop" +VERSION="1.25" +HOMEPAGE="https://github.com/Tomas-M/iotop" +DOWNLOAD="https://github.com/Tomas-M/iotop/releases/download/v1.25/iotop-1.25.tar.xz" +MD5SUM="bf386a213321b8f2975493d0a74642c6" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/iotop/slack-desc b/iotop/slack-desc new file mode 100644 index 0000000..403e1a8 --- /dev/null +++ b/iotop/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +iotop: iotop (input/output top) +iotop: +iotop: iotop identifies processes that use high amount of input/output +iotop: requests on your machine. +iotop: It is similar to the well known top utility, but instead of showing +iotop: you what consumes CPU the most, it lists processes by their IO usage. +iotop: Inspired by iotop Python script from Guillaume Chazarain, rewritten +iotop: in C by Vyacheslav Trushkin and improved by Boian Bonev so it runs +iotop: without Python at all. +iotop: +iotop: homepage: https://github.com/Tomas-M/iotop diff --git a/keepassxc/README b/keepassxc/README new file mode 100644 index 0000000..ab9f350 --- /dev/null +++ b/keepassxc/README @@ -0,0 +1,33 @@ +KeePassXC is a password and personal data management application that supports +the KeePass Password Safe file format. + +KeePassXC is a fork of KeePassX that aims to incorporate stalled Pull Requests, +features, and bug fixes that are not being incorporated into the main KeePassX +baseline. KeePassXC may be installed alongside KeePassX (also available as a +SlackBuild). + +KeePassXC can be built with YubiKey two-factor authentication support for +unlocking the database. This introduces a dependency on misc/ykpers and can be +enabled by passing YUBIKEY=ON to the script. + +Browser support is enabled by default, meaning that KeePassXC can function as +password storage for Mozilla Firefox and Chromium/Chrome. This may be disabled +by passing BROWSER=OFF to the script. + +KeePassXC will be built with SSH agent support, allowing it to interact with a +running agent. This may be disabled by passing SSHAGENT=OFF to the script. + +Networking support, allowing website favicons to be downloaded, is enabled by +default. This maybe disabled by passing NETWORKING=OFF to the script. + +To include documentation, rubygem-asciidoctor must be installed and DOCS=ON +must be passed to the script. + +Support for database sharing and synchronisation using KeeShare will be +disabled. It can be enabled by setting KEESHARE=ON, or a secure version can be +enabled with KEESHARE_SECURE=ON, providing libraries/quazip-qt5 is installed. + +KeePassXC will display a notification of new releases unless the option +UPDATECHECK=OFF is provided. + +Autotype may be disabled by passing AUTOTYPE=OFF. diff --git a/keepassxc/doinst.sh b/keepassxc/doinst.sh new file mode 100644 index 0000000..aea0f89 --- /dev/null +++ b/keepassxc/doinst.sh @@ -0,0 +1,13 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -x /usr/bin/update-mime-database ]; then + /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/keepassxc/keepassxc.SlackBuild b/keepassxc/keepassxc.SlackBuild new file mode 100644 index 0000000..45cc459 --- /dev/null +++ b/keepassxc/keepassxc.SlackBuild @@ -0,0 +1,126 @@ +#!/bin/sh + +# Slackware build script for KeePassXC + +# Copyright 2017-2019 Benjamin Trigona-Harany +# Copyright 2022 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=keepassxc +VERSION=${VERSION:-2.7.6} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-Ofast -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION-src.tar.xz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +mkdir -p build +cd build + export CFLAGS="$SLKCFLAGS" + export CXXFLAGS="$CFLAGS -fvectorize -fno-rtti" + export LDFLAGS="-ltermcap -flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-s " + cmake \ + -DCMAKE_C_FLAGS:STRING="$CFLAGS" \ + -DCMAKE_CXX_FLAGS:STRING="$CFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_MANDIR=/usr/man \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DKEEPASSXC_BUILD_TYPE=Release \ + -DWITH_TESTS=OFF \ + -DWITH_XC_BROWSER=${BROWSER:-ON} \ + -DWITH_XC_YUBIKEY=${YUBIKEY:-OFF} \ + -DWITH_XC_NETWORKING=${NETWORKING:-ON} \ + -DWITH_XC_AUTOTYPE=${AUTOTYPE:-ON} \ + -DWITH_XC_DOCS=${DOCS:-OFF} \ + -DWITH_XC_SSHAGENT=${SSHAGENT:-ON} \ + -DWITH_XC_KEESHARE=${KEESHARE:-ON} \ + -DWITH_XC_KEESHARE_SECURE=${KEESHARE_SECURE:-ON} \ + -DWITH_XC_UPDATECHECK=${UPDATECHECK:-OFF} \ + -DWITH_XC_FDOSECRETS=ON \ + -DWITH_APP_BUNDLE=OFF \ + .. + + make -j$(nproc) + make install DESTDIR=$PKG +cd .. + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +if [ -d $PKG/usr/share/man ]; then + mv $PKG/usr/share/man $PKG/usr +fi + +if [ -d $PKG/usr/man ]; then + find $PKG/usr/man -type f -exec gzip -9 {} \; + for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done +fi + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + CHANGELOG.md COPYING README.md \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/keepassxc/keepassxc.info b/keepassxc/keepassxc.info new file mode 100644 index 0000000..cd5dc6f --- /dev/null +++ b/keepassxc/keepassxc.info @@ -0,0 +1,11 @@ +PRGNAM="keepassxc" +VERSION="2.7.6" +HOMEPAGE="https://github.com/keepassxreboot/keepassxc" +DOWNLOAD="https://github.com/keepassxreboot/keepassxc/releases/download/2.7.6/keepassxc-2.7.6-src.tar.xz" +MD5SUM="0dfa2371e4f1619b9b9232b7568886a6" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="argon2 libsodium qrencode qt5 Botan libminizip" +BUILDREQUIRES="Botan libminizip" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/keepassxc/slack-desc b/keepassxc/slack-desc new file mode 100644 index 0000000..94bd6f8 --- /dev/null +++ b/keepassxc/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +keepassxc: keepassxc (personal data management application) +keepassxc: +keepassxc: KeePassXC is a password and personal data management application +keepassxc: forked from KeePassX. +keepassxc: +keepassxc: +keepassxc: +keepassxc: +keepassxc: +keepassxc: +keepassxc: diff --git a/keepassxc/slack-required b/keepassxc/slack-required new file mode 100644 index 0000000..da8491a --- /dev/null +++ b/keepassxc/slack-required @@ -0,0 +1,2 @@ +Botan +libminizip diff --git a/libdispatch/README b/libdispatch/README new file mode 100644 index 0000000..200d007 --- /dev/null +++ b/libdispatch/README @@ -0,0 +1,2 @@ +Grand Central Dispatch (GCD or libdispatch) provides comprehensive +support for concurrent code execution on multicore hardware. diff --git a/libdispatch/libdispatch.SlackBuild b/libdispatch/libdispatch.SlackBuild new file mode 100644 index 0000000..7393c42 --- /dev/null +++ b/libdispatch/libdispatch.SlackBuild @@ -0,0 +1,109 @@ +#!/bin/sh + +# Slackware build script for libdispatch + +# Copyright 2020 Hunter Sezen California, USA +# Copyright 2022 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=libdispatch +VERSION=${VERSION:-5.4} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -eu + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf swift-corelibs-$PRGNAM-swift-$VERSION-RELEASE +tar xf $CWD/swift-corelibs-$PRGNAM-swift-$VERSION-RELEASE.tar.gz +cd swift-corelibs-$PRGNAM-swift-$VERSION-RELEASE +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# Disable -Werror. +sed -i 's/-Werror//' src/CMakeLists.txt +sed -i '/-Werror/d' cmake/modules/DispatchCompilerWarnings.cmake + +# apple software really wants clang +export LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" + +mkdir -p build +cd build + cmake \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_C_FLAGS:STRING="-g $SLKCFLAGS -flto" \ + -DCMAKE_CXX_FLAGS:STRING="-g $SLKCFLAGS -flto" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib${LIBDIRSUFFIX} \ + -DCMAKE_INSTALL_MANDIR=man \ + -DCMAKE_BUILD_TYPE=Release .. + make -j$(nproc) + make install DESTDIR=$PKG +cd .. + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | + grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a CONTRIBUTING.md LICENSE README.md $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/libdispatch/libdispatch.info b/libdispatch/libdispatch.info new file mode 100644 index 0000000..683152e --- /dev/null +++ b/libdispatch/libdispatch.info @@ -0,0 +1,10 @@ +PRGNAM="libdispatch" +VERSION="5.4" +HOMEPAGE="https://apple.github.io/swift-corelibs-libdispatch/" +DOWNLOAD="https://github.com/apple/swift-corelibs-libdispatch/archive/swift-5.4-RELEASE/swift-corelibs-libdispatch-swift-5.4-RELEASE.tar.gz" +MD5SUM="6574a6365e9756151028f9d9670462fb" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/libdispatch/slack-desc b/libdispatch/slack-desc new file mode 100644 index 0000000..338d438 --- /dev/null +++ b/libdispatch/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +libdispatch: libdispatch (Grand Central Dispatch) +libdispatch: +libdispatch: Grand Central Dispatch (GCD or libdispatch) provides comprehensive +libdispatch: support for concurrent code execution on multicore hardware. +libdispatch: +libdispatch: Homepage: https://apple.github.io/swift-corelibs-libdispatch/ +libdispatch: +libdispatch: +libdispatch: +libdispatch: +libdispatch: diff --git a/libdispatch/slack-required b/libdispatch/slack-required new file mode 100644 index 0000000..c8d7813 --- /dev/null +++ b/libdispatch/slack-required @@ -0,0 +1,2 @@ +cmake +ninja diff --git a/libdrm/libdrm-2.4.117.tar.xz.sig b/libdrm/libdrm-2.4.117.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..15d405240449f42ec5bdcaaa1a4d82004208cb3e GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*Q|CJ`s?+%xvK;q;N-h1Hak6uUx0%bA}LjVd15D(sa z;OLKDNIU!x0Jz7N1S6fmu7HMTpz@Z#qN)}MG>=t$WPFsXRXzAu7S$%EjHR^!Ijm^m zfT2aL*bZ7QW`01I^IJfn-kg==on`Tp1V&20&iVS5og!5n2lawm1h&V-x3v5pKv;cD z?=aIscZ=)IJWXZvx>0YXmm4&D=lZ%EIWFOvoYmwgIs+$)C0?!cfey*^`)Mu)dGu$HKOtGxYNJEKtqD0a-Vd(u zXQeV1jnJ5v{W_*_)5`i;iN56c;gwbhj6=EnLLj&?oIJ&+Cvf)x9wup)oxQ|6g&IwS zt9H2T6r|fHIct>Z2k# zt2LDW-|@%kxKdBhPif~#IMexv|L*2E^U~MIz@jt$Rnlx~Sm8Q@P&s%6*e%fTEluBJ Ee35}2CjbBd literal 0 HcmV?d00001 diff --git a/libdrm/libdrm.SlackBuild b/libdrm/libdrm.SlackBuild new file mode 100755 index 0000000..b586ec1 --- /dev/null +++ b/libdrm/libdrm.SlackBuild @@ -0,0 +1,145 @@ +#!/bin/bash + +# Copyright 2006-2010, 2014, 2015, 2018, 2020, 2021 Patrick J. Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PKGNAM=libdrm +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-2} + +# Automatically determine architecture for build & packaging: +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) export ARCH=i586 ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) export ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + +NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "} + +TMP=${TMP:-/tmp} +PKG=$TMP/package-${PKGNAM} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "s390" ]; then + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC -mfpmath=sse -mmmx -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +rm -rf $PKG +mkdir -p $TMP $PKG +cd $TMP +rm -rf ${PKGNAM}-${VERSION} +tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z || exit 1 +cd ${PKGNAM}-$VERSION || exit 1 + +# Make sure ownerships and permissions are sane: +chown -R root:root . +find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \+ + +# Configure, build, and install: +export CFLAGS="$SLKCFLAGS" +export CXXFLAGS="$SLKCFLAGS" +mkdir meson-build +cd meson-build +meson setup \ + --prefix=/usr \ + --libdir=lib${LIBDIRSUFFIX} \ + --libexecdir=/usr/libexec \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --includedir=/usr/include \ + --datadir=/usr/share \ + --mandir=/usr/man \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --buildtype=release \ + -Dudev=true \ + -Dintel=enabled \ + .. || exit 1 + "${NINJA:=ninja}" $NUMJOBS || exit 1 + DESTDIR=$PKG $NINJA install || exit 1 +cd .. + +# Strip binaries: +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + +# Compress and link manpages, if any: +if [ -d $PKG/usr/man ]; then + ( cd $PKG/usr/man + for manpagedir in $(find . -type d -name "man*") ; do + ( cd $manpagedir + for eachpage in $( find . -type l -maxdepth 1) ; do + ln -s $( readlink $eachpage ).gz $eachpage.gz + rm $eachpage + done + gzip -9 *.? + ) + done + ) +fi + +# Compress info files, if any: +if [ -d $PKG/usr/info ]; then + ( cd $PKG/usr/info + rm -f dir + gzip -9 * + ) +fi + +# Add a documentation directory: +mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION +cp -a \ + CONTRIB* README* RELEAS* \ + $PKG/usr/doc/${PKGNAM}-$VERSION + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $TMP/package-${PKGNAM} +/sbin/makepkg -l y -c n $TMP/${PKGNAM}-$VERSION-$ARCH-$BUILD.txz + diff --git a/libdrm/libdrm.url b/libdrm/libdrm.url new file mode 100644 index 0000000..79d7b0e --- /dev/null +++ b/libdrm/libdrm.url @@ -0,0 +1 @@ +https://dri.freedesktop.org/libdrm/ diff --git a/libdrm/slack-desc b/libdrm/slack-desc new file mode 100644 index 0000000..17523a1 --- /dev/null +++ b/libdrm/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +libdrm: libdrm (A library to support Direct Rendering) +libdrm: +libdrm: This library implements an interface to the kernel's DRM services. +libdrm: It is used to support hardware accelerated 3D rendering. +libdrm: +libdrm: +libdrm: +libdrm: +libdrm: +libdrm: +libdrm: diff --git a/libev/README b/libev/README new file mode 100644 index 0000000..f7826e9 --- /dev/null +++ b/libev/README @@ -0,0 +1,12 @@ +libev (a high-performance event loop/model) + +Libev is modelled (very loosely) after libevent and the Event perl +module, but is faster, scales better and is more correct, and also +more featureful. And also smaller. Yay. + +Note: libev and libevent both have a usr/include/event.h +header file. This could have lead to compile problems if both +packages were installed at the same time, so it has been moved to +usr/include/libev/event.h. Add CPPFLAGS="-I/usr/include/libev" to +the SlackBuild if the software you're building over this needs the +libevent compatibility layer (lighttpd2 and i3 don't). diff --git a/libev/libev.SlackBuild b/libev/libev.SlackBuild new file mode 100644 index 0000000..6b7a827 --- /dev/null +++ b/libev/libev.SlackBuild @@ -0,0 +1,112 @@ +#!/bin/sh + +# Slackware build script for libev + +# Written by Šime Ramov +# Maintained (2012-2020) by Matteo Bernardini , Pisa, Italy +# Copyright 2023 Sergei Fedosoff + +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=libev +VERSION=${VERSION:-4.33} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# Force CFLAGS +sed -i "s|-g -O3|$SLKCFLAGS|" configure || exit 1 + +chmod +rwx configure + +CFLAGS="-g $SLKCFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +CXXFLAGS="$CFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --enable-static=no \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +# avoid conflicting with libevent, we move an header in a subfolder +# and we will explicitly add CPPFLAGS="-I/usr/include/libev" when +# building software depending on this, if needed: lighttpd2 and i3, +# for example, don't need this header. +mkdir -p $PKG/usr/include/libev +mv $PKG/usr/include/event.h $PKG/usr/include/libev/ + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a README LICENSE Changes $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/libev/libev.info b/libev/libev.info new file mode 100644 index 0000000..9562c71 --- /dev/null +++ b/libev/libev.info @@ -0,0 +1,10 @@ +PRGNAM="libev" +VERSION="4.33" +HOMEPAGE="http://software.schmorp.de/pkg/libev.html" +DOWNLOAD="http://dist.schmorp.de/libev/Attic/libev-4.33.tar.gz" +MD5SUM="a3433f23583167081bf4acdd5b01b34f" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/libev/slack-desc b/libev/slack-desc new file mode 100644 index 0000000..67d4ce4 --- /dev/null +++ b/libev/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +libev: libev (a high-performance event loop/model) +libev: +libev: Libev is modelled (very loosely) after libevent and the Event perl +libev: module, but is faster, scales better and is more correct, and also +libev: more featureful. And also smaller. Yay. +libev: +libev: Website: +libev: +libev: +libev: +libev: diff --git a/libminizip/README b/libminizip/README new file mode 100644 index 0000000..1b96650 --- /dev/null +++ b/libminizip/README @@ -0,0 +1,2 @@ +libminizip is the small library to compress and uncompress zip files +with the help of zlib. diff --git a/libminizip/libminizip.SlackBuild b/libminizip/libminizip.SlackBuild new file mode 100644 index 0000000..72994e9 --- /dev/null +++ b/libminizip/libminizip.SlackBuild @@ -0,0 +1,109 @@ +#!/bin/sh + +# Slackware build script for minizip + +# Copyright 2013 Daniil Bratashov +# Copyright 2022 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=libminizip +VERSION=${VERSION:-1.2.12} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC -flto" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/zlib-$VERSION.tar.xz +cd zlib-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + +cd contrib/minizip +libtoolize +aclocal +autoconf +automake --add-missing + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed" \ +./configure \ + --disable-static\ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + MiniZip64_Changes.txt MiniZip64_info.txt \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/libminizip/libminizip.info b/libminizip/libminizip.info new file mode 100644 index 0000000..df62376 --- /dev/null +++ b/libminizip/libminizip.info @@ -0,0 +1,10 @@ +PRGNAM="libminizip" +VERSION="1.2.12" +HOMEPAGE="http://www.winimage.com/zLibDll/minizip.html" +DOWNLOAD="http://zlib.net/zlib-1.2.12.tar.xz" +MD5SUM="85adef240c5f370b308da8c938951a68" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/libminizip/slack-desc b/libminizip/slack-desc new file mode 100644 index 0000000..b174920 --- /dev/null +++ b/libminizip/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +libminizip: libminizip (compression library) +libminizip: +libminizip: libminizip is small library to compress and decompress zip files +libminizip: with the help of zlib. +libminizip: +libminizip: +libminizip: +libminizip: +libminizip: +libminizip: +libminizip: diff --git a/libotr/README b/libotr/README new file mode 100644 index 0000000..abdc380 --- /dev/null +++ b/libotr/README @@ -0,0 +1,13 @@ +libotr (OTR Messaging Library and Toolkit) + +This is the portable OTR Messaging Library, as well as the toolkit to +help you forge messages. + +OTR allows you to have private conversations over IM by providing: + + - Encryption: No one else can read your instant messages. + - Authentication: You are assured the correspondent is who you think + it is. + - Deniability: The messages you send do not have digital signatures + - Perfect forward secrecy: If you lose control of your private keys, + no previous conversation is compromised. diff --git a/libotr/libotr.SlackBuild b/libotr/libotr.SlackBuild new file mode 100755 index 0000000..d0c8031 --- /dev/null +++ b/libotr/libotr.SlackBuild @@ -0,0 +1,116 @@ +#!/bin/bash + +# Slackware build script for libotr + +# Copyright 2007-2015 by Guillermo Bonvehi (gbonvehi@gmail.com) +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=libotr +VERSION=${VERSION:-4.1.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="$SLKCFLAGS -rdynamic" \ +CXXFLAGS="$SLKCFLAGS -rdynamic" \ +LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +./configure \ + --prefix=/usr \ + --mandir=/usr/man \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --enable-static=no \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a README AUTHORS COPYING* ChangeLog INSTALL NEWS UPGRADING Protocol-v3.html \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +rm -f $PKG/usr/lib*/*.la + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/libotr/libotr.info b/libotr/libotr.info new file mode 100644 index 0000000..a4d7e89 --- /dev/null +++ b/libotr/libotr.info @@ -0,0 +1,10 @@ +PRGNAM="libotr" +VERSION="4.1.1" +HOMEPAGE="https://otr.cypherpunks.ca/" +DOWNLOAD="https://otr.cypherpunks.ca/libotr-4.1.1.tar.gz" +MD5SUM="dac5a8778a35f674c046ddf5d97e4d81" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/libotr/slack-desc b/libotr/slack-desc new file mode 100644 index 0000000..964162c --- /dev/null +++ b/libotr/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +libotr: libotr (OTR Messaging Library and Toolkit) +libotr: +libotr: This is the portable OTR Messaging Library, as well as the toolkit +libotr: to help you forge messages. +libotr: OTR allows you to have private conversations over IM by providing: +libotr: - Encryption: No one else can read your instant messages. +libotr: - Authentication: You are assured the correspondent is who you think +libotr: it is. +libotr: - Deniability: The messages you send do not have digital signatures +libotr: - Perfect forward secrecy: If you lose control of your private keys, +libotr: no previous conversation is compromised. diff --git a/libsignal-protocol-c/README b/libsignal-protocol-c/README new file mode 100644 index 0000000..d80dcb6 --- /dev/null +++ b/libsignal-protocol-c/README @@ -0,0 +1,2 @@ +This is a ratcheting forward secrecy protocol that works +in synchronous and asynchronous messaging environments. diff --git a/libsignal-protocol-c/libsignal-protocol-c.SlackBuild b/libsignal-protocol-c/libsignal-protocol-c.SlackBuild new file mode 100755 index 0000000..d2deec2 --- /dev/null +++ b/libsignal-protocol-c/libsignal-protocol-c.SlackBuild @@ -0,0 +1,111 @@ +#!/bin/bash + +# Slackware build script for libsignal-protocol-c + +# Copyright 2019-2023 CRTS +# Copyright 2023 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=libsignal-protocol-c +VERSION=${VERSION:-2.3.3} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +mkdir -p build +cd build + cmake \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS -flto -rdynamic" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS -flto -rdynamic" \ + -DLINK_FLAGS:STRING="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_SUFFIX=${LIBDIRSUFFIX} \ + -DMAN_INSTALL_DIR=/usr/man \ + -DCMAKE_BUILD_TYPE=Release .. + make -j$(nproc) + make install DESTDIR=$PKG +cd .. + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + ISSUE_TEMPLATE.md LICENSE README.md \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/libsignal-protocol-c/libsignal-protocol-c.info b/libsignal-protocol-c/libsignal-protocol-c.info new file mode 100644 index 0000000..4ef8c56 --- /dev/null +++ b/libsignal-protocol-c/libsignal-protocol-c.info @@ -0,0 +1,10 @@ +PRGNAM="libsignal-protocol-c" +VERSION="2.3.3" +HOMEPAGE="https://signal.org" +DOWNLOAD="https://github.com/signalapp/libsignal-protocol-c/archive/v2.3.3/libsignal-protocol-c-2.3.3.tar.gz" +MD5SUM="68dae9b8da58f36dcbf9e10b0138d6f9" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="CRTS" +EMAIL="crts [at] gmx [dot] net" diff --git a/libsignal-protocol-c/slack-desc b/libsignal-protocol-c/slack-desc new file mode 100644 index 0000000..0ba140f --- /dev/null +++ b/libsignal-protocol-c/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +libsignal-protocol-c: libsignal-protocol-c (Forward Secrecy Protocol) +libsignal-protocol-c: +libsignal-protocol-c: This is a ratcheting forward secrecy protocol that works in +libsignal-protocol-c: synchronous and asynchronous messaging environments. +libsignal-protocol-c: +libsignal-protocol-c: +libsignal-protocol-c: +libsignal-protocol-c: +libsignal-protocol-c: +libsignal-protocol-c: +libsignal-protocol-c: diff --git a/libstrophe/README b/libstrophe/README new file mode 100644 index 0000000..55926b8 --- /dev/null +++ b/libstrophe/README @@ -0,0 +1,4 @@ +libstrophe is a minimal XMPP library written in C. It has almost no +external dependencies, only an XML parsing library (expat or libxml +are both supported). It is designed for both POSIX and Windows +systems. diff --git a/libstrophe/libstrophe.SlackBuild b/libstrophe/libstrophe.SlackBuild new file mode 100644 index 0000000..f237688 --- /dev/null +++ b/libstrophe/libstrophe.SlackBuild @@ -0,0 +1,103 @@ +#!/bin/sh + +# Slackware build script for libstrophe + +# Copyright 2015-2018 Pedro R.M. Júnior, Campinas, SP, Brazil +# Copyright 2022 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=libstrophe +VERSION=${VERSION:-0.12.3} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-g -O2 -fPIC -rdynamic" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +mkdir -p m4 +# "If you are building from a source control checkout, run:" +./bootstrap.sh +CFLAGS="$SLKCFLAGS" \ +CPPFLAGS="$SLKCFLAGS" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --enable-static=no \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make -j$(nproc) install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a AUTHORS COPYING ChangeLog *LICENSE* README* $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/libstrophe/libstrophe.info b/libstrophe/libstrophe.info new file mode 100644 index 0000000..4242db4 --- /dev/null +++ b/libstrophe/libstrophe.info @@ -0,0 +1,10 @@ +PRGNAM="libstrophe" +VERSION="0.12.3" +HOMEPAGE="http://strophe.im/libstrophe/" +DOWNLOAD="https://github.com/strophe/libstrophe/archive/0.12.3/libstrophe-0.12.3.tar.gz" +MD5SUM="c85804d654a5fddb96850dc8bbd4600d" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/libstrophe/slack-desc b/libstrophe/slack-desc new file mode 100644 index 0000000..d86e9fa --- /dev/null +++ b/libstrophe/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +libstrophe: libstrophe (An XMPP library for C) +libstrophe: +libstrophe: libstrophe is a minimal XMPP library written in C. It has almost no +libstrophe: external dependencies, only an XML parsing library (expat or libxml +libstrophe: are both supported). It is designed for both POSIX and Windows +libstrophe: systems. +libstrophe: +libstrophe: Homepage: http://strophe.im/libstrophe/ +libstrophe: +libstrophe: +libstrophe: diff --git a/liquid-dsp/README b/liquid-dsp/README new file mode 100644 index 0000000..6af9a96 --- /dev/null +++ b/liquid-dsp/README @@ -0,0 +1,11 @@ +liquid-dsp is a free and open-source digital signal processing (DSP) +library designed specifically for software-defined radios on embedded +platforms. The aim is to provide a lightweight DSP library that does not +rely on a myriad of external dependencies or proprietary and otherwise +cumbersome frameworks. All signal processing elements are designed to be +flexible, scalable, and dynamic, including filters, filter design, +oscillators, modems, synchronizers, and complex mathematical operations. + +Note: your CPU must support SSE3 instructions, for a list please see + + https://en.wikipedia.org/wiki/SSE3 diff --git a/liquid-dsp/liquid-dsp.SlackBuild b/liquid-dsp/liquid-dsp.SlackBuild new file mode 100755 index 0000000..f00f477 --- /dev/null +++ b/liquid-dsp/liquid-dsp.SlackBuild @@ -0,0 +1,113 @@ +#!/bin/bash + +# Slackware build script for liquid-dsp + +# Copyright 2020 Alan Aversa USA +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=liquid-dsp +VERSION=${VERSION:-1.6.0} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O3 -march=i586 -mtune=i686 -msse3" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O3 -march=i686 -mtune=i686 -msse3" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O3 -fPIC -mfpmath=sse -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2 -mavx -mavx2" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O3" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +./bootstrap.sh + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-O2 -Wl,-E -Wl,--no-as-needed" \ +./configure \ + --prefix=/usr \ + --libdir=/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --build=$ARCH-slackware-linux \ + --enable-fftoverride + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a HISTORY LICENSE README.md TROUBLESHOOTING examples $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/liquid-dsp/liquid-dsp.info b/liquid-dsp/liquid-dsp.info new file mode 100644 index 0000000..1659add --- /dev/null +++ b/liquid-dsp/liquid-dsp.info @@ -0,0 +1,10 @@ +PRGNAM="liquid-dsp" +VERSION="1.6.0" +HOMEPAGE="http://liquidsdr.org/" +DOWNLOAD="https://github.com/jgaeddert/liquid-dsp/archive/v1.6.0/liquid-dsp-1.6.0.tar.gz" +MD5SUM="3a88c49e6066bc701e7d15da7a567120" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/liquid-dsp/slack-desc b/liquid-dsp/slack-desc new file mode 100644 index 0000000..9650a74 --- /dev/null +++ b/liquid-dsp/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +liquid-dsp: liquid-dsp (Software-Defined Radio Digital Signal Processing Library) +liquid-dsp: +liquid-dsp: liquid-dsp is the software portion of Software Defined Radio. By using +liquid-dsp: hardware that converts RF spectrum into a digital stream we are able +liquid-dsp: to build complex radios to do many types of functions in software +liquid-dsp: instead of traditional hardwre. +liquid-dsp: +liquid-dsp: Paired with a supported hardware receiver, you can use liquid-dsp to +liquid-dsp: explore the RF world around you. Discover Satellite transmissions, +liquid-dsp: Amateur Radio, Rail, Areonautical, Shortwave, or any number of +liquid-dsp: possible signals floating through the air. diff --git a/llvm/clang-13.0.0.src.tar.xz.sig b/llvm/clang-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..72c2108b02039c7989fc9ac40ab6be99ae0e1e01 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BrW&jEa5TeJF zsfIzFis2Uz|9drB)>}pmZ88d8RQ`tamKo;U%DD}hvGCoUvo%J`)it>4Wm7_NvF?Ro z-gESp*s+8Ij$DI6x$plitx{bgT~yp<4-ylIxFqH#r9rX9J$Y|62V}y!OYd>Uu%Zd( zvV;lRY9l-mw?a*65p&=ztJQjVv#Bz3a&pGAcGg}tp&b4QE$+i^OfB5Mc+4}budr%1 zfyuHiW-Ki4$Or)vNR&}UTl`?Gv^{_0xWSR>6Vg)CHeN(h-OBGpll0EcljKt#ZXenB>fiN6s|F2%OE zSgmiyPnx_>RIBq%pQJk)WUvcS@7!U|WKGB*5~VPl1Mai6hCGhu0bzzuQ)<*X0RT1W z@?fKVt8oQ88d7WI)N?JRAa^Qwl96g}@!x2;c7ow>oNnbrf+)6#c4*FX(Uxf}-j_$$ z5AE}>LV44%MIQTTwwAMhcP0%2BrZvYAj5TeJF zsfIzFigy$b{U0a5PgqQ<0;fvJNodA9V~HXo4B0j4Rym;K9}GbGgjkQS^KsI)q9s4! zw1g9~)Kpw_aFvgQL-IUWf0Yx#Y{M8|`MysT#OBvmGIqaTA-#9{Xa#1?j4`>KS2VC4 zOzG12V~xtlR**bte~j1H2S~Q2Uvlv{M8du67SWivo_B8#h*kar*zo|$D8Vfu9 zh}&4c+g>@_;1KvW=T%NAtS=sY$3Fz;Po&ekO>sFy{q8!rOGQ9SYy0EFxp~i|H&v=M zj2M#eyuFqAWPIL+du$y5Oxqo!+{-P3tJ0SY=0ePRu~c)jDXrD3FFZspE$s0R((HEuo_toyB~=66`l1Zm!m$auin;+|O+6WG zIVAq{b(=QH>v`%-^iv(I2^XyhLL`AQSPq?57~t7i=!7<`LB6_oBF^*K&~TD%9Zj3y EaX5Yo!vFvP literal 0 HcmV?d00001 diff --git a/llvm/clang.toolchains.i586.triple.diff b/llvm/clang.toolchains.i586.triple.diff new file mode 100644 index 0000000..90e66c5 --- /dev/null +++ b/llvm/clang.toolchains.i586.triple.diff @@ -0,0 +1,10 @@ +--- ./tools/clang/lib/Driver/ToolChains/Gnu.cpp.orig 2021-09-24 11:18:10.000000000 -0500 ++++ ./tools/clang/lib/Driver/ToolChains/Gnu.cpp 2021-10-05 14:17:02.597518687 -0500 +@@ -2114,6 +2114,7 @@ + "i586-linux-gnu", "i686-linux-gnu", + "i686-pc-linux-gnu", "i386-redhat-linux6E", + "i686-redhat-linux", "i386-redhat-linux", ++ "i586-slackware-linux", "i686-slackware-linux", + "i586-suse-linux", "i686-montavista-linux", + "i686-linux-android", "i686-gnu", + }; diff --git a/llvm/compiler-rt-13.0.0.src.tar.xz.sig b/llvm/compiler-rt-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..09d9dfd20375085560edd81ce9febf53d375bb80 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BrZvYAj5TeJF zsfIzFik3tV|4?!m#z=p_rw|N-85u^xSep}CIUe%4K%K#w;)1v`og#B) zO$N4}8Q}l;ZRyQj$y$`*W)EO+PAdHf*Omm9{zH(pq&1bDXWqZTtJAipFB=oN5G$Gm z5mQM$8;+pNIUOUT_>9K&$nosVq_~?ByA26W^*YuuqI+(={y<`>2UY($2npPbBwdP8sr{Ci(8$f6Ir`2+bv6hONb$@{Nyuhl02P7 zp-XzLES&o5E_~rqD_OQ~&PQ;H<%B-RKV-H5U&xh-D0`Q1&ON-HVxNG=WY28QOW-1( zP>FuYCFrYsUL%6}$rA*Bw39)~sFaIwzSUP|aVIOc$(iS-1P~5z?KbPY4v;J0{b6O} zvs3W52+?1kZ(gfojp%$u_V8{z4AyWX*sYfuYl1T@W2P%UqUd#(Vn}|0rZBT3s5?}6 zCRry$eF0D;{bHGm!$M#&{=@eL#?mePfQ%Ys6WTk!_h0-iqCX904Z(Oqz>r0k2W~1) zqm}@Vnx!+vm}Z2<7e7SaqUi}!yt=D-5PQt=&*`Z?jaR?+)7;@BX)dfWAXQD^wf(}W E&`Hb<^8f$< literal 0 HcmV?d00001 diff --git a/llvm/flang-13.0.0.src.tar.xz.sig b/llvm/flang-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..9a0b93f43feb6571d71205e614c2e136e0b0527c GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BrZvYAj5TeJF zsfIzFiUQgX{yu@x&=HmVW8TaYIh*uFOQ82qna-8373wa(EP+?nI-WnDxB~`ya-|(S zY!tol&LNYQg%qV==sI?s{kE3bw-Q=)Uxc+i(mp1k3{kv=nr)&D&BIjJ5o+^wcq^gl z?dOw2$8Gs5S$=8TqpoDuJUUK>2twtj4MQSw>%StO#El_N&b)_WJ2G&rnu_6GWvqiS zyb=&*xwN!}a&YA5CA>Dwr16{?DLa_-1sqAze!rEfUehpAKeb3c{*|TIEha_;sM8t9&@?zBu^PY4)t<+APon5m|KNl|4oX)I!XlaKK*$ ztPGq{ z1=)^Pa6`?t<2P$00*nU#K9@k!W~d{|-7FdgL2!mTEdA;V8!)K&JLcy#o!%a$kygcY EvL9>_m;e9( literal 0 HcmV?d00001 diff --git a/llvm/libcxx-13.0.0.src.tar.xz.sig b/llvm/libcxx-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..7d7b69e4d5d9ca3d93e6ad778a754a296df095fe GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BrZvYAj5TeJF zsfIzFiWn*n|6X+yzO*+oF25GHr(7lzU%uw3I{d56+8H@X88#yF!%Z6}La-Ak@j8y3 zmo0h|Iq@>h)b{}JSMlR;0u|$Syb=qiKA-_pew~D1pU!&^orZy%sFgSRPOuRmcux?H zH7?)=aF5(AK+h4UDW*E)bOS01`^&(W!G|=U609ly$F8-UBV|mvTf2sU5p1jz34$e8 zT|d1xim*0Y*f@Rv9LA3J*vl7KblQEZI9;o8`5bL+f>+`GfJY|Tbcv*})PQN5XOgaV zv^;FTFJ6#Nwul7NT7aeup+vp`&4%gt=3E_Xnmtj9uJESm&QWxC~6h3K*Lt9;@nx)#vjT6l$6 zNQKU91JkM5F+C9Y)U@q@)7Kg$EOQ?5*Z~Mfp@PTK=+Pr(wh2PaW>0Bclb0M)n(Iai zGx1NO+b05d3X+mk2U1+-R^7i`AKAnsUl7cC0duIWa8g~ZSW&6Pp10n4o};vc5?Dia z2IiBX4YzfYEV$ZK8XOd5om9c@W?RbkfHBSg68?dR@<6C+%J4C^g!X)XV|{Q|KY1We z9;ZJRfJ4UD+$f8>aXo-E!P-wP0%2BrZ~zJk5TeJF zsfIzFiiuGV|8Kmm29*J*e*^(;%9a=M$f$bE%ib0XT&J$g(jiJ_Pp1Kcz*1?gfBHtd z6}qY~mSZ!Mu$3>m8)cIL!-EUY8J@f*z48pp)Tt@LYmu%^F{Kkx)`ceIbJ#91vx$Q$ zdX7}Fm1Bp=m_t&F@ox!wuWyK3?Km_#VKGE zp0K8;lZY#1X7YwrNcxi&UV5Jt=x={vOzhZ6>L(*9)%-S8dff$=8eyU=4p1JMEGiX zf%i9uD!3a0_Pb;Q*esM435tJ}i(yVIT~~7<|Kd3WVa1jLJd?X%#G6muRo*qb;UEoT z_bo;jM+QY?mh?Bi{gg7*M=IR`u;LdD0sw54Av-S5=Fr{~c^J&8A8CNy$gblpO@73p z@nvEn%phy>h+tLz#rAm5BKhQKYkNQ8 zEsh}uaKi86pXl#E|hUTN5OR?cuY%J$M1;iRYH EpL1Uj6aWAK literal 0 HcmV?d00001 diff --git a/llvm/libunwind-13.0.0.src.tar.xz.sig b/llvm/libunwind-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..8ed76a5443e28a3ded48506e8e06c7ed080c12c6 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BrZ~zJk5TeJF zsfIzFiXi?E{wE-{F7xpJVt9c0^*#&l7tPXzjF|f*ltw(2fj}pkY=R0d7C=(~JD;AI z$d&77A`^zeVs5mfm_Zv^rYoV5u`5%Q?;pA?ojSF$ol<*vf9;8IPNScRK|w-_eZ4+}CjE6JxcY=ziCQ{on% zEMf6ZF)`3_2 zYD$(Tnv*o=Uo8oxLTQ<9Yx9(Ha98cy2V@Gk}x3o7oW3x~r^fBHIYB6jy|uVY>d9vt2$ zBr;AF0#!LS&Gd6$KLm)4jjh^#Odhe{!5(UfmLY#!4Nl0DcQXx^)0&`t$+aE$x&^8R z0o^v!EL4-m==Hput-{m?f?<(1QIYuulWPdW+{h>*f3)kXQV~$2Ujtsqs2|@}6nL|S E;F1sx>;M1& literal 0 HcmV?d00001 diff --git a/llvm/lld-13.0.0.src.tar.xz.sig b/llvm/lld-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..f77a9501881f46d6da0bb1dbcf4539a8c068404f GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BrZ~zJk5TeJF zsfIzFimbp7|5#oqi==!x3XNcB6E&;zu}`}5!;mzK(&3|Hd@ZZ*t-P{xU#-Y72$xyU<0ZRdQVtUAdy~^?Om0sx$L**08Ve3G-g=y zf@AaYX(Z_KYL5W04ECgFNXHRKu!|=%pf658k}rF?JE~fz1Hfh8nrF+E8;OWW&mYz4 zswBPYS4=j;jVH=|ec*=Sx5M`L#;FYwniJb^r65syzS&6UP5PR01~fXguQB)+*d;l3 zh4}>iW~TA#DP5d9yd10W(3>tjl8gpJExLPpnnnd58kL9h(POy9Z#0ZO?PyJj4P%tJ z4X!pLo>m~&Ult+34(K_4%99=^oy=7Te{_*fcva)+P^Hg9zL}F4#3#YKM}mr8H&!3@ zuyg-4^6OXYVKU1`X3e9cUKbn4_y7g&NAzi#Cy^XI*CZ#;qRkVi2nK}G%)CJCHuCzv z<-FRo-0^t_0+;`fzMEr)PrcUdL*G^-kI@Lx*2>ARSY=X+h$?ueZ0PWEW6~w}(UpXc EB3dFC@c;k- literal 0 HcmV?d00001 diff --git a/llvm/lldb-13.0.0.src.tar.xz.sig b/llvm/lldb-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..9418967a2a9c6d6bf01efb96f34c540f937e2404 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BrZ~zJk5TeJF zsfIzFiU8XW{wfor1<<+N|GDM#;(;)7T(o)4^Z^(a@4_7>A%}W1TsS@raq;xzN`5A8 zQFo^}NgYqygH&x@VQauMT~zP$uK5n0;d`-O! zm8k1S&W+CJbvR#RD2o`O+v9v24`I+nocnt*cY1-Jh2%^%^MSDE;4Vi5czGAj@Uwb@ z>nbcUqE!l2gVCryrbk5eTe!1?5{{QK?`*X-DyYz!Nw>o1G9(DDJ+Dz2N^=^7#5Nj2 z$5%NaRw{uBN|T}Rm9p9z5SPIej~=XIH*-kYZ^5}O=O?V08bw=8tnwK1V^fsjHj>(B z;ggHcw(sR~VKV@%I$0gJS#f1!>d#9kw=v?>0ClU(-(gtKBq@p_iPimK{B42Qeak70 zzqFF(*+{9i8)?yjhSZGWh8`xNhU&%1#pR%RNKCfom$i9nRMFEmb011-9IO23WcL-R z0PCR%bV;L$ijX~uxyL52&p%Zfb4Z$-;JOk|Yg%Xw@~|vBxFPSon2+KyVsm3n_(pEf z?RUNhmgBe6TxzkrqzW0&(9z;^iU$R&3K2FG*79p|qVl6=4p|V-?PHt5?+tokiMYmr EcN8%Yg#Z8m literal 0 HcmV?d00001 diff --git a/llvm/llvm-13.0.0.src.tar.xz.sig b/llvm/llvm-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..3fa23be4d37ccf53c1aa9e18fe74628d6d8e2a02 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BrZ~zJk5TeJF zsfIzFisq;g0HM}4Y+7i$r#d3@&PmldATXRqj3?CL!0Zu<|8mPt-5&6L-|Z8dX6O_9 zmk3=cP2#(ZMpu=^017Lj*%#iUww0e4%g(|a{SOTDfJa|2{+}Oa@pfLA^s>sXyGbh7>`I<= z&HDUt`L7NLNOB60O)#CFi>zrtqg1_W7jdFM+XYcT9p%Tq- z_x`*d{4lCRz`09R=PW(4{^bbiv;Mii@Dq`gl)dqt%-7SO(xa<99ckO%&r>?f=srxY zCg1hc9*cmlL!4beUg(uBIq*n*>mQ8xiE<|Y6JxpsbY*7GpUE)Ut%4@Y%R1DCMiOvP zY=+0&8Y6`>)Kwwuy!6HU=R}rhb!8QPG}e_UN0IsD>zE?fHBI6kWQ|Z!O<1Q&7rDe* E?)F_QlK=n! literal 0 HcmV?d00001 diff --git a/llvm/llvm.SlackBuild b/llvm/llvm.SlackBuild new file mode 100755 index 0000000..ac3ac64 --- /dev/null +++ b/llvm/llvm.SlackBuild @@ -0,0 +1,272 @@ +#!/bin/bash + +# Slackware build script for llvm + +# Copyright 2008-2016 Heinz Wiesinger, Amsterdam, The Netherlands +# Copyright 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2021 Patrick J. Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PKGNAM=llvm +VERSION=${VERSION:-$(echo llvm-*.tar.xz | rev | cut -f 4- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-3} + +NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# Building clangd will be determined automatically unless BUILD_CLANG is +# preset to YES or NO: +if [ -z $BUILD_CLANGD ]; then + if [ "$ARCH" = "i586" -o "$ARCH" = "i686" ]; then + BUILD_CLANGD=NO + else + BUILD_CLANGD=YES + fi +fi +if [ "$BUILD_CLANGD" = "NO" ]; then + CLANGD="-DCLANG_ENABLE_CLANGD=OFF" +fi + +# Building lld will be determined automatically unless BUILD_LLD is +# preset to YES or NO: +if [ -z $BUILD_LLD ]; then + if [ "$ARCH" = "i586" -o "$ARCH" = "i686" ]; then + BUILD_LLD=NO + else + BUILD_LLD=YES + fi +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC -mfpmath=sse -mmmx -msse -msse2 -msse3 -msse4 -msse4.1 -msse4.2" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +# Python2 short version: +PY2=$(python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' | cut -f 2 -d n | cut -f 1 -d /) +# Python3 short version: +PY3=$(python3 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' | cut -f 2 -d n | cut -f 1 -d /) + +# Sadly, glibc-2.30 exposed some sort of problem with clang and icecream. +# The symptom is a compile failure that says none of the types in +# are defined, even though they are. gcc/g++ seem unaffected. +# For now, not much choice other than to disable this. +# Don't use icecream: +#PATH=$(echo $PATH | sed "s|/usr/libexec/icecc/bin||g" | tr -s : | sed "s/^://g" | sed "s/:$//g") + +rm -rf $PKG +mkdir -p $TMP $PKG +cd $TMP +rm -rf $PKGNAM-${VERSION}.src $PKGNAM-${VERSION} +tar xvf $CWD/$PKGNAM-$VERSION.src.tar.xz || exit 1 + +cd $PKGNAM-${VERSION}/tools || cd $PKGNAM-${VERSION}.src/tools || exit 1 + tar xvf $CWD/clang-$VERSION.src.tar.xz || exit 1 + mv clang-${VERSION} clang 2>/dev/null || mv clang-${VERSION}.src clang || exit 1 + #tar xvf $CWD/flang-$VERSION.src.tar.xz || exit 1 + #mv flang-${VERSION} flang 2>/dev/null || mv flang-${VERSION}.src flang || exit 1 + tar xvf $CWD/lldb-$VERSION.src.tar.xz || exit 1 + mv lldb-${VERSION} lldb 2>/dev/null || mv lldb-${VERSION}.src lldb || exit 1 + if [ "$BUILD_LLD" = "YES" ]; then + tar xvf $CWD/lld-$VERSION.src.tar.xz || exit 1 + mv lld-${VERSION} lld 2>/dev/null || mv lld-${VERSION}.src lld || exit 1 + fi +cd ../ + +cd tools/clang/tools || exit 1 + tar xvf $CWD/clang-tools-extra-$VERSION.src.tar.xz || exit 1 + mv clang-tools-extra-${VERSION} extra 2>/dev/null \ + || mv clang-tools-extra-${VERSION}.src extra || exit 1 + # HACK # Otherwise the build fails because files aren't found. + rm -rf $TMP/clang-tools-extra + cp -a extra $TMP/clang-tools-extra +cd ../../../ + +cd projects || exit 1 + tar xvf $CWD/compiler-rt-$VERSION.src.tar.xz || exit 1 + mv compiler-rt-${VERSION} compiler-rt 2>/dev/null || mv compiler-rt-${VERSION}.src compiler-rt || exit 1 + tar xvf $CWD/openmp-$VERSION.src.tar.xz || exit 1 + mv openmp-${VERSION} openmp 2>/dev/null || mv openmp-${VERSION}.src openmp || exit 1 + tar xvf $CWD/libcxx-${VERSION}.src.tar.xz || exit 1 + mv libcxx-${VERSION} libcxx 2>/dev/null || mv libcxx-${VERSION}.src libcxx || exit 1 + tar xvf $CWD/libcxxabi-${VERSION}.src.tar.xz || exit 1 + mv libcxxabi-${VERSION} libcxxabi 2>/dev/null || mv libcxxabi-${VERSION}.src libcxxabi || exit 1 + tar xvf $CWD/polly-$VERSION.src.tar.xz || exit 1 + mv polly-${VERSION} polly 2>/dev/null || mv polly-${VERSION}.src polly || exit 1 + # We just need a header file from this... + tar xvf $CWD/libunwind-${VERSION}.src.tar.xz || exit 1 + mv libunwind-${VERSION} libunwind || mv libunwind-${VERSION}.src libunwind || exit 1 +cd ../ + +# Support GCC built for i586-slackware-linux: +cat $CWD/clang.toolchains.i586.triple.diff.gz | patch -p1 --verbose || exit 1 + +# Hack to fix build with polly. Maybe we should just not use polly... ? +cat $CWD/llvm.polly.hack.diff.gz | patch -p1 --verbose || exit 1 + +chown -R root:root . +find . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \+ + +mkdir build +cd build + mkdir include + # Copy this LLVM libunwind header or it won't be found: + cp -a ../projects/libunwind/include/mach-o include + # Nuke LLVM libunwind as it conflicts with the one already on the system: + rm -r ../projects/libunwind + cmake -GNinja \ + -DCMAKE_C_COMPILER="clang" \ + -DCMAKE_CXX_COMPILER="clang++" \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLLVM_LIBDIR_SUFFIX=${LIBDIRSUFFIX} \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DLLVM_USE_LINKER=gold \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_ENABLE_FFI=ON \ + -DLLVM_ENABLE_ASSERTIONS=OFF \ + -DLLVM_INSTALL_UTILS=ON \ + -DLLVM_BINUTILS_INCDIR=/usr/include \ + -DCLANG_RESOURCE_DIR="../lib${LIBDIRSUFFIX}/clang/${VERSION}" \ + -DLLVM_TARGETS_TO_BUILD="host;AMDGPU;BPF" \ + -DLLDB_USE_SYSTEM_SIX=1 \ + $CLANGD \ + .. || exit 1 + + "${NINJA:=ninja}" $NUMJOBS || exit 1 + DESTDIR=$PKG "$NINJA" install || exit 1 +cd .. + +# Add symlinks for $ARCH-slackware-linux-{clang,clang++}: +( cd $PKG/usr/bin + ln -sf clang $ARCH-slackware-linux-clang + ln -sf clang++ $ARCH-slackware-linux-clang++ +) + +# Install clang-static-analyzer: +for i in ccc c++; do + ln -s /usr/libexec/$i-analyzer \ + $PKG/usr/bin/$i-analyzer || exit 1 +done + +# Ensure lit-cpuid is installed: +if [ ! -r $PKG/usr/bin/lit-cpuid ]; then + cp -a build/bin/lit-cpuid $PKG/usr/bin/lit-cpuid + chown root:root $PKG/usr/bin/lit-cpuid + chmod 755 $PKG/usr/bin/lit-cpuid +fi +# Remove symlink to libgomp, which is already provided by gcc: +rm -f $PKG/usr/lib$LIBDIRSUFFIX/libgomp.so + +# Install Python bindings: +for pyver in ${PY2} ${PY3}; do + mkdir -p "$PKG/usr/lib$LIBDIRSUFFIX/python$pyver/site-packages" + cp -a tools/clang/bindings/python/clang "$PKG/usr/lib$LIBDIRSUFFIX/python$pyver/site-packages/" +done + +# Remove bundled python-six: +rm -f "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/six.py" + +# Compile Python scripts: +python -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/clang" +python -O -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/clang" +python3 -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY3}/site-packages/clang" +python3 -O -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY3}/site-packages/clang" +python -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/lldb" +python -O -m compileall "$PKG/usr/lib$LIBDIRSUFFIX/python${PY2}/site-packages/lldb" +python -m compileall "$PKG/usr/share/scan-view" +python -O -m compileall "$PKG/usr/share/scan-view" +python -m compileall "$PKG/usr/share/clang" +python -O -m compileall "$PKG/usr/share/clang" +python -m compileall "$PKG/usr/share/opt-viewer" +python -O -m compileall "$PKG/usr/share/opt-viewer" + +# Move man page directory: +mv $PKG/usr/share/man $PKG/usr/ + +# Strip binaries: +( cd $PKG + find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null +) + +# Compress manual pages: +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do + ln -s $( readlink $i ).gz $i.gz + rm $i +done + +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION/{clang,lldb,clang-tools-extra,compiler-rt,openmp,polly} +cp -a CREDITS* LICENSE* README* $PKG/usr/doc/$PKGNAM-$VERSION +cp -a tools/clang/{INSTALL,LICENSE,NOTES,README}* \ + $PKG/usr/doc/$PKGNAM-$VERSION/clang +cp -a tools/lldb/{CODE_OWNERS,INSTALL,LICENSE}* \ + $PKG/usr/doc/$PKGNAM-$VERSION/lldb +cp -a tools/clang/tools/extra/{CODE_OWNERS,LICENSE,README}* \ + $PKG/usr/doc/$PKGNAM-$VERSION/clang-tools-extra +cp -a projects/compiler-rt/{CODE_OWNERS,CREDITS,LICENSE,README}* \ + $PKG/usr/doc/$PKGNAM-$VERSION/compiler-rt +cp -a projects/openmp/{CREDITS,LICENSE}* \ + $PKG/usr/doc/$PKGNAM-$VERSION/openmp +cp -a projects/polly/{CREDITS,LICENSE,README}* \ + $PKG/usr/doc/$PKGNAM-$VERSION/polly +mv $PKG/usr/docs/llvm/* $PKG/usr/doc/$PKGNAM-$VERSION +rm -rf $PKG/usr/docs + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz diff --git a/llvm/llvm.polly.hack.diff b/llvm/llvm.polly.hack.diff new file mode 100644 index 0000000..eb607ca --- /dev/null +++ b/llvm/llvm.polly.hack.diff @@ -0,0 +1,12 @@ +--- ./projects/polly/lib/CMakeLists.txt.orig 2020-03-23 10:01:02.000000000 -0500 ++++ ./projects/polly/lib/CMakeLists.txt 2020-03-24 14:47:14.602756953 -0500 +@@ -139,7 +139,8 @@ + ) + + # Polly-ACC requires the NVPTX target to be present in the executable it is linked to +- set_property(TARGET bugpoint APPEND PROPERTY LINK_LIBRARIES LLVMTarget) ++ # Randomly commented to fix build lol ++ #set_property(TARGET bugpoint APPEND PROPERTY LINK_LIBRARIES LLVMTarget) + endif () + + # Create a loadable module Polly.so that can be loaded using diff --git a/llvm/llvm.url b/llvm/llvm.url new file mode 100644 index 0000000..835dd18 --- /dev/null +++ b/llvm/llvm.url @@ -0,0 +1,25 @@ +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/llvm-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/clang-tools-extra-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/compiler-rt-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/flang-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/lldb-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/openmp-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/polly-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/libcxx-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/libcxxabi-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/lld-13.0.0.src.tar.xz +https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/libunwind-13.0.0.src.tar.xz + +#http://llvm.org/releases/13.0.0/llvm-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/clang-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/clang-tools-extra-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/compiler-rt-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/flang-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/lldb-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/openmp-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/polly-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/libcxx-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/libcxxabi-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/lld-13.0.0.src.tar.xz +#http://llvm.org/releases/13.0.0/libunwind-13.0.0.src.tar.xz diff --git a/llvm/openmp-13.0.0.src.tar.xz.sig b/llvm/openmp-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..7cdf2002b6400fbb5517e75640553d8152e1a860 GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BraR3Sl5TeJF zsfIzFiiyP#0HKc*%0Y?)u}46pjmfMYokpD8#9b&XKw_-eDU?wp?UK0qjYl}zF(o^E zcMugS`Syif_5Rm7%9v1<0IzJw_%Ftwq$;6$) zRKplK+8RuK;N*@PMj6*wsFwY$jwab53 z9%4uILV8tH2V0x=OV1p#>5|s^{Lu!B5WE|kY~IL-9|tTk*Mr~@_~vY7@t71cA|UhK zQ6%daujoy5h7YE3PRAupgjg5srrN3W`X4H#y}|Uh!_TVa2TrcWM{)QhKQn(^F2KRN zBR0bsaZAK97PV0L%e7iW;!Wvn2!^}_8b|Ue8?{m9h-L*-pX?eYJ=N9c`lRE0*mO+~ zs$h_?Cju%`WNd};1}RuJgZ0jFl!%uSROlFy+s*wddPy@2R8>;2ILv8Nmh*k`42u=M zqsq{4hqOa{BDF@Pd0GC~Q$^?iG5IRF3scIr611GY5x|^9dSun>LPo6uMR8C-qpiyQ z4IBt7k&337#_w{0AZ=U3<003-*@TiFm>^E8Yl=?%K<*fSJET~;_I6zCG8UR#(KG;% zq#lLD?DXZ(Zk}aJ7;>4Z*rk0Jkz$#A+ycZAFBa&0NxBt){4}16o+oQIo5JieY0h6| E^E4R|l>h($ literal 0 HcmV?d00001 diff --git a/llvm/polly-13.0.0.src.tar.xz.sig b/llvm/polly-13.0.0.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..83b8f39682176b9aa26a86a60ea153af46b1804e GIT binary patch literal 566 zcmV-60?GY}0y6{v0SEvc79j*jP9iaCzek0rjBbvi$CRmtL7j>P0%2BraR3Sl5TeJF zsfIzFiZ|U4|8TrLb3dL?IUBs-uVBXwlFZJ>FPGfCjUb1qK%L*b=+(b2Gg$AnVw4u2 z=!;nEq-;~hW#Qk_+Jzou2;U~@ZiZ1BW&c4F z-iuPxcb$%iFnbMH^ZsSb-#}!q-4d!&uTx}Za}g4pps*PlA$N3zUk50;C&SX)u9rNC z55IhyiPz}Y*J*Gb=Fw9`v|T%o^t}o%GVHSGj?k?*%tsuK&D3p@c1>ZxGr6^S{w_!zh(8-!b?SJ$D(B?;VuX zI-59M!xp|d_D?w2ctTX2dizo*$6d7@VgYC!@HHbD?lbx_bFDnW_A@mSU0D{t{Jqyx zeP=5DNx(}bvu$uj&$sW+e$nt)-P}tW7k>=)uI|FrIYv +# 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 ''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 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. + + +PRGNAM=lua +VERSION=${VERSION:-5.1.5} +BUILD=${BUILD:-2} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC -rdynamic" + LIBDIRSUFFIX="64" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-${VERSION}.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \+ + +patch --verbose -p1 -i $CWD/path${LIBDIRSUFFIX}.patch +#sed -i 's/CFLAGS= -O2 -Wall $(MYCFLAGS)/CFLAGS= $(SLKCFLAGS) $(MYCFLAGS)/' src/Makefile +export SLKCFLAGS +export SLKLDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" + +make -j$(nproc) linux \ + INSTALL_TOP=/usr \ + INSTALL_LIB=/usr/lib${LIBDIRSUFFIX} \ + INSTALL_LMOD=/usr/share/lua/5.1 \ + INSTALL_CMOD=/usr/lib${LIBDIRSUFFIX}/lua/5.1 + +make -j$(nproc) linux install \ + INSTALL_TOP=$PKG/usr \ + INSTALL_LIB=$PKG/usr/lib${LIBDIRSUFFIX} \ + INSTALL_LMOD=$PKG/usr/share/lua/5.1 \ + INSTALL_CMOD=$PKG/usr/lib${LIBDIRSUFFIX}/lua/5.1 + +# Now let's build the shared library +mkdir -p shared +cd shared + ar -x $PKG/usr/lib${LIBDIRSUFFIX}/liblua.a + gcc -ldl -lreadline -lhistory -lncurses -lm -shared *.o -o liblua.so.$VERSION + install -Dpm 0755 liblua.so.$VERSION $PKG/usr/lib${LIBDIRSUFFIX} + ( cd $PKG/usr/lib${LIBDIRSUFFIX} + ln -s liblua.so.$VERSION liblua.so.5.1 + ln -s liblua.so.$VERSION liblua.so.5 + ln -s liblua.so.$VERSION liblua.so + ) +cd .. + +# and install the pkgconfig file +install -Dpm 0644 etc/lua.pc $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig/lua.pc + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/{extras,html} +cp -a COPYRIGHT HISTORY INSTALL README $PKG/usr/doc/$PRGNAM-$VERSION +cp -a doc/*.html doc/logo.gif doc/lua.css $PKG/usr/doc/$PRGNAM-$VERSION/html +cp -a etc test $PKG/usr/doc/$PRGNAM-$VERSION/extras + +install -Dpm 0644 $CWD/$PRGNAM.SlackBuild $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/lua/lua.info b/lua/lua.info new file mode 100644 index 0000000..90cca40 --- /dev/null +++ b/lua/lua.info @@ -0,0 +1,10 @@ +PRGNAM="lua" +VERSION="5.1.5" +HOMEPAGE="http://www.lua.org" +DOWNLOAD="http://www.lua.org/ftp/lua-5.1.5.tar.gz" +MD5SUM="2e115fe26e435e33b0d5c022e4490567" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Matteo Bernardini" +EMAIL="ponce@slackbuilds.org" diff --git a/lua/path.patch b/lua/path.patch new file mode 100644 index 0000000..0be8052 --- /dev/null +++ b/lua/path.patch @@ -0,0 +1,56 @@ +diff -ruNp lua-5.1.5/Makefile lua-5.1.5.new/Makefile +--- lua-5.1.5/Makefile 2012-02-10 13:50:23.000000000 +0400 ++++ lua-5.1.5.new/Makefile 2023-11-07 02:08:47.410419337 +0300 +@@ -9,7 +9,7 @@ PLAT= none + + # Where to install. The installation starts in the src and doc directories, + # so take care if INSTALL_TOP is not an absolute path. +-INSTALL_TOP= /usr/local ++INSTALL_TOP= /usr + INSTALL_BIN= $(INSTALL_TOP)/bin + INSTALL_INC= $(INSTALL_TOP)/include + INSTALL_LIB= $(INSTALL_TOP)/lib +diff -ruNp lua-5.1.5/etc/lua.pc lua-5.1.5.new/etc/lua.pc +--- lua-5.1.5/etc/lua.pc 2012-02-10 13:50:30.000000000 +0400 ++++ lua-5.1.5.new/etc/lua.pc 2023-11-07 02:10:11.503423636 +0300 +@@ -8,7 +8,7 @@ V= 5.1 + R= 5.1.5 + + # 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 -ruNp lua-5.1.5/src/Makefile lua-5.1.5.new/src/Makefile +--- lua-5.1.5/src/Makefile 2012-02-14 00:41:22.000000000 +0400 ++++ lua-5.1.5.new/src/Makefile 2023-11-07 02:07:21.778414960 +0300 +@@ -8,14 +8,14 @@ + PLAT= none + + CC= gcc +-CFLAGS= -O2 -Wall $(MYCFLAGS) ++CFLAGS= $(SLKCFLAGS) $(MYCFLAGS) + AR= ar rcu + RANLIB= ranlib + RM= rm -f + LIBS= -lm $(MYLIBS) + + MYCFLAGS= +-MYLDFLAGS= ++MYLDFLAGS=$(SLKLDFLAGS) + MYLIBS= + + # == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE ========= +diff -ruNp lua-5.1.5/src/luaconf.h lua-5.1.5.new/src/luaconf.h +--- lua-5.1.5/src/luaconf.h 2008-02-11 19:25:08.000000000 +0300 ++++ lua-5.1.5.new/src/luaconf.h 2023-11-07 02:09:40.687422060 +0300 +@@ -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 --git a/lua/path64.patch b/lua/path64.patch new file mode 100644 index 0000000..8da763a --- /dev/null +++ b/lua/path64.patch @@ -0,0 +1,83 @@ +diff -ruNp lua-5.1.5/Makefile lua-5.1.5.new/Makefile +--- lua-5.1.5/Makefile 2012-02-10 13:50:23.000000000 +0400 ++++ lua-5.1.5.new/Makefile 2023-11-07 01:55:13.408377728 +0300 +@@ -9,16 +9,16 @@ PLAT= none + + # Where to install. The installation starts in the src and doc directories, + # so take care if INSTALL_TOP is not an absolute path. +-INSTALL_TOP= /usr/local ++INSTALL_TOP= /usr + INSTALL_BIN= $(INSTALL_TOP)/bin + INSTALL_INC= $(INSTALL_TOP)/include +-INSTALL_LIB= $(INSTALL_TOP)/lib ++INSTALL_LIB= $(INSTALL_TOP)/lib64 + INSTALL_MAN= $(INSTALL_TOP)/man/man1 + # + # You probably want to make INSTALL_LMOD and INSTALL_CMOD consistent with + # LUA_ROOT, LUA_LDIR, and LUA_CDIR in luaconf.h (and also with etc/lua.pc). + INSTALL_LMOD= $(INSTALL_TOP)/share/lua/$V +-INSTALL_CMOD= $(INSTALL_TOP)/lib/lua/$V ++INSTALL_CMOD= $(INSTALL_TOP)/lib64/lua/$V + + # How to install. If your install program does not support "-p", then you + # may have to run ranlib on the installed liblua.a (do "make ranlib"). +diff -ruNp lua-5.1.5/etc/lua.pc lua-5.1.5.new/etc/lua.pc +--- lua-5.1.5/etc/lua.pc 2012-02-10 13:50:30.000000000 +0400 ++++ lua-5.1.5.new/etc/lua.pc 2023-11-07 01:55:13.408377728 +0300 +@@ -8,17 +8,17 @@ V= 5.1 + R= 5.1.5 + + # 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 ++INSTALL_LIB= ${prefix}/lib64 + INSTALL_MAN= ${prefix}/man/man1 + INSTALL_LMOD= ${prefix}/share/lua/${V} +-INSTALL_CMOD= ${prefix}/lib/lua/${V} ++INSTALL_CMOD= ${prefix}/lib64/lua/${V} + + # canonical vars + exec_prefix=${prefix} +-libdir=${exec_prefix}/lib ++libdir=${exec_prefix}/lib64 + includedir=${prefix}/include + + Name: Lua +diff -ruNp lua-5.1.5/src/Makefile lua-5.1.5.new/src/Makefile +--- lua-5.1.5/src/Makefile 2012-02-14 00:41:22.000000000 +0400 ++++ lua-5.1.5.new/src/Makefile 2023-11-07 02:04:00.088404650 +0300 +@@ -8,14 +8,14 @@ + PLAT= none + + CC= gcc +-CFLAGS= -O2 -Wall $(MYCFLAGS) ++CFLAGS= $(SLKCFLAGS) $(MYCFLAGS) + AR= ar rcu + RANLIB= ranlib + RM= rm -f + LIBS= -lm $(MYLIBS) + + MYCFLAGS= +-MYLDFLAGS= ++MYLDFLAGS=$(SLKLDFLAGS) + MYLIBS= + + # == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE ========= +diff -ruNp lua-5.1.5/src/luaconf.h lua-5.1.5.new/src/luaconf.h +--- lua-5.1.5/src/luaconf.h 2008-02-11 19:25:08.000000000 +0300 ++++ lua-5.1.5.new/src/luaconf.h 2023-11-07 01:55:13.409377728 +0300 +@@ -94,9 +94,9 @@ + ".\\?.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_CDIR LUA_ROOT "lib64/lua/5.1/" + #define LUA_PATH_DEFAULT \ + "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" diff --git a/lua/slack-desc b/lua/slack-desc new file mode 100644 index 0000000..e12cce2 --- /dev/null +++ b/lua/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +lua: lua (a powerful, fast, light-weight, embeddable scripting language) +lua: +lua: Lua combines simple procedural syntax with powerful data description +lua: constructs based on associative arrays and extensible semantics. +lua: Lua is dynamically typed, runs by interpreting bytecode for a +lua: register-based virtual machine, and has automatic memory management +lua: with incremental garbage collection, making it ideal for +lua: configuration, scripting, and rapid prototyping. +lua: +lua: +lua: diff --git a/lzop/README b/lzop/README new file mode 100644 index 0000000..a3f0588 --- /dev/null +++ b/lzop/README @@ -0,0 +1,5 @@ +lzop is a LZO archiver. It uses the LZO data compression library +for compression services, and its main advantages over gzip are +much higher compression and decompression speed (at the cost of +some compression ratio). +lzop is the fastest (de)compresser around. diff --git a/lzop/lzop.SlackBuild b/lzop/lzop.SlackBuild new file mode 100644 index 0000000..a86d8db --- /dev/null +++ b/lzop/lzop.SlackBuild @@ -0,0 +1,102 @@ +#!/bin/sh + +# Slackware build script for lzop + +# Copyright (c) 2011-2017 LEVAI Daniel +# Copyright 2022 Sergei Fedosoff +# 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 ''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 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. + +PRGNAM=lzop +VERSION=${VERSION:-1.04} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \+ + +CFLAGS="-g $SLKCFLAGS -flto -rdynamic" \ +CXXFLAGS="-g $SLKCFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +./configure \ + --prefix=/usr \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +DESTDIR=$PKG make install + +strip --strip-unneeded $PKG/usr/bin/lzop + +find $PKG/usr/man -type f -exec gzip -9 {} \+ + +mkdir -p -m 755 $PKG/usr/doc/$PRGNAM-$VERSION +cp AUTHORS COPYING INSTALL NEWS README THANKS \ + $PKG/usr/doc/$PRGNAM-$VERSION/ +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +find $PKG/usr/doc -type f -exec chmod 0644 {} \+ + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/lzop/lzop.info b/lzop/lzop.info new file mode 100644 index 0000000..14f47d7 --- /dev/null +++ b/lzop/lzop.info @@ -0,0 +1,10 @@ +PRGNAM="lzop" +VERSION="1.04" +HOMEPAGE="http://www.lzop.org/" +DOWNLOAD="http://www.lzop.org/download/lzop-1.04.tar.gz" +MD5SUM="271eb10fde77a0a96b9cbf745e719ddf" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="LEVAI Daniel" +EMAIL="leva@ecentrum.hu" diff --git a/lzop/slack-desc b/lzop/slack-desc new file mode 100644 index 0000000..37a5a06 --- /dev/null +++ b/lzop/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +lzop: lzop (LZO archiver) +lzop: +lzop: lzop uses the LZO data compression library for compression services, +lzop: and its main advantages over gzip are much higher compression and +lzop: decompression speed (at the cost of some compression ratio). +lzop: lzop is the fastest (de)compresser around. +lzop: +lzop: Homepage: http://www.lzop.org/ +lzop: +lzop: +lzop: diff --git a/meson/meson.SlackBuild b/meson/meson.SlackBuild new file mode 100755 index 0000000..6e0faba --- /dev/null +++ b/meson/meson.SlackBuild @@ -0,0 +1,80 @@ +#!/bin/bash + +# Copyright 2017 Heinz Wiesinger, Amsterdam, NL +# Copyright 2017, 2018 Patrick J. Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PKGNAM=meson +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +rm -rf $PKG +mkdir -p $TMP $PKG +cd $TMP +rm -rf $PKGNAM-$VERSION +tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1 +cd $PKGNAM-$VERSION || exit 1 + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +python3 setup.py install --root=$PKG || exit 1 + +mv $PKG/usr/share/man $PKG/usr/ +rmdir $PKG/usr/share 2> /dev/null + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a contributing.txt COPYING PKG-INFO README* \ + $PKG/usr/doc/$PKGNAM-$VERSION +find $PKG/usr/doc/$PKGNAM-$VERSION -type f -exec chmod 0644 {} \+ + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz diff --git a/meson/meson.url b/meson/meson.url new file mode 100644 index 0000000..a5c91cf --- /dev/null +++ b/meson/meson.url @@ -0,0 +1 @@ +https://github.com/mesonbuild/meson diff --git a/meson/slack-desc b/meson/slack-desc new file mode 100644 index 0000000..17469f9 --- /dev/null +++ b/meson/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +meson: meson (A high performance build system) +meson: +meson: Meson is a cross-platform build system designed to be both as fast +meson: and as user friendly as possible. It supports many languages and +meson: compilers, including GCC and Clang. Its build definitions are written +meson: in a simple non-turing complete domain specific language. +meson: +meson: Homepage: http://mesonbuild.com/ +meson: +meson: +meson: diff --git a/nginx/README b/nginx/README new file mode 100644 index 0000000..74a77e2 --- /dev/null +++ b/nginx/README @@ -0,0 +1,34 @@ +nginx [engine x] is a high-performance HTTP server and reverse proxy +as well as an IMAP/POP3 proxy server. + +By default, nginx will use the "nobody" user and group accounts. You may +specify alternate values on the command line if desired; for example: + + NGINXUSER=backup NGINXGROUP=backup ./nginx.SlackBuild + +Regardless of which user and group you decide to use, you will need to make +sure they exist on both the build system and the target system. + +Geoip support is now available as an option using the GeopIP package. If you wish +to enable GeoIP the pass GEOIP variable to the slackbuild: + + GEOIP=yes ./nginx.SlackBuild + +Support for gperftools is available as an option using the gperftools package. +If you wish to enable gperftools pass the GPERF variable to the slackbuild: + + GPERF=yes ./nginx.SlackBuild + +Extra modules not included with stock nginx can be added by passing them as a +variable to the slackbuild as a space separated list of full paths to modules. +List of extra 3rd party modules available at http://wiki.nginx.org/3rdPartyModules. + + ADDMODULE="/tmp/passenger-release-5.0.13/ext/nginx" ./nginx.SlackBuild + +Using the optional dynamic loadable module support in nginx >= 1.10.0. Understand +that dynamic modules are a new feature in nginx and issues may arise until further +testing is done. + + DYNAMIC=yes ./nginx.SlackBuild + +Optional dependency: libwebp (requires gd to be recompiled) diff --git a/nginx/doinst.sh b/nginx/doinst.sh new file mode 100644 index 0000000..d7a169f --- /dev/null +++ b/nginx/doinst.sh @@ -0,0 +1,35 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname ${NEW})/$(basename ${NEW} .new)" + if [ -e ${OLD} ]; then + cp -a ${OLD} ${NEW}.incoming + cat ${NEW} > ${NEW}.incoming + mv ${NEW}.incoming ${NEW} + fi + config ${NEW} +} + +preserve_perms etc/rc.d/rc.nginx.new +config etc/logrotate.d/nginx.new +config etc/nginx/fastcgi_params.new +config etc/nginx/fastcgi.conf.new +config etc/nginx/mime.types.new +config etc/nginx/nginx.conf.new +config etc/nginx/koi-utf.new +config etc/nginx/koi-win.new +config etc/nginx/scgi_params.new +config etc/nginx/uwsgi_params.new +config etc/nginx/win-utf.new diff --git a/nginx/nginx.SlackBuild b/nginx/nginx.SlackBuild new file mode 100755 index 0000000..470412b --- /dev/null +++ b/nginx/nginx.SlackBuild @@ -0,0 +1,250 @@ +#!/bin/bash -ex + +# Slackware build script for nginx + +# Copyright 2008 Cherife Li +# Copyright 2011 Diogo Leal +# Copyright 2012-13 Francisco Ambrozio +# Copyright 2014-2017 Larry Hajali +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +# Special thanks to Thomas Morper for some configuration adjustments tips + +PRGNAM=nginx +VERSION=${VERSION:-1.24.0} +BUILD=${BUILD:-2} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-g -O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +# Remove -Werror from CFLAGS. +# https://trac.nginx.org/nginx/ticket/1259 +sed -i '/-Werror/d' auto/cc/gcc + +# Fix the nginx.conf file for html and virtual server directory. +sed -i \ + -e '/root[ ]*html/s|html;|/var/www/&|' \ + -e '$s|.*| include /etc/nginx/conf.d/\*.conf;\n&|' conf/$PRGNAM.conf + +# Add if dynamic modules are used. +if [ "${DYNAMIC:-no}" == "yes" ]; then + DYNAMIC_MODULE=${DYNAMIC_MODULE:-=dynamic} + sed -i 's|^events.*|include /etc/nginx/modules/\*.conf;\n\n&|' conf/$PRGNAM.conf +else + DYNAMIC_MODULE="" +fi + +# Enable GeoIP support. +if [ "${GEOIP:-yes}" == "yes" ]; then + GEOIP_MOD="--with-http_geoip_module${DYNAMIC_MODULE} + --with-stream_geoip_module${DYNAMIC_MODULE}" +else + GEOIP_MOD="" +fi + +# Add extra modules not included in nginx. +ADDMODULE=${ADDMODULE:-} +if [ "$DYNAMIC" == "yes" ]; then + ADD_MODULE="--add-dynamic-module=$ADDMODULE + --modules-path=/usr/lib${LIBDIRSUFFIX}/$PRGNAM/modules" +else + ADD_MODULE="--add-module=$ADDMODULE" +fi + +# Enable gperftools support. +if [ "${GPERF:-no}" == "yes" ]; then + GPERF_MOD="--with-google_perftools_module" +else + GPERF_MOD="" +fi + + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-O2 -Wl,-E -Wl,--no-as-needed" \ +./configure \ + --prefix=/usr \ + --sbin-path=/usr/sbin/nginx \ + --conf-path=/etc/nginx/nginx.conf \ + --pid-path=/run/nginx.pid \ + --lock-path=/var/lock/subsys \ + --user=apache \ + --group=apache \ + --error-log-path=/var/log/nginx/error.log \ + --http-log-path=/var/log/nginx/access.log \ + --http-client-body-temp-path=/var/lib/nginx/client_body \ + --http-proxy-temp-path=/var/lib/nginx/proxy \ + --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ + --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \ + --http-scgi-temp-path=/var/lib/nginx/scgi \ + --with-file-aio \ + --with-select_module \ + --with-poll_module \ + --with-http_ssl_module \ + --with-http_v2_module \ + --with-http_realip_module \ + --with-http_addition_module \ + --with-http_xslt_module${DYNAMIC_MODULE} \ + --with-http_image_filter_module${DYNAMIC_MODULE} \ + --with-http_sub_module \ + --with-http_dav_module \ + --with-http_flv_module \ + --with-http_mp4_module \ + --with-http_gunzip_module \ + --with-http_gzip_static_module \ + --with-http_auth_request_module \ + --with-http_random_index_module \ + --with-http_secure_link_module \ + --with-http_degradation_module \ + --with-http_slice_module \ + --with-http_stub_status_module \ + --with-http_perl_module${DYNAMIC_MODULE} \ + --with-mail${DYNAMIC_MODULE} \ + --with-mail_ssl_module \ + --with-stream${DYNAMIC_MODULE} \ + --with-stream_ssl_module \ + --with-stream_realip_module \ + --with-stream_ssl_preread_module \ + --with-cpp_test_module \ + --with-compat \ + --with-debug \ + --with-pcre \ + --with-pcre-jit \ + --with-libatomic \ + $GEOIP_MOD \ + $GPERF_MOD \ + $ADD_MODULE + +make -j$(nproc) +make -j$(nproc) install \ + DESTDIR=$PKG \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN3DIR=/usr/man/man3 + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +install -Dpm 0644 objs/$PRGNAM.8 $PKG/usr/man/man8 +find $PKG/usr/man -type f -exec gzip -9 {} \+ + +find $PKG -name perllocal.pod \ + -o -name ".packlist" \ + -o -name "*.bs" \ + | xargs rm -f {} + +find $PKG -perm 444 -exec chmod 0644 {} \+ +find $PKG -perm 555 -exec chmod 0755 {} \+ + +# Make the temp path. +install -dm 0755 -o apache -g apache $PKG/var/lib/$PRGNAM + +# Move html directory +mkdir -p $PKG/var/www +mv $PKG/usr/html $PKG/var/www + +# Add an init script +install -Dpm 0644 $CWD/rc.nginx $PKG/etc/rc.d/rc.nginx.new + +install -Dpm 0644 $CWD/nginx.logrotate $PKG/etc/logrotate.d/nginx.new + +# Set the permissions for the log directory. +install -dm 0755 -o apache $PKG/var/log/$PRGNAM + +# Create sub-directory for virtual servers. +install -dm 0755 $PKG/etc/$PRGNAM/conf.d + +install -Dpm 0644 $CWD/nginx.SlackBuild $PKG/usr/doc/nginx-$VERSION/nginx.SlackBuild +cp -a CHANGES* LICENSE README $PKG/usr/doc/nginx-$VERSION + +install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc +install -Dpm 0644 $CWD/slack-required $PKG/install/slack-required +install -Dpm 0644 $CWD/doinst.sh $PKG/install/doinst.sh + +# Create modules directory and config files. +# Unfortunately, we have to use full paths rather then relative paths +# for nginx dynamic modules, or else we get the following error: +# $ sudo /usr/sbin/nginx -t +# nginx: [emerg] dlopen() "/usr/modules/ngx_stream_module.so" failed (/usr/modules/ngx_stream_module.so: cannot open shared object file: No such file or directory) in /etc/nginx/modules/mod-stream.conf:1 +# nginx: configuration file /etc/nginx/nginx.conf test failed +# Source: https://trac.nginx.org/nginx/ticket/961 +if [ "$DYNAMIC" == "yes" ]; then + mkdir $PKG/etc/$PRGNAM/modules + for module in $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/modules/*; do + MODULE_NAME=$(basename $module | sed 's|\.so||' | tr _ -) + MODULE_DIR=$(dirname $module | sed "s|$PKG||") + echo "load_module \"${MODULE_DIR}/$(basename $module)\";" > \ + $PKG/etc/$PRGNAM/modules/${MODULE_NAME}.conf + echo "config etc/$PRGNAM/modules/${MODULE_NAME}.conf.new" >> $PKG/install/doinst.sh + done +fi + +# Don't clobber config files +for i in $(find $PKG/etc/$PRGNAM -type f ! -name "*\.default"); do + mv "$i" "$i".new +done + +# Fixup user +sed 's/^.user *nobody/user apache/' $PKG/etc/nginx/nginx.conf.new +sed 's/^.user *nobody/user apache/' $PKG/etc/nginx/nginx.conf.default + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/nginx/nginx.info b/nginx/nginx.info new file mode 100644 index 0000000..b3d56c2 --- /dev/null +++ b/nginx/nginx.info @@ -0,0 +1,11 @@ +PRGNAM="nginx" +VERSION="1.24.0" +HOMEPAGE="http://nginx.org/" +DOWNLOAD="http://nginx.org/download/nginx-1.24.0.tar.gz" +MD5SUM="" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +BUILDREQUIRES="GeoIP" +REQUIRES="GeoIP" +MAINTAINER="Larry Hajali" +EMAIL="larryhaja[at]gmail[dot]com" diff --git a/nginx/nginx.logrotate b/nginx/nginx.logrotate new file mode 100644 index 0000000..0a9ad9e --- /dev/null +++ b/nginx/nginx.logrotate @@ -0,0 +1,13 @@ +/var/log/nginx/*.log { + su apache apache + daily + nodateext + rotate 4 + notifempty + compress + delaycompress + sharedscripts + postrotate + /etc/rc.d/rc.nginx rotate + endscript +} diff --git a/nginx/rc.nginx b/nginx/rc.nginx new file mode 100644 index 0000000..ff537eb --- /dev/null +++ b/nginx/rc.nginx @@ -0,0 +1,132 @@ +#!/bin/sh +# +# Nginx daemon control script. +# Written for Slackware Linux by Cherife Li . +# Updated by Sergei Fedosoff + +BIN=/usr/sbin/nginx +CONF=/etc/nginx/nginx.conf +PID=/run/nginx.pid +LOGDIR=/var/log/nginx +VARDIR=/var/lib/nginx +USER=apache + +nginx_start() { + # Sanity checks. + if [ ! -r $CONF ]; then # no config file, exit: + echo "$CONF does not appear to exist. Abort." + exit 1 + fi + + if [ -s $PID ]; then + echo "Nginx appears to already be running?" + exit 1 + fi + + if [ -d $LOGDIR ]; then + chmod -R $USER $LOGDIR + else + install -dm 0755 -o $USER $LOGDIR + fi + + if [ -d $VARDIR ]; then + chown -R $USER $VARDIR + else + install -dm 0755 -o $USER $VARDIR + fi + + echo "Starting Nginx server daemon..." + if [ -x $BIN ]; then + $BIN -c $CONF + fi +} + +nginx_test_conf() { + echo "Checking configuration for correct syntax and" + echo "then trying to open files referenced in configuration..." + $BIN -t -c $CONF +} + +nginx_term() { + echo "Shutdown Nginx quickly..." + kill -TERM $(cat $PID) +} + +nginx_stop() { + echo "Shutdown Nginx gracefully..." + if [ -x $BIN ]; then + $BIN -s quit + else + kill -QUIT $(cat $PID) 2 >/dev/null + fi +} + +nginx_reload() { + echo "Reloading Nginx configuration..." + if [ -x $BIN ]; then + $BIN -s reload + else + kill -HUP $(cat $PID) + fi +} + +nginx_upgrade() { + echo "Upgrading to the new Nginx binary." + echo "Make sure the Nginx binary has been replaced with new one" + echo "or Nginx server modules were added/removed." + kill -USR2 $(cat $PID) + sleep 3 + kill -QUIT $(cat $PID.oldbin) +} + +nginx_rotate() { + echo "Rotating Nginx logs..." + if [ -x $BIN ]; then + $BIN -s reopen + else + kill -USR1 $(cat $PID) + fi +} + +nginx_restart() { + nginx_stop + for i in 1 2 3; do + if [ -e $PID ]; then + /usr/bin/echo -n "." + sleep 1 + else + break + fi + done + echo + nginx_start +} + +case "$1" in + check) + nginx_test_conf + ;; + start) + nginx_start + ;; + term) + nginx_term + ;; + stop) + nginx_stop + ;; + reload) + nginx_reload + ;; + restart) + nginx_restart + ;; + upgrade) + nginx_upgrade + ;; + rotate) + nginx_rotate + ;; + *) + echo "usage: `basename $0` {check|start|term|stop|reload|restart|upgrade|rotate}" +esac diff --git a/nginx/slack-desc b/nginx/slack-desc new file mode 100644 index 0000000..d351d33 --- /dev/null +++ b/nginx/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +nginx: nginx (http/imap/pop3 proxy) +nginx: +nginx: Nginx [engine x] is a high-performance HTTP server and reverse proxy, +nginx: as well as an IMAP/POP3 proxy server. +nginx: +nginx: Nginx was written by Igor Sysoev. +nginx: +nginx: Homepage: http://nginx.net/ +nginx: +nginx: +nginx: diff --git a/nginx/slack-required b/nginx/slack-required new file mode 100644 index 0000000..35480be --- /dev/null +++ b/nginx/slack-required @@ -0,0 +1 @@ +GeoIP diff --git a/ngircd/README b/ngircd/README new file mode 100644 index 0000000..39f5d90 --- /dev/null +++ b/ngircd/README @@ -0,0 +1,12 @@ +ngircd (Next Generation IRC Daemon) + +ngIRCd is a portable IRC daemon written from scratch. It is easy to +configure, supports server links (even with original ircds), and runs +on hosts with changing IP addresses (such as dial-in networks). + +This defaults to using gnutls for SSL support; if you prefer to use +openssl (which will result in a non-redistributable package), then +pass "SSLTYPE=openssl" to the script when running it. + +libident is an optional dependency; to enable it, pass IDENT=YES to +the build script. diff --git a/ngircd/doinst.sh b/ngircd/doinst.sh new file mode 100644 index 0000000..516b0d4 --- /dev/null +++ b/ngircd/doinst.sh @@ -0,0 +1,13 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} +config etc/ngircd.conf.new diff --git a/ngircd/ngircd.SlackBuild b/ngircd/ngircd.SlackBuild new file mode 100644 index 0000000..af9013b --- /dev/null +++ b/ngircd/ngircd.SlackBuild @@ -0,0 +1,116 @@ +#!/bin/sh + +# Slackware build script for ngircd + +# Written by /dev/rob0 + +# 2022 Copyright Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=ngircd +VERSION=${VERSION:-26.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +do_ident="without-ident" +[ "$IDENT" == "YES" ] && do_ident="with-ident" + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +export CFLAGS="-g $SLKCFLAGS" +export CPPFLAGS="-g $SLKCFLAGS" +export LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --with-openssl \ + --enable-ipv6 \ + --with-syslog \ + --without-tcp-wrappers \ + --with-iconv \ + --without-pam \ + --${do_ident} \ + --build=$ARCH-slackware-linux + +make -j${nproc} +make install-strip DESTDIR=$PKG + +# Don't clobber the config file on upgrades +mv $PKG/etc/ngircd.conf $PKG/etc/ngircd.conf.new + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a AUTHORS ChangeLog README.md COPYING INSTALL.md NEWS doc/*.txt \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/ngircd/ngircd.info b/ngircd/ngircd.info new file mode 100644 index 0000000..bc416ca --- /dev/null +++ b/ngircd/ngircd.info @@ -0,0 +1,10 @@ +PRGNAM="ngircd" +VERSION="26.1" +HOMEPAGE="https://ngircd.barton.de/" +DOWNLOAD="https://ngircd.barton.de/pub/ngircd/ngircd-26.1.tar.gz" +MD5SUM="848475081afc35833a1bde500ae06841" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/ngircd/slack-desc b/ngircd/slack-desc new file mode 100644 index 0000000..709e5ad --- /dev/null +++ b/ngircd/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +ngircd: ngircd (Next Generation IRC Daemon) +ngircd: +ngircd: ngIRCd is a portable IRC daemon written from scratch. It is easy to +ngircd: configure, supports server links (even with original ircds) and runs +ngircd: on hosts with changing IP addresses (such as dial-in networks). +ngircd: +ngircd: https://ngircd.barton.de/ +ngircd: +ngircd: +ngircd: +ngircd: diff --git a/nload/README b/nload/README new file mode 100644 index 0000000..6c2bb56 --- /dev/null +++ b/nload/README @@ -0,0 +1,5 @@ +nload is a console application which monitors network traffic +and bandwidth usage in real time. It visualizes the in and +outgoing traffic using two graphs and provides additional +info like total amount of transfered data an min/max network +usage. diff --git a/nload/nload.SlackBuild b/nload/nload.SlackBuild new file mode 100644 index 0000000..47a1623 --- /dev/null +++ b/nload/nload.SlackBuild @@ -0,0 +1,105 @@ +#!/bin/sh + +# Slackware build script for + +# Written by Michales Michaloudes korgie@gmail.com +# Modified by Robby Workman +# 2022 Copyright Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=nload +VERSION=${VERSION:-0.7.4} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + AUTHORS COPYING ChangeLog NEWS README \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/nload/nload.info b/nload/nload.info new file mode 100644 index 0000000..5d6557d --- /dev/null +++ b/nload/nload.info @@ -0,0 +1,10 @@ +PRGNAM="nload" +VERSION="0.7.4" +HOMEPAGE="https://sourceforge.net/projects/nload/" +DOWNLOAD="https://downloads.sourceforge.net/nload/nload-0.7.4.tar.gz" +MD5SUM="3c733c528f244ca5a4f76bf185729c39" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/nload/slack-desc b/nload/slack-desc new file mode 100644 index 0000000..cc5f781 --- /dev/null +++ b/nload/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +nload: nload (network traffic monitor) +nload: +nload: nload is a console application which monitors network traffic +nload: and bandwidth usage in real time. It visualizes the in and +nload: outgoing traffic using two graphs and provides additional +nload: info like total amount of transfered data an min/max network +nload: usage. +nload: +nload: Homepage: https://sourceforge.net/projects/nload/ +nload: +nload: diff --git a/nodejs/README b/nodejs/README new file mode 100644 index 0000000..19aa105 --- /dev/null +++ b/nodejs/README @@ -0,0 +1,8 @@ +Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. + +Node.js uses an event-driven, non-blocking I/O model that makes it +lightweight and efficient. Node.js' package ecosystem, npm, is the +largest ecosystem of open source libraries in the world. + +NOTE: This version uses an internal OpenSSL version instead of +the one provided in Slackware package. diff --git a/nodejs/nodejs.SlackBuild b/nodejs/nodejs.SlackBuild new file mode 100755 index 0000000..884636d --- /dev/null +++ b/nodejs/nodejs.SlackBuild @@ -0,0 +1,125 @@ +#!/bin/sh + +set -e + +# Slackware build script for nodejs +# 2022 Copyright Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + + +PRGNAM=nodejs +SRCNAM=node +VERSION=${VERSION:-18.18.2} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-v$VERSION +tar xf $CWD/$SRCNAM-v$VERSION.tar.gz +cd $SRCNAM-v$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +## Fix man page path. +sed -i 's|share/||' tools/install.py +#sed -i '/var manRoot/ s/"share",//' deps/npm/lib/{,un}build.js + +## Fix libdir for 64-bit. +sed -i "s|lib/|lib${LIBDIRSUFFIX}/|g" tools/install.py +sed -i "s/'lib'/'lib${LIBDIRSUFFIX}'/" lib/module.js +sed -i "s|\"lib\"|\"lib${LIBDIRSUFFIX}\"|" deps/npm/lib/npm.js + +#sed -i "s|math.h|cmath|" src/node_crypto.cc +./configure \ + --prefix=/usr \ + --shared-zlib + +make -j$(nproc) CFLAGS="$SLKCFLAGS" CXXFLAGS="$SLKCFLAGS" +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +## Add bash completion file for npm. +install -D -m 644 $CWD/npm.sh $PKG/usr/share/bash-completion/completions/npm + +## Remove unneeded files. +find $PKG/usr \( -name '.git*' \) -exec rm -rf {} \+ + +## Set NODE_PATH to look for globally installed modules. +mkdir -p $PKG/etc/profile.d +cat > $PKG/etc/profile.d/${SRCNAM}.csh << EOF +#!/bin/csh +setenv NODE_PATH /usr/lib${LIBDIRSUFFIX}/node_modules +EOF +cat > $PKG/etc/profile.d/${SRCNAM}.sh << EOF +#!/bin/sh +export NODE_PATH=/usr/lib${LIBDIRSUFFIX}/node_modules +EOF +chmod 0755 $PKG/etc/profile.d/* + +# Fix some files path +mv $PKG/usr/doc/node $PKG/usr/share/nodejs +rm -rf $PKG/usr/systemtap + +install -Dpm 0644 $CWD/$PRGNAM.SlackBuild $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +cp -a LICENSE *.md $PKG/usr/doc/$PRGNAM-$VERSION + +install -Dpm 0644 $CWD/slack-desc $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/nodejs/nodejs.info b/nodejs/nodejs.info new file mode 100644 index 0000000..90345af --- /dev/null +++ b/nodejs/nodejs.info @@ -0,0 +1,10 @@ +PRGNAM="nodejs" +VERSION="18.18.2" +HOMEPAGE="https://nodejs.org/" +DOWNLOAD="https://nodejs.org/dist/v18.18.2/node-v18.18.2.tar.gz" +MD5SUM="035b97b23310e1db718924823c0d90ae" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/nodejs/npm.sh b/nodejs/npm.sh new file mode 100644 index 0000000..cf24585 --- /dev/null +++ b/nodejs/npm.sh @@ -0,0 +1,7 @@ +# shellcheck shell=bash +cite "about-completion" +about-completion "npm (Node Package Manager) completion" + +if _command_exists npm; then + eval "$(npm completion)" +fi diff --git a/nodejs/slack-desc b/nodejs/slack-desc new file mode 100644 index 0000000..bb10691 --- /dev/null +++ b/nodejs/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +nodejs: nodejs (JavaScript runtime) +nodejs: +nodejs: Node.js is a JavaScript runtime built on Chrome's V8 JavaScript +nodejs: engine. +nodejs: +nodejs: https://nodejs.org/ +nodejs: +nodejs: +nodejs: +nodejs: +nodejs: diff --git a/openfire/README b/openfire/README new file mode 100644 index 0000000..6edb1a6 --- /dev/null +++ b/openfire/README @@ -0,0 +1,19 @@ +Openfire is a real time collaboration (RTC) server licensed under the +Open Source Apache License. It uses the only widely adopted open +protocol for instant messaging, XMPP (also called Jabber). Openfire is +incredibly easy to setup and administer, but offers rock-solid security +and performance. + +This script repacks the tar.gz into a slackware package. + + +Groupname and Username + +You must have the 'openfire' group and user to run this script, +for example: + + groupadd -g 265 openfire + useradd -u 265 -g 265 -c "Openfire Server" -m openfire + + +See README.SLACKWARE for more setup details. diff --git a/openfire/README.SLACKWARE b/openfire/README.SLACKWARE new file mode 100644 index 0000000..4d200b6 --- /dev/null +++ b/openfire/README.SLACKWARE @@ -0,0 +1,25 @@ +## Startup + +To have this start upon each boot, add the following lines to +/etc/rc.d/rc.local + + # Start openfire + if [ -x /etc/rc.d/rc.openfire ]; then + /etc/rc.d/rc.openfire start + fi + +You will also want to put the following into /etc/rc.d/rc.local_shutdown +(if that file does not exist, create it and make it executable): + + # Stop openfire + if [ -x /etc/rc.d/rc.openfire ]; then + /etc/rc.d/rc.openfire stop + fi + + +## Setup + +For information about setup see: +http://www.howtoforge.com/how-to-set-up-an-openfire-instant-messaging-server-on-centos-5.6 +http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/database.html +http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/install-guide.html diff --git a/openfire/openfire.SlackBuild b/openfire/openfire.SlackBuild new file mode 100755 index 0000000..f0a1b76 --- /dev/null +++ b/openfire/openfire.SlackBuild @@ -0,0 +1,115 @@ +#!/bin/bash +# +# Slackware build script for openfire +# Written by Mário Antunes (mariolpantunes@gmail.com) +# Updated by Sergei Fedosoff + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=openfire +VERSION=${VERSION:-4.7.5} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +SRCVER=$(echo $VERSION | tr . _) + +ARCH=noarch + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +# select openfire default user/group +OPENFIRE_USER=${OPENFIRE_USER:-openfire} +OPENFIRE_UID=${OPENFIRE_UID:-265} +OPENFIRE_GROUP=${OPENFIRE_GROUP:-openfire} +OPENFIRE_GID=${OPENFIRE_GID:-265} + +bailout() { + echo " You must have a $OPENFIRE_USER user and $OPENFIRE_GROUP group to run this script. " + echo " Something like this should suffice for most systems: " + echo " # groupadd -g $OPENFIRE_GID $OPENFIRE_GROUP " + echo " # useradd -u $OPENFIRE_UID -g $OPENFIRE_GID -c \"Openfire Server\" -m $OPENFIRE_USER " + exit 1 +} + +# Bail if user and/or group isn't valid on your system +# uid=265 is suggested to avoid conflicts with other SBo packages, +# but it's your call: http://slackbuilds.org/uid_gid.txt +if ! getent passwd $OPENFIRE_USER 2>/dev/null; then + bailout +elif ! getent group $OPENFIRE_GROUP 2>/dev/null; then + bailout +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM +tar xvf $CWD/$PRGNAM\_$SRCVER.tar.gz +cd $PRGNAM +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +# Installation path +PREFIX=/opt/$PRGNAM + +mkdir -p $PKG$PREFIX/ +cp -a bin/ $PKG$PREFIX/ +cp -a .install4j/ $PKG$PREFIX/ +cp -a conf/ $PKG$PREFIX/ +cp -a lib/ $PKG$PREFIX/ +mkdir -p $PKG$PREFIX/logs +cp -a plugins/ $PKG$PREFIX/ +cp -a resources/ $PKG$PREFIX/ + +mkdir -p $PKG/var/log/$PRGNAM +chown -R $OPENFIRE_USER:$OPENFIRE_GROUP $PKG$PREFIX $PKG/var/log/$PRGNAM + +mkdir -p $PKG/etc/profile.d +cat << EOF > $PKG/etc/profile.d/$PRGNAM.sh +#!/bin/sh +export openfireHome=/opt/openfire +EOF +cat << EOF > $PKG/etc/profile.d/$PRGNAM.csh +#!/bin/csh +setenv openfireHome /opt/openfire +EOF +chmod 755 $PKG/etc/profile.d/* + +mkdir -p $PKG/etc/rc.d +sed \ + -e "s|@OPENFIRE_USER@|$OPENFIRE_USER|" \ + -e "s|@PREFIX@|$PREFIX|" \ + $CWD/rc.$PRGNAM > $PKG/etc/rc.d/rc.$PRGNAM +chmod 755 $PKG/etc/rc.d/rc.$PRGNAM + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a *.html documentation/ $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required + + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/openfire/openfire.info b/openfire/openfire.info new file mode 100644 index 0000000..dc75753 --- /dev/null +++ b/openfire/openfire.info @@ -0,0 +1,10 @@ +PRGNAM="openfire" +VERSION="4.7.5" +HOMEPAGE="http://www.igniterealtime.org/projects/openfire/" +DOWNLOAD="https://github.com/igniterealtime/Openfire/releases/download/v4.7.5/openfire_4_7_5.tar.gz" +MD5SUM="bed735f70dbea959d8659f00d975ca6d" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="openjdk8" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/openfire/rc.openfire b/openfire/rc.openfire new file mode 100644 index 0000000..6130f8f --- /dev/null +++ b/openfire/rc.openfire @@ -0,0 +1,95 @@ +#!/bin/sh +# rc.openfire +# Initscript that manages an instance of openfire running on Slackware Linux. +# Assembled by Matteo Bernardini + +OPENFIRE_USER="openfire" +OPENFIRE_HOME="/opt/openfire" +OPENFIRE_PIDFILE="/run/openfire.pid" + +JAVACMD="$JAVA_HOME/bin/java" + +if [ ! -d "$JAVA_HOME" -o ! -x "$JAVACMD" ]; then + echo "Error: JAVA_HOME is not defined correctly." + echo " Can not sure execute $JAVACMD." + exit 1 +fi + +# Set logs location +OPENFIRE_LOGDIR="/var/log/openfire" + +# Prepare location of openfire libraries +OPENFIRE_LIB="$OPENFIRE_HOME/lib" + +# Prepare openfire command line +OPENFIRE_OPTS="-DopenfireHome=$OPENFIRE_HOME -Dopenfire.lib.dir=$OPENFIRE_LIB" + +# Prepare local java class path +if [ -z "$LOCALCLASSPATH" ]; then + LOCALCLASSPATH="$OPENFIRE_LIB/startup.jar" +else + LOCALCLASSPATH="$OPENFIRE_LIB/startup.jar:$LOCALCLASSPATH" +fi + +# Export any necessary variables +export JAVA_HOME JAVACMD + +# Lastly, prepare the full command that we are going to run. +OPENFIRE_RUN_CMD="$JAVACMD -server $OPENFIRE_OPTS -classpath \"$LOCALCLASSPATH\" -jar \"$OPENFIRE_LIB/startup.jar\"" + +openfire_start() { + echo "Starting Openfire..." + [ -f "$OPENFIRE_PIDFILE" ] && echo "openfire is already running. If it's not, remove $OPENFIRE_PIDFILE and retry." && exit 1 + # Launch openfire + su - $OPENFIRE_USER -c "cd $OPENFIRE_LOGDIR ; nohup $OPENFIRE_RUN_CMD > $OPENFIRE_LOGDIR/nohup.out 2>&1 &" + sleep 3 + # Store the pid + ps ax | grep 'java\ \-server' | awk '{print $1}' > $OPENFIRE_PIDFILE + echo "Running." +} + +openfire_stop() { + echo "Stopping Openfire..." + [ -f "$OPENFIRE_PIDFILE" ] && kill $(cat $OPENFIRE_PIDFILE) + RETVAL=$? + [ $RETVAL -eq 0 -a -f "$OPENFIRE_PIDFILE" ] && rm -f $OPENFIRE_PIDFILE + echo "Stopped." +} + +openfire_status() { + PID=$(cat $OPENFIRE_PIDFILE 2>&1) + if [ "$?" = "1" ]; then + echo "openfire is not running" + RETVAL=3 + else + ps -p $PID > /dev/null 2>&1 + if [ "$?" = "0" ]; then + echo "openfire is running" + RETVAL=0 + else + echo "openfire is not running" + RETVAL=1 + fi + fi +} + +case "$1" in + start) + openfire_start + ;; + stop) + openfire_stop + ;; + restart) + openfire_stop + sleep 10 + openfire_start + ;; + status) + openfire_status + ;; + *) + echo "Usage $0 (start|stop|restart|status)" +esac + +exit 0 diff --git a/openfire/slack-desc b/openfire/slack-desc new file mode 100644 index 0000000..354e149 --- /dev/null +++ b/openfire/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +openfire: openfire (XMPP server) +openfire: +openfire: Openfire is a real time collaboration (RTC) server licensed under the +openfire: Open Source Apache License. It uses the only widely adopted open +openfire: protocol for instant messaging, XMPP (also called Jabber). Openfire +openfire: is incredibly easy to setup and administer, but offers rock-solid +openfire: security and performance. +openfire: +openfire: +openfire: +openfire: diff --git a/openfire/slack-required b/openfire/slack-required new file mode 100644 index 0000000..8779225 --- /dev/null +++ b/openfire/slack-required @@ -0,0 +1 @@ +openjdk8 diff --git a/openjdk7/README b/openjdk7/README new file mode 100644 index 0000000..cd6b29a --- /dev/null +++ b/openjdk7/README @@ -0,0 +1,35 @@ +OpenJDK 7 is an open source implementation of version 7 of the +Java Development Kit, Standard Edition. It includes tools for +developing, testing, and running programs written in Java. + +This build requires gcc5. + +Before installing this package please consider any other jdk's/jre's +that you have already installed as they may cause conflicts with the +PATH, JAVA_HOME and MANPATH variables. + +After installing the package you will need to logout/login to your +machine as it will add new files to the /etc/profile.d folder. + +This script may take a couple of hours to complete and will require +about 11 GB of disk space for its temporary directory. It defaults to +"/tmp/SBo" and you may redefine it like this: + +TMP=/your/temporary/dir ./openjdk7.SlackBuild + +The 'cacerts' binary is a TrustStore containing CA certificates which +are used by Java applications. It is taken from the CentOS package +'ca-certificates-2015.2.4-65.0.1.el6_6.noarch.rpm'. + +NOTES +1. The apache-ant in SBo (1.10.x) is incompatible with openjdk7, +so the script now uses the previous version (1.9.x) to build. + +2. Currently this will only build on 64-bit. On 32-bit, it need to +link with the libstdc++ in gcc5 but tries to link with the default +/usr/lib/libstc++ and errors out with the message: + +/usr/bin/ld: /usr/lib/libstdc++.so.6: \ + undefined reference to `__divmoddi4@GCC_7.0.0' + +Any help with this issue would be GREATLY appreciated. diff --git a/openjdk7/cacerts b/openjdk7/cacerts new file mode 100644 index 0000000000000000000000000000000000000000..3c6ae3e526d0401cb3d24a0d79aa5379d02bace2 GIT binary patch literal 192567 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 z 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 AP5=M^ literal 0 HcmV?d00001 diff --git a/openjdk7/openjdk7.SlackBuild b/openjdk7/openjdk7.SlackBuild new file mode 100755 index 0000000..5a48b31 --- /dev/null +++ b/openjdk7/openjdk7.SlackBuild @@ -0,0 +1,189 @@ +#!/bin/bash + +# Slackware build script for OpenJDK + +# Copyright 2020 Strahil Yordanov, Sofia, Bulgaria +# Copyright 2021 Lenard Spencer, Orlando, Florida, USA +# COPYRIGHT 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) +PRGNAM=openjdk7 +VERSION=${VERSION:-7u321} +BUILD=${BUILD:-2} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} +DVER=1.7.0_$(printf $VERSION | cut -du -f2) + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm; echo "Unsupported arch $ARCH"; exit 1;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +BUILD_DIR=$TMP/$PRGNAM +SBO_PATCH_DIR="${BUILD_DIR}/jdk-archive-patch" +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +. $CWD/$PRGNAM.info || exit 1 +ICEDTEA=`echo $DOWNLOAD | awk '{print $1}' | awk -F / '{print $NF}'` +ANT=`echo $DOWNLOAD | awk '{print $9}' | awk -F / '{print $NF}'` +ANT_HOME=$BUILD_DIR/${ANT%-bin*} # this overrides the "official" ANT_HOME + +if [ "$ARCH" = "x86_64" ]; then + LIB_ARCH=amd64 + LIBDIRSUFFIX="64" +else + LIB_ARCH=i386 + LIBDIRSUFFIX="" +fi + +# Check for the gcc5 package, and abort if not found: +if [ ! -x /usr/bin/gcc-5 ]; then + echo "This requires the gcc5 package to build." + echo "Please install gcc5 and rerun this script." + exit 1 +else + source /etc/profile.d/gcc5.sh # Set the environment +fi + +BOOT_JAVA=/usr/lib${LIBDIRSUFFIX}/jvm + +function createPatchedJdkArchive() { + + mkdir -p ${SBO_PATCH_DIR} && cd ${SBO_PATCH_DIR} + tar xvf "${CWD}/jdk.tar.bz2" + cd jdk-* + + cat << EOF | patch -d ./src/share/classes/sun/security/util Optional.java +diff -Nru openjdk-boot.orig/jdk/src/share/classes/sun/security/util/Optional.java openjdk-boot/jdk/src/share/classes/sun/security/util/Optional.java +--- openjdk-boot.orig/jdk/src/share/classes/sun/security/util/Optional.java 2019-10-20 11:57:14.258731932 +0300 ++++ openjdk-boot/jdk/src/share/classes/sun/security/util/Optional.java 2019-10-20 11:59:48.600721516 +0300 +@@ -193,7 +193,7 @@ + if (!isPresent()) + return empty(); + else { +- return Optional.ofNullable(mapper.apply(value)); ++ return (Optional) Optional.ofNullable(mapper.apply(value)); + } + } + +EOF + +# Remove the sys/sysctl.h includes (they weren't being used anyway) + sed -i '/sys\/sysctl.h/d' src/solaris/native/java/net/PlainDatagramSocketImpl.c + sed -i '/sys\/sysctl.h/d' src/solaris/native/java/net/PlainSocketImpl.c + cd .. + tar -cvjSf jdk.tar.bz2 jdk-* +} + +function fixJdkArchiveChecksum() { + local newChecksum=$(sha256sum "${SBO_PATCH_DIR}/jdk.tar.bz2" | awk '{print $1}') + + sed -r -i "s/^(\s*JDK_SHA256SUM\s*=\s*).*$/\1${newChecksum}/" Makefile +} + +set -e + +rm -rf $BUILD_DIR $PKG +mkdir -p $TMP $BUILD_DIR $PKG $OUTPUT + +(createPatchedJdkArchive) + +cd $BUILD_DIR + +tar -xvf $CWD/${ANT} +tar -xvf $CWD/${ICEDTEA} + +mkdir icedtea-build +cd icedtea-build + +# Set JAVA_HOME in order to avoid conflicts with other already installed JVMs. +JAVA_HOME=${BOOT_JAVA} PATH=${BOOT_JAVA}/bin:$ANT_HOME/bin:$PATH ../${ICEDTEA%.tar*}/configure \ + --disable-docs \ + --disable-downloading \ + --with-jdk-home=${BOOT_JAVA} \ + --without-rhino \ + --disable-system-kerberos \ + --disable-system-pcsc \ + --disable-system-sctp \ + --disable-system-zlib \ + --disable-compile-against-syscalls \ + --with-cacerts-file="$CWD/cacerts" \ +$( +# cacerts is taken from this CentOS package: +#+ http://mirror.centos.org/centos/6/os/x86_64/Packages/ca-certificates-2015.2.4-65.0.1.el6_6.noarch.rpm +# You can list its contents with this command (after you install this package:) +#+ 'keytool -v -list -keystore ./cacerts -storepass changeit' +# It's old and some certificates inside have already expired but without it some java programs +#+ may throw exceptions. It is meant as a dummy placehoder file. +) \ + --with-openjdk-src-zip="$CWD/openjdk.tar.bz2" \ + --with-corba-src-zip="$CWD/corba.tar.bz2" \ + --with-jaxp-src-zip="$CWD/jaxp.tar.bz2" \ + --with-jaxws-src-zip="$CWD/jaxws.tar.bz2" \ + --with-jdk-src-zip="${SBO_PATCH_DIR}/jdk.tar.bz2" \ + --with-langtools-src-zip="$CWD/langtools.tar.bz2" \ + --with-hotspot-src-zip="$CWD/hotspot.tar.bz2" + +fixJdkArchiveChecksum + +JAVA_HOME=${BOOT_JAVA} PATH=${BOOT_JAVA}/bin:$PATH LOG=trace make -j$(nproc) + +mkdir -p $PKG/usr/lib${LIBDIRSUFFIX} +cd $PKG/usr/lib${LIBDIRSUFFIX} +cp -av $BUILD_DIR/icedtea-build/openjdk.build/j2sdk-image/ $PRGNAM +ln -sf $PRGNAM ${PRGNAM}${DVER} +ln -sf $PRGNAM/jre/lib/${LIB_ARCH}/server/libjvm.so . + +chown -R root.root $PKG +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +mkdir -p $PKG/etc/profile.d +for file in $(ls "$CWD/profile.d/${PRGNAM}"*) ; do + cat $file | sed -e "s#lib/openjdk#lib${LIBDIRSUFFIX}/openjdk#" \ + > $PKG/etc/profile.d/$(basename $file) +done +chmod 755 $PKG/etc/profile.d/* + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/{THIRD_PARTY_README,LICENSE,ASSEMBLY_EXCEPTION} \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/openjdk7/openjdk7.info b/openjdk7/openjdk7.info new file mode 100644 index 0000000..fde4713 --- /dev/null +++ b/openjdk7/openjdk7.info @@ -0,0 +1,26 @@ +PRGNAM="openjdk7" +VERSION="7u321" +HOMEPAGE="https://openjdk.java.net" +DOWNLOAD="https://icedtea.classpath.org/download/source/icedtea-2.6.28.tar.xz \ + https://icedtea.classpath.org/download/drops/icedtea7/2.6.28/openjdk.tar.bz2 \ + https://icedtea.classpath.org/download/drops/icedtea7/2.6.28/corba.tar.bz2 \ + https://icedtea.classpath.org/download/drops/icedtea7/2.6.28/jaxp.tar.bz2 \ + https://icedtea.classpath.org/download/drops/icedtea7/2.6.28/jaxws.tar.bz2 \ + https://icedtea.classpath.org/download/drops/icedtea7/2.6.28/jdk.tar.bz2 \ + https://icedtea.classpath.org/download/drops/icedtea7/2.6.28/langtools.tar.bz2 \ + https://icedtea.classpath.org/download/drops/icedtea7/2.6.28/hotspot.tar.bz2 \ + https://archive.apache.org/dist/ant/binaries/apache-ant-1.9.16-bin.tar.bz2" +MD5SUM="11663b88a06f3461607c026510dd733a \ + bcd48aa756a108cb437f07ed291436f9 \ + 5c16e53e461cf640842cec44f9a6264a \ + 9fe804632cfd4a47423a58a0171bc420 \ + 01120ce5103a1f1f8b79ad4f8ae1511d \ + c4332b8442e438ac498f206c8851f68c \ + ebbc311a2aa8afdf1dd4e3d2b7f55aba \ + c168159cc98db90a5d14b077e2c49ae9 \ + 2a1ef0230e673b6da876a8fc9744b9a1" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="gcc5" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/openjdk7/profile.d/openjdk7.csh b/openjdk7/profile.d/openjdk7.csh new file mode 100644 index 0000000..0b69a36 --- /dev/null +++ b/openjdk7/profile.d/openjdk7.csh @@ -0,0 +1,4 @@ +#!/bin/csh +setenv JAVA_HOME /usr/lib/openjdk7 +setenv MANPATH ${MANPATH}:${JAVA_HOME}/man +setenv PATH ${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin diff --git a/openjdk7/profile.d/openjdk7.sh b/openjdk7/profile.d/openjdk7.sh new file mode 100644 index 0000000..e3b669d --- /dev/null +++ b/openjdk7/profile.d/openjdk7.sh @@ -0,0 +1,4 @@ +#!/bin/sh +export JAVA_HOME=/usr/lib/openjdk7 +export MANPATH="${MANPATH}:${JAVA_HOME}/man" +export PATH="${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin" diff --git a/openjdk7/slack-desc b/openjdk7/slack-desc new file mode 100644 index 0000000..f695bcc --- /dev/null +++ b/openjdk7/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +openjdk7: openjdk7 (OpenJDK 7 -- Open Implementation of JDK) +openjdk7: +openjdk7: OpenJDK 7 is an open source implementation of version 7 of the +openjdk7: Java Development Kit, Standard Edition. It includes tools for +openjdk7: developing, testing, and running programs written in Java. +openjdk7: +openjdk7: +openjdk7: +openjdk7: +openjdk7: +openjdk7: diff --git a/openjdk8/README b/openjdk8/README new file mode 100644 index 0000000..3139fca --- /dev/null +++ b/openjdk8/README @@ -0,0 +1,35 @@ +OpenJDK 8 is an open source implementation of version 8 of the Java +Development Kit, Standard Edition. It includes tools for developing, +testing, and running programs written in Java. + +Before installing this package please consider any other jdk's/jre's +that you have already installed as they may cause conflicts with the +PATH, JAVA_HOME and MANPATH variables (this includes the 'openjdk7' +dependency package -- you may wish to remove it after you're done.) + +On 32-bit slackware you will need 'zulu-openjdk7' as dependency instead +of 'openjdk7'. You can use the former on 64-bit slackware too. + +If you already have 'openjdk8' on your system (and are compiling a newer +version, for example) you won't need any dependencies at all. + +After installing the package you will need to logout/login to your +machine as it will add new files to the /etc/profile.d folder. + +This script may take a couple of hours to complete and will require +about 11 GB of disk space for its temporary directory. It defaults to +"/tmp/SBo" and you may redefine it like this: + +TMP=/your/temporary/dir ./openjdk8.SlackBuild + +The 'cacerts' binary is a TrustStore containing CA certificates which +are used by Java applications. It is taken from the CentOS package +'ca-certificates-2015.2.4-65.0.1.el6_6.noarch.rpm'. + +If you get an error like + +Internal compiler error: java.lang.NullPointerException at +org.eclipse.jdt.internal.compiler.ReadManager.run(ReadManager.java:166) + +simply run the build again. This happens early so it shouldn't be much +of a problem. At least 1 out of 5 runs so far have always succeeded. diff --git a/openjdk8/cacerts b/openjdk8/cacerts new file mode 100644 index 0000000000000000000000000000000000000000..3c6ae3e526d0401cb3d24a0d79aa5379d02bace2 GIT binary patch literal 192567 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 z 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 AP5=M^ literal 0 HcmV?d00001 diff --git a/openjdk8/openjdk8.SlackBuild b/openjdk8/openjdk8.SlackBuild new file mode 100755 index 0000000..438902a --- /dev/null +++ b/openjdk8/openjdk8.SlackBuild @@ -0,0 +1,127 @@ +#!/bin/bash + +# Slackware build script for OpenJDK + +# Copyright 2022 Strahil Yordanov, Sofia, Bulgaria +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=openjdk8 +VERSION=${VERSION:-8u372} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +DVER=1.8.0_$(printf $VERSION | cut -du -f2) +ICEDTEA=icedtea-3.27.0 + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm; echo "Unsupported arch $ARCH"; exit 1;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +BUILD_DIR=$TMP/$PRGNAM +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "x86_64" ]; then + LIB_ARCH=amd64 + LIBDIRSUFFIX="64" +else + LIB_ARCH=i386 + LIBDIRSUFFIX="" +fi + +BOOT_JAVA=/usr/lib${LIBDIRSUFFIX}/openjdk7 +[ ! -d ${BOOT_JAVA} ] && BOOT_JAVA=${BOOT_JAVA%/*}/zulu-openjdk7 +[ ! -d ${BOOT_JAVA} ] && BOOT_JAVA=${BOOT_JAVA%/*}/openjdk8 +[ ! -d ${BOOT_JAVA} ] && { echo "Boot java not found"; exit 1; } + +set -e + +rm -rf $BUILD_DIR $PKG +mkdir -p $TMP $BUILD_DIR $PKG $OUTPUT +cd $BUILD_DIR + +tar -xvf $CWD/${ICEDTEA}.tar.xz + +mkdir icedtea-build +cd icedtea-build + +# Set JAVA_HOME in order to avoid conflicts with other already installed JVMs. +JAVA_HOME=${BOOT_JAVA} PATH=${BOOT_JAVA}/bin:$PATH ../$ICEDTEA/configure \ + --disable-downloading \ + --disable-docs \ + --with-jdk-home=${BOOT_JAVA} \ + --disable-system-kerberos \ + --disable-system-pcsc \ + --disable-system-sctp \ + --enable-nss \ + --with-openjdk-src-zip="$CWD/openjdk-git.tar.xz" +JAVA_HOME=${BOOT_JAVA} PATH=${BOOT_JAVA}/bin:$PATH LOG=trace make + +cd $PKG +mkdir -p usr/lib${LIBDIRSUFFIX} +cd usr/lib${LIBDIRSUFFIX} +cp -av $BUILD_DIR/icedtea-build/openjdk.build/images/j2sdk-image/ $PRGNAM + +chown -R root.root $PKG +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +mkdir -p $PKG/etc/profile.d +for file in $(ls "$CWD/profile.d/${PRGNAM}"*) ; do + cat $file | sed -e "s#lib/openjdk#lib${LIBDIRSUFFIX}/openjdk#" \ + > $PKG/etc/profile.d/$(basename $file) +done +chmod 755 $PKG/etc/profile.d/* + +( cd $PKG/usr/lib${LIBDIRSUFFIX} + ln -sf $PRGNAM ${PRGNAM}${DVER} +) + +cd $PKG/usr/lib${LIBDIRSUFFIX} + ln -sf ./$PRGNAM/jre/lib/${LIB_ARCH}/server/libjvm.so . + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/{THIRD_PARTY_README,LICENSE,ASSEMBLY_EXCEPTION} \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/openjdk8/openjdk8.info b/openjdk8/openjdk8.info new file mode 100644 index 0000000..d43dc83 --- /dev/null +++ b/openjdk8/openjdk8.info @@ -0,0 +1,12 @@ +PRGNAM="openjdk8" +VERSION="8u372" +HOMEPAGE="https://openjdk.java.net" +DOWNLOAD="https://icedtea.classpath.org/download/source/icedtea-3.27.0.tar.xz \ + https://icedtea.classpath.org/download/drops/icedtea8/3.27.0/openjdk-git.tar.xz" +MD5SUM="8c2ce8d941c57701f6bd64786c9ff46e \ + 7591fe5f94cf14c3517135f25b1bfa69" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="openjdk7" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/openjdk8/profile.d/openjdk8.csh b/openjdk8/profile.d/openjdk8.csh new file mode 100644 index 0000000..960fe48 --- /dev/null +++ b/openjdk8/profile.d/openjdk8.csh @@ -0,0 +1,4 @@ +#!/bin/csh +setenv JAVA_HOME /usr/lib/openjdk8 +setenv MANPATH ${MANPATH}:${JAVA_HOME}/man +setenv PATH ${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin diff --git a/openjdk8/profile.d/openjdk8.sh b/openjdk8/profile.d/openjdk8.sh new file mode 100644 index 0000000..378a242 --- /dev/null +++ b/openjdk8/profile.d/openjdk8.sh @@ -0,0 +1,4 @@ +#!/bin/sh +export JAVA_HOME=/usr/lib/openjdk8 +export MANPATH="${MANPATH}:${JAVA_HOME}/man" +export PATH="${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin" diff --git a/openjdk8/slack-desc b/openjdk8/slack-desc new file mode 100644 index 0000000..49d635e --- /dev/null +++ b/openjdk8/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +openjdk8: openjdk8 (Open Implementation of JDK) +openjdk8: +openjdk8: OpenJDK 8 is an open source implementation of version 8 of the +openjdk8: Java Development Kit, Standard Edition. It includes tools for +openjdk8: developing, testing, and running programs written in Java. +openjdk8: +openjdk8: +openjdk8: +openjdk8: +openjdk8: +openjdk8: diff --git a/p7zip/README b/p7zip/README new file mode 100644 index 0000000..9c897a2 --- /dev/null +++ b/p7zip/README @@ -0,0 +1,5 @@ +7-Zip is a well-known file compression utility for windows. +p7zip is a ported version for linux with nearly the same capabilities. + +If you want to build the new GUI, you have to pass GUI=yes to the script: +this requires an optional dependency, wxPython. diff --git a/p7zip/doinst.sh b/p7zip/doinst.sh new file mode 100644 index 0000000..1940005 --- /dev/null +++ b/p7zip/doinst.sh @@ -0,0 +1,6 @@ +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi + diff --git a/p7zip/p7zip.SlackBuild b/p7zip/p7zip.SlackBuild new file mode 100644 index 0000000..3fd347d --- /dev/null +++ b/p7zip/p7zip.SlackBuild @@ -0,0 +1,155 @@ +#!/bin/sh + +# Slackware build script for p7zip + +# Copyright 2007-2016 Heinz Wiesinger, Amsterdam, Netherlands +# Copyright 2023 SErgei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=p7zip +VERSION=${VERSION:-16.02} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +# building the GUI +GUI=${GUI:-no} + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf ${PRGNAM}_${VERSION} +tar xf $CWD/${PRGNAM}_${VERSION}_src_all.tar.bz2 +cd ${PRGNAM}_${VERSION} +patch -p 1 -i $CWD/patch/0001-fix-data-null-pointer.patch +patch -p 1 -i $CWD/patch/0001-fix-out-of-mem.patch +patch -p 1 -i $CWD/patch/05-hardening-flags.patch +patch -p 1 -i $CWD/patch/14-Fix-g++-warning.patch +patch -p 1 -i $CWD/patch/CVE-2016-9296.patch +patch -p 1 -i $CWD/patch/CVE-2017-17969.patch +patch -p 1 -i $CWD/patch/gcc10-conversion.patch +patch -p 1 -i $CWD/patch/p7zip-manpages.patch +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +export CFLAGS="-g $SLKCFLAGS" +export CXXFLAGS="-g $SLKCFLAGS" +export LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" + +make -j$(nproc) all3 \ + OPTFLAGS="$SLKCFLAGS" \ + DEST_HOME=/usr \ + DEST_SHARE_DOC=/usr/doc/$PRGNAM-$VERSION \ + DEST_SHARE=/usr/lib$LIBDIRSUFFIX/p7zip \ + DEST_DIR=$PKG + +if ! [ "$GUI" = "no" ]; then + sed -i "s|/usr/lib/|/usr/lib$LIBDIRSUFFIX/|g" CPP/7zip/UI/GUI/makefile.depend + make -j$(nproc) 7zG \ + OPTFLAGS="$SLKCFLAGS" \ + DEST_HOME=/usr \ + DEST_SHARE_DOC=/usr/doc/$PRGNAM-$VERSION \ + DEST_SHARE=/usr/lib$LIBDIRSUFFIX/p7zip \ + DEST_DIR=$PKG +fi + +make -j$(nproc) install \ + OPTFLAGS="$SLKCFLAGS" \ + DEST_HOME=/usr \ + DEST_SHARE_DOC=/usr/doc/$PRGNAM-$VERSION \ + DEST_SHARE=/usr/lib$LIBDIRSUFFIX/p7zip \ + DEST_DIR=$PKG + +# install gzip like wrapper +install -m 0755 contrib/gzip-like_CLI_wrapper_for_7z/p7zip $PKG/usr/bin/ +install -m 0644 contrib/gzip-like_CLI_wrapper_for_7z/man1/p7zip.1 $PKG/usr/man/man1/ + +# install midnight commander vfs add on +mkdir -p $PKG/usr/share/mc/extfs/ +install -m 755 contrib/VirtualFileSystemForMidnightCommander/u7z \ + $PKG/usr/share/mc/extfs/ + +if ! [ "$GUI" = "no" ]; then + # Unfortunately we have to install 7zG by hand + install -m 555 $PKG/usr/bin/7z $PKG/usr/bin/7zG + sed -i "s|/usr/lib$LIBDIRSUFFIX/p7zip/7z|/usr/lib$LIBDIRSUFFIX/p7zip/7zG|" $PKG/usr/bin/7zG + + install -m 555 bin/7zG $PKG/usr/lib$LIBDIRSUFFIX/p7zip/7zG + cp -r GUI/Lang $PKG/usr/lib$LIBDIRSUFFIX/p7zip/Lang + find $PKG/usr/lib$LIBDIRSUFFIX/p7zip/Lang -type d -exec chmod 555 {} \; + find $PKG/usr/lib$LIBDIRSUFFIX/p7zip/Lang -type f -exec chmod 444 {} \; + + install -m 555 GUI/p7zipForFilemanager $PKG/usr/bin/p7zipForFilemanager + + install -m 444 -D GUI/p7zip_16_ok.png $PKG/usr/share/icons/hicolor/16x16/apps/p7zip.png + + mkdir -p $PKG/usr/share/kde4/services/ServiceMenus + cp GUI/kde4/*.desktop $PKG/usr/share/kde4/services/ServiceMenus/ +fi + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +cp TODO $PKG/usr/doc/$PRGNAM-$VERSION +cp contrib/gzip-like_CLI_wrapper_for_7z/README $PKG/usr/doc/$PRGNAM-$VERSION/README.p7zip +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/p7zip/p7zip.info b/p7zip/p7zip.info new file mode 100644 index 0000000..45111f1 --- /dev/null +++ b/p7zip/p7zip.info @@ -0,0 +1,10 @@ +PRGNAM="p7zip" +VERSION="16.02" +HOMEPAGE="http://p7zip.sourceforge.net/" +DOWNLOAD="http://downloads.sourceforge.net/p7zip/p7zip_16.02_src_all.tar.bz2" +MD5SUM="a0128d661cfe7cc8c121e73519c54fbf" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedososff" +EMAIL="eleksir@gmail.com" diff --git a/p7zip/patch/0001-fix-data-null-pointer.patch b/p7zip/patch/0001-fix-data-null-pointer.patch new file mode 100644 index 0000000..9c71025 --- /dev/null +++ b/p7zip/patch/0001-fix-data-null-pointer.patch @@ -0,0 +1,14 @@ +diff --git a/CPP/7zip/Archive/LzhHandler.cpp b/CPP/7zip/Archive/LzhHandler.cpp +index 21631f7..1f14621 100644 +--- a/CPP/7zip/Archive/LzhHandler.cpp ++++ b/CPP/7zip/Archive/LzhHandler.cpp +@@ -163,7 +163,8 @@ struct CItem + return false; + } + const Byte *data = (const Byte *)(Extensions[index].Data); +- value = GetUi32(data); ++ if (!data) value = 0; ++ else value = GetUi32(data); + return true; + } + diff --git a/p7zip/patch/0001-fix-out-of-mem.patch b/p7zip/patch/0001-fix-out-of-mem.patch new file mode 100644 index 0000000..e1b7cba --- /dev/null +++ b/p7zip/patch/0001-fix-out-of-mem.patch @@ -0,0 +1,26 @@ +diff --git a/C/Alloc.c b/C/Alloc.c +index 2706ec0..3178e7a 100644 +--- a/C/Alloc.c ++++ b/C/Alloc.c +@@ -58,12 +58,18 @@ void align_free(void * ptr) + #else + void *align_alloc(size_t size) + { +- return malloc(size); ++ void * p = malloc(size); ++ if(!p){ ++ printf("Out of memory: can't allocate %u bytes\n",size); ++ abort(); ++ } ++ return p; + } + + void align_free(void * ptr) + { +- free(ptr); ++ if(!ptr) return; ++ free(ptr); + } + + #endif + diff --git a/p7zip/patch/02-man.patch b/p7zip/patch/02-man.patch new file mode 100644 index 0000000..909a44e --- /dev/null +++ b/p7zip/patch/02-man.patch @@ -0,0 +1,22 @@ +--- p7zip_16.02/man1/7z.1.orig 2018-02-04 03:47:31.934553305 +0000 ++++ p7zip_16.02/man1/7z.1 2018-02-04 03:54:22.504752021 +0000 +@@ -12,7 +12,7 @@ + .SH DESCRIPTION + 7-Zip is a file archiver supporting 7z (that implements LZMA compression algorithm + featuring very high compression ratio), LZMA2, XZ, ZIP, Zip64, CAB, +-RAR (if the non-free p7zip-rar package is installed), ARJ, GZIP, BZIP2, TAR, CPIO, RPM, ISO, ++RAR (it was removed due a non-free license), ARJ, GZIP, BZIP2, TAR, CPIO, RPM, ISO, + most filesystem images and DEB formats. + Compression ratio in the new 7z format is 30-50% better than ratio in ZIP format. + .PP +--- p7zip_16.02/man1/7za.1.orig 2018-02-04 03:53:54.243463005 +0000 ++++ p7zip_16.02/man1/7za.1 2018-02-04 03:55:12.645264785 +0000 +@@ -12,7 +12,7 @@ + .SH DESCRIPTION + 7-Zip is a file archiver supporting 7z (that implements LZMA compression algorithm + featuring very high compression ratio), LZMA2, XZ, ZIP, Zip64, CAB, +-RAR (if the non-free p7zip-rar package is installed), ARJ, GZIP, BZIP2, TAR, CPIO, RPM, ISO, ++RAR (it was removed due a non-free license), ARJ, GZIP, BZIP2, TAR, CPIO, RPM, ISO, + most filesystem images and DEB formats. + Compression ratio in the new 7z format is 30-50% better than ratio in ZIP format. + .PP diff --git a/p7zip/patch/05-hardening-flags.patch b/p7zip/patch/05-hardening-flags.patch new file mode 100644 index 0000000..aa42431 --- /dev/null +++ b/p7zip/patch/05-hardening-flags.patch @@ -0,0 +1,33 @@ +From: Robert Luberda +Date: Fri, 22 Jan 2016 00:53:09 +0100 +Subject: Hardening flags + +Add support for $(CPPFLAGS) and do not override $(CXXFLAGS) +and $(CFLAGS) + +Bug-Debian: https://bugs.debian.org/#682167 +--- + makefile.glb | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/makefile.glb b/makefile.glb +index fb001d5..e10ae03 100644 +--- a/makefile.glb ++++ b/makefile.glb +@@ -1,14 +1,14 @@ + + RM=rm -f + +-CFLAGS=-c -I. \ ++CFLAGS+=$(CPPFLAGS) -c -I. \ + -I../../../../C \ + -I../../../../CPP/myWindows \ + -I../../../../CPP/include_windows \ + -I../../../../CPP \ + $(ALLFLAGS) $(ALLFLAGS_C) + +-CXXFLAGS=-c -I. \ ++CXXFLAGS+=$(CPPFLAGS) -c -I. \ + -I../../../../C \ + -I../../../../CPP/myWindows \ + -I../../../../CPP/include_windows \ diff --git a/p7zip/patch/14-Fix-g++-warning.patch b/p7zip/patch/14-Fix-g++-warning.patch new file mode 100644 index 0000000..226e239 --- /dev/null +++ b/p7zip/patch/14-Fix-g++-warning.patch @@ -0,0 +1,24 @@ +From: Robert Luberda +Date: Sun, 28 Jan 2018 22:19:13 +0100 +Subject: Fix g++ warning + +Fix for "use of an operand of type 'bool' in 'operator++' +is deprecated [-Wdeprecated]" warning taken from 7zip 18.00.beta +package. +--- + CPP/7zip/Archive/Wim/WimHandler.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CPP/7zip/Archive/Wim/WimHandler.cpp b/CPP/7zip/Archive/Wim/WimHandler.cpp +index 27d3298..4ff5cfe 100644 +--- a/CPP/7zip/Archive/Wim/WimHandler.cpp ++++ b/CPP/7zip/Archive/Wim/WimHandler.cpp +@@ -298,7 +298,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value) + + AString res; + +- bool numMethods = 0; ++ unsigned numMethods = 0; + for (unsigned i = 0; i < ARRAY_SIZE(k_Methods); i++) + { + if (methodMask & ((UInt32)1 << i)) diff --git a/p7zip/patch/CVE-2016-9296.patch b/p7zip/patch/CVE-2016-9296.patch new file mode 100644 index 0000000..773f92a --- /dev/null +++ b/p7zip/patch/CVE-2016-9296.patch @@ -0,0 +1,12 @@ +--- ./CPP/7zip/Archive/7z/7zIn.cpp.orig 2016-11-21 01:42:29.460901230 +0000 ++++ ./CPP/7zip/Archive/7z/7zIn.cpp 2016-11-21 01:42:57.481197725 +0000 +@@ -1097,7 +1097,8 @@ HRESULT CInArchive::ReadAndDecodePackedS + if (CrcCalc(data, unpackSize) != folders.FolderCRCs.Vals[i]) + ThrowIncorrect(); + } +- HeadersSize += folders.PackPositions[folders.NumPackStreams]; ++ if (folders.PackPositions) ++ HeadersSize += folders.PackPositions[folders.NumPackStreams]; + return S_OK; + } + diff --git a/p7zip/patch/CVE-2017-17969.patch b/p7zip/patch/CVE-2017-17969.patch new file mode 100644 index 0000000..ebc0ac9 --- /dev/null +++ b/p7zip/patch/CVE-2017-17969.patch @@ -0,0 +1,26 @@ +From 79bca880ce7bcf07216c45f93afea545e0344418 Mon Sep 17 00:00:00 2001 +From: aone +Date: Mon, 5 Feb 2018 13:01:09 +0100 +Subject: [PATCH] Security fix CVE-2017-17969 + +--- + CPP/7zip/Compress/ShrinkDecoder.cpp | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/CPP/7zip/Compress/ShrinkDecoder.cpp b/CPP/7zip/Compress/ShrinkDecoder.cpp +index 80b7e67..5bb0559 100644 +--- a/CPP/7zip/Compress/ShrinkDecoder.cpp ++++ b/CPP/7zip/Compress/ShrinkDecoder.cpp +@@ -121,7 +121,12 @@ HRESULT CDecoder::CodeReal(ISequentialInStream *inStream, ISequentialOutStream * + { + _stack[i++] = _suffixes[cur]; + cur = _parents[cur]; ++ if (cur >= kNumItems || i >= kNumItems) ++ break; + } ++ ++ if (cur >= kNumItems || i >= kNumItems) ++ break; + + _stack[i++] = (Byte)cur; + lastChar2 = (Byte)cur; diff --git a/p7zip/patch/gcc10-conversion.patch b/p7zip/patch/gcc10-conversion.patch new file mode 100644 index 0000000..45f9f84 --- /dev/null +++ b/p7zip/patch/gcc10-conversion.patch @@ -0,0 +1,26 @@ +diff -Nrup a/CPP/Windows/ErrorMsg.cpp b/CPP/Windows/ErrorMsg.cpp +--- a/CPP/Windows/ErrorMsg.cpp 2015-01-18 11:20:28.000000000 -0700 ++++ b/CPP/Windows/ErrorMsg.cpp 2019-09-24 13:01:18.887289152 -0600 +@@ -14,14 +14,14 @@ UString MyFormatMessage(DWORD errorCode) + AString msg; + + switch(errorCode) { +- case ERROR_NO_MORE_FILES : txt = "No more files"; break ; +- case E_NOTIMPL : txt = "E_NOTIMPL"; break ; +- case E_NOINTERFACE : txt = "E_NOINTERFACE"; break ; +- case E_ABORT : txt = "E_ABORT"; break ; +- case E_FAIL : txt = "E_FAIL"; break ; +- case STG_E_INVALIDFUNCTION : txt = "STG_E_INVALIDFUNCTION"; break ; +- case E_OUTOFMEMORY : txt = "E_OUTOFMEMORY"; break ; +- case E_INVALIDARG : txt = "E_INVALIDARG"; break ; ++ case unsigned (ERROR_NO_MORE_FILES) : txt = "No more files"; break ; ++ case unsigned (E_NOTIMPL) : txt = "E_NOTIMPL"; break ; ++ case unsigned (E_NOINTERFACE) : txt = "E_NOINTERFACE"; break ; ++ case unsigned (E_ABORT) : txt = "E_ABORT"; break ; ++ case unsigned (E_FAIL) : txt = "E_FAIL"; break ; ++ case unsigned (STG_E_INVALIDFUNCTION) : txt = "STG_E_INVALIDFUNCTION"; break ; ++ case unsigned (E_OUTOFMEMORY) : txt = "E_OUTOFMEMORY"; break ; ++ case unsigned (E_INVALIDARG) : txt = "E_INVALIDARG"; break ; + case ERROR_DIRECTORY : txt = "Error Directory"; break ; + default: + txt = strerror(errorCode); diff --git a/p7zip/patch/p7zip-manpages.patch b/p7zip/patch/p7zip-manpages.patch new file mode 100644 index 0000000..8dc4df4 --- /dev/null +++ b/p7zip/patch/p7zip-manpages.patch @@ -0,0 +1,899 @@ +Join of 02-man.patch, 09-man-update.patch and 10-drop-fm-doc.patch from Debian +diff -rup p7zip_16.02.orig/DOC/MANUAL/cmdline/index.htm p7zip_16.02/DOC/MANUAL/cmdline/index.htm +--- p7zip_16.02.orig/DOC/MANUAL/cmdline/index.htm 2016-05-10 10:50:08.000000000 +0100 ++++ p7zip_16.02/DOC/MANUAL/cmdline/index.htm 2018-02-04 03:32:41.200460969 +0000 +@@ -11,12 +11,12 @@ +

Command Line Version User's Guide

+ + +-

7z.exe is the command line version of 7-Zip. 7z.exe uses 7z.dll +-from the 7-Zip package. 7z.dll is used by the 7-Zip File Manager also. ++

7z is the command line version of 7-Zip. 7z uses 7z.so ++from the 7-Zip package. + +-

7za.exe (a = alone) is a standalone version of 7-Zip. +-7za.exe supports only 7z, lzma, cab, zip, gzip, bzip2, Z and tar formats. +-7za.exe doesn't use external modules. ++

7za (a = alone) is a standalone version of 7-Zip. ++7za supports only 7z, lzma, cab, zip, gzip, bzip2, Z and tar formats. ++7za doesn't use external modules. + +

    +
  • Command Line syntax
  • +diff -rup p7zip_16.02.orig/DOC/MANUAL/cmdline/switches/sfx.htm p7zip_16.02/DOC/MANUAL/cmdline/switches/sfx.htm +--- p7zip_16.02.orig/DOC/MANUAL/cmdline/switches/sfx.htm 2016-05-10 10:50:08.000000000 +0100 ++++ p7zip_16.02/DOC/MANUAL/cmdline/switches/sfx.htm 2018-02-04 03:32:41.200460969 +0000 +@@ -22,7 +22,7 @@ +
    {SFX_Module}
    +
    +

    Specifies the SFX module that will be combined with the archive. +- This module must be placed in the same directory as the 7z.exe. ++ This module must be placed in the same directory as the 7z. + If {SFX_Module} is not assigned, 7-Zip will use standard console + SFX module 7zCon.sfx.

    + +diff -rup p7zip_16.02.orig/DOC/MANUAL/general/index.htm p7zip_16.02/DOC/MANUAL/general/index.htm +--- p7zip_16.02.orig/DOC/MANUAL/general/index.htm 2016-05-10 10:50:08.000000000 +0100 ++++ p7zip_16.02/DOC/MANUAL/general/index.htm 2018-02-04 03:32:41.200460969 +0000 +@@ -13,7 +13,6 @@ +

    The main features of 7-Zip

    + +
      +-
    • Powerful file manager
    • +
    • High compression ratio and high speed
    • +
    • Big number of supported archive formats
    • +
    • Additional command line version
    • +@@ -21,7 +20,7 @@ + +

      See Also

      + + + +diff -rup p7zip_16.02.orig/DOC/MANUAL/start.htm p7zip_16.02/DOC/MANUAL/start.htm +--- p7zip_16.02.orig/DOC/MANUAL/start.htm 2016-05-21 09:53:28.000000000 +0100 ++++ p7zip_16.02/DOC/MANUAL/start.htm 2018-02-04 03:32:41.201460979 +0000 +@@ -17,7 +17,6 @@ + + + +@@ -25,7 +24,7 @@ + + + +
      +diff -rup p7zip_16.02.orig/man1/7z.1 p7zip_16.02/man1/7z.1 +--- p7zip_16.02.orig/man1/7z.1 2007-09-21 19:53:12.000000000 +0100 ++++ p7zip_16.02/man1/7z.1 2018-02-04 03:33:07.305726696 +0000 +@@ -1,97 +1,187 @@ +-.TH 7z 1 "September 1 2006" "Mohammed Adnene Trojette" ++.TH 7z 1 "March 6th, 2016" "7-Zip" + .SH NAME +-7z \- A file archiver with highest compression ratio ++7z \- A file archiver with high compression ratio format + .SH SYNOPSIS + .B 7z +-.BR [adeltux] +-.BR [\-] +-.BR [SWITCH] +-.BR +-.BR ... ++.B ++.RB [ "... ]" ++.B ++.RB [ "... ]" ++.RB [ <@listfiles> "... ]" + .PP + .SH DESCRIPTION +-7-Zip is a file archiver with the highest compression ratio. The program supports 7z (that implements LZMA compression algorithm), ZIP, CAB, ARJ, GZIP, BZIP2, TAR, CPIO, RPM and DEB formats. Compression ratio in the new 7z format is 30-50% better than ratio in ZIP format. +-.TP +-7z uses plugins to handle archives. ++7-Zip is a file archiver supporting 7z (that implements LZMA compression algorithm ++featuring very high compression ratio), LZMA2, XZ, ZIP, Zip64, CAB, ++RAR (if the non-free p7zip-rar package is installed), ARJ, GZIP, BZIP2, TAR, CPIO, RPM, ISO, ++most filesystem images and DEB formats. ++Compression ratio in the new 7z format is 30-50% better than ratio in ZIP format. + .PP +-.SH FUNCTION LETTERS ++.B 7z ++uses plugins to handle archives, so it might be slightly slower than ++.BR 7za (1) ++but can handle more archive formats. ++.SH COMMANDS + .TP + .B a +-Add ++Add files to archive ++.TP ++.B b ++Benchmark + .TP + .B d +-Delete ++Delete files from archive + .TP + .B e +-Extract ++Extract files from archive (without using directory names) ++.TP ++.B h ++Calculate hash values for files ++.TP ++.B i ++Show information about supported formats + .TP + .B l +-List ++List contents of archive ++.TP ++.B rn ++Rename files in archive + .TP + .B t +-Test ++Test integrity of archive + .TP + .B u +-Update ++Update files to archive + .TP + .B x +-eXtract with full paths ++eXtract files with full paths + .PP + .SH SWITCHES + .TP +-.B \-ai[r[\-|0]]{@listfile|!wildcard} ++.B \-\- ++Stop switches parsing ++.TP ++.B \-ai[r[-|0]]{@listfile|!wildcard} + Include archives + .TP +-.B \-ax[r[\-|0]]{@listfile|!wildcard} +-eXclude archives ++.B \-ax[r[-|0]]{@listfile|!wildcard} ++Exclude archives ++.TP ++.B \-ao{a|s|t|u} ++Set Overwrite mode ++.TP ++.B \-an ++Disable archive_name field ++.TP ++.B -bb[0-3] ++Set output log level + .TP + .B \-bd +-Disable percentage indicator ++Disable progress indicator ++.TP ++.B \-bs{o|e|p}{0|1|2} ++Set output stream for output/error/progress line ++.TP ++.B \-bt ++Show execution time statistics + .TP + .B \-i[r[\-|0]]{@listfile|!wildcard} + Include filenames + .TP +-.B \-l +-don't store symlinks; store the files/directories they point to (CAUTION : the scanning stage can never end because of recursive symlinks like 'ln \-s .. ldir') +-.TP + .B \-m{Parameters} +-Set Compression Method (see {DEST_SHARE_DOC}/MANUAL/switches/method.htm for a list of methods) +-.TP +-.B \-mhe=on|off +-7z format only : enables or disables archive header encryption (Default : off) ++Set Compression Method (see /usr/share/doc/p7zip/DOC/MANUAL/cmdline/switches/method.htm from the p7zip-full package for a list of methods) + .TP + .B \-o{Directory} + Set Output directory + .TP + .B \-p{Password} +-Set Password ++Set Password (NOTE: this flag does not work with 7zr) + .TP + .B \-r[\-|0] + Recurse subdirectories (CAUTION: this flag does not do what you think, avoid using it) + .TP ++.B \-sa{a|e|s} ++Set archive name mode ++.TP ++.B \-scc{UTF\-8|WIN|DOS} ++Set charset for for console input/output ++.TP ++.B \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}} ++Set charset for list files ++.TP ++.B \-scrc[CRC32|CRC64|SHA1|SHA256|*] ++Set hash function for x, e, h commands ++.TP ++.B \-sdel ++Delete files after compression ++.TP ++.B \-seml[.] ++Send archive by email ++.TP + .B \-sfx[{name}] + Create SFX archive + .TP +-.B \-si +-Read data from StdIn (eg: tar cf \- directory | 7z a \-si directory.tar.7z) ++.B \-si[{name}] ++Read data from stdin (e.g. tar cf \- directory | 7z a \-si directory.tar.7z) + .TP +-.B \-so +-Write data to StdOut (eg: % echo foo | 7z a dummy \-tgzip \-si \-so > /dev/null) ++.B \-slp ++Set Large Pages mode + .TP + .B \-slt +-Sets technical mode for l (list) command ++Show technical information for l (List) command ++.TP ++.B \-snh ++Store hard links as links ++.TP ++.B \-snl ++Store symbolic links as links ++.TP ++.B \-sni ++Store NT security information ++.TP ++.B \-sns[\-] ++Store NTFS alternate streams ++.TP ++.B \-sfx[{name}] ++Create SFX archive ++.TP ++.B \-so ++Write data to stdout (e.g. 7z x \-so directory.tar.7z | tar xf \-) ++.TP ++.B \-spd ++Disable wildcard matching for file names ++.TP ++.B \-spe ++Eliminate duplication of root folder for extract command ++.TP ++.B \-spf ++Use fully qualified file paths ++.TP ++.B \-ssc[\-] ++Set sensitive case mode ++.TP ++.B \-ssw ++Compress shared files ++.TP ++.B \-stl ++Set archive timestamp from the most recently modified file ++.TP ++.B \-stm{HexMask} ++Set CPU thread affinity mask (hexadecimal number) ++.TP ++.B \-stx{Type} ++Exclude archive type + .TP + .B \-t{Type} +-Type of archive (7z, zip, gzip, bzip2 or tar. 7z format is default) ++Set type of archive ++.TP ++.B \-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] ++Update options + .TP + .B \-v{Size}[b|k|m|g] + Create volumes + .TP +-.B \-u[\-][p#][q#][r#][x#][y#][z#][!newArchiveName] +-Update options +-.TP + .B \-w[path] +-Set Working directory ++Set working directory. Empty path means a temporary directory + .TP + .B \-x[r[\-|0]]]{@listfile|!wildcard} + Exclude filenames +@@ -105,7 +195,8 @@ Assume Yes on all queries + .IP 0 + Normal (no errors or warnings detected) + .IP 1 +-Warning (Non fatal error(s)). For example, some files cannot be read during compressing. So they were not compressed ++Warning (Non fatal error(s)). For example, some files cannot be read during compressing, ++so they were not compressed + .IP 2 + Fatal error + .IP 7 +@@ -120,13 +211,13 @@ DO NOT USE the 7-zip format for backup p + + .LP + On Linux/Unix, in order to backup directories you must use tar : +- \- to backup a directory : tar cf \- directory | 7za a \-si directory.tar.7z +- \- to restore your backup : 7za x \-so directory.tar.7z | tar xf \- ++ \- to backup a directory : tar cf \- directory | 7z a \-si directory.tar.7z ++ \- to restore your backup : 7z x \-so directory.tar.7z | tar xf \- + + If you want to send files and directories (not the owner of file) + to others Unix/MacOS/Windows users, you can use the 7-zip format. + +- example : 7za a directory.7z directory ++ example : 7z a directory.7z directory + + .LP + Do not use "\-r" because this flag does not do what you think. +@@ -165,10 +256,15 @@ add all files from directory "dir1" to S + 7z a \-mhe=on \-pmy_password archive.7z a_directory + add all files from directory "a_directory" to the archive "archive.7z" (with data and header archive encryption on) + .SH "SEE ALSO" +-7za(1), 7zr(1), bzip2(1), gzip(1), zip(1) ++.BR 7zr (1), ++.BR 7za (1), ++.BR p7zip (1), ++.BR bzip2 (1), ++.BR gzip (1), ++.BR zip(1), + .PP + .SH "HTML Documentation" +-{DEST_SHARE_DOC}/MANUAL/index.htm ++/usr/share/doc/p7zip-full/DOC/MANUAL/start.htm + .SH AUTHOR + .TP +-Written for Debian by Mohammed Adnene Trojette. ++Written for Debian by Mohammed Adnene Trojette. Updated by Robert Luberda. +diff -rup p7zip_16.02.orig/man1/7za.1 p7zip_16.02/man1/7za.1 +--- p7zip_16.02.orig/man1/7za.1 2007-09-21 19:53:24.000000000 +0100 ++++ p7zip_16.02/man1/7za.1 2018-02-04 03:33:07.305726696 +0000 +@@ -1,99 +1,190 @@ +-.TH 7za 1 "September 1 2006" "Mohammed Adnene Trojette" ++.TH 7za 1 "March 6th, 2016" "7-Zip" + .SH NAME +-7za \- A file archiver with highest compression ratio ++7za \- A file archiver with high compression ratio format + .SH SYNOPSIS + .B 7za +-.BR [adeltux] +-.BR [-] +-.BR [SWITCH] +-.BR +-.BR ... ++.B ++.RB [ "... ]" ++.B ++.RB [ "... ]" ++.RB [ <@listfiles> "... ]" + .PP + .SH DESCRIPTION +-7-Zip is a file archiver with the highest compression ratio. The program supports 7z (that implements LZMA compression algorithm), ZIP, CAB, ARJ, GZIP, BZIP2, TAR, CPIO, RPM and DEB formats. Compression ratio in the new 7z format is 30-50% better than ratio in ZIP format. +-.TP +-7za is a stand-alone executable. 7za handles less archive formats than 7z, but does not need any others. ++7-Zip is a file archiver supporting 7z (that implements LZMA compression algorithm ++featuring very high compression ratio), LZMA2, XZ, ZIP, Zip64, CAB, ++RAR (if the non-free p7zip-rar package is installed), ARJ, GZIP, BZIP2, TAR, CPIO, RPM, ISO, ++most filesystem images and DEB formats. ++Compression ratio in the new 7z format is 30-50% better than ratio in ZIP format. + .PP +-.SH FUNCTION LETTERS ++.B 7za ++is a stand-alone executable. ++.B 7za ++handles fewer archive formats than ++.BR 7z (1). ++.SH COMMANDS + .TP + .B a +-Add ++Add files to archive ++.TP ++.B b ++Benchmark + .TP + .B d +-Delete ++Delete files from archive + .TP + .B e +-Extract ++Extract files from archive (without using directory names) ++.TP ++.B h ++Calculate hash values for files ++.TP ++.B i ++Show information about supported formats + .TP + .B l +-List ++List contents of archive ++.TP ++.B rn ++Rename files in archive + .TP + .B t +-Test ++Test integrity of archive + .TP + .B u +-Update ++Update files to archive + .TP + .B x +-eXtract with full paths ++eXtract files with full paths + .PP + .SH SWITCHES + .TP ++.B \-\- ++Stop switches parsing ++.TP + .B \-ai[r[-|0]]{@listfile|!wildcard} + Include archives + .TP + .B \-ax[r[-|0]]{@listfile|!wildcard} +-eXclude archives ++Exclude archives ++.TP ++.B \-ao{a|s|t|u} ++Set Overwrite mode ++.TP ++.B \-an ++Disable archive_name field ++.TP ++.B -bb[0-3] ++Set output log level + .TP + .B \-bd +-Disable percentage indicator ++Disable progress indicator + .TP +-.B \-i[r[-|0]]{@listfile|!wildcard} +-Include filenames ++.B \-bs{o|e|p}{0|1|2} ++Set output stream for output/error/progress line + .TP +-.B \-l +-don't store symlinks; store the files/directories they point to (CAUTION : the scanning stage can never end because of recursive symlinks like 'ln \-s .. ldir') ++.B \-bt ++Show execution time statistics + .TP +-.B \-m{Parameters} +-Set Compression Method (see {DEST_SHARE_DOC}/MANUAL/switches/method.htm for a list of methods) ++.B \-i[r[\-|0]]{@listfile|!wildcard} ++Include filenames + .TP +-.B \-mhe=on|off +-7z format only : enables or disables archive header encryption (Default : off) ++.B \-m{Parameters} ++Set Compression Method (see /usr/share/doc/p7zip/DOC/MANUAL/cmdline/switches/method.htm from the p7zip-full package for a list of methods) + .TP + .B \-o{Directory} + Set Output directory + .TP + .B \-p{Password} +-Set Password ++Set Password (NOTE: this flag does not work with 7zr) + .TP +-.B \-r[-|0] ++.B \-r[\-|0] + Recurse subdirectories (CAUTION: this flag does not do what you think, avoid using it) + .TP ++.B \-sa{a|e|s} ++Set archive name mode ++.TP ++.B \-scc{UTF\-8|WIN|DOS} ++Set charset for for console input/output ++.TP ++.B \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}} ++Set charset for list files ++.TP ++.B \-scrc[CRC32|CRC64|SHA1|SHA256|*] ++Set hash function for x, e, h commands ++.TP ++.B \-sdel ++Delete files after compression ++.TP ++.B \-seml[.] ++Send archive by email ++.TP + .B \-sfx[{name}] + Create SFX archive + .TP +-.B \-si +-Read data from StdIn (eg: tar cf \- directory | 7za a \-si directory.tar.7z) ++.B \-si[{name}] ++Read data from stdin (e.g. tar cf \- directory | 7za a \-si directory.tar.7z) + .TP +-.B \-so +-Write data to StdOut (eg: % echo foo | 7z a dummy \-tgzip \-si \-so > /dev/null) ++.B \-slp ++Set Large Pages mode + .TP + .B \-slt +-Sets technical mode for l (list) command ++Show technical information for l (List) command + .TP +-.B \-t{Type} +-Type of archive (7z, zip, gzip, bzip2 or tar. 7z format is default) ++.B \-snh ++Store hard links as links + .TP +-.B \-v{Size}[b|k|m|g] +-Create volumes ++.B \-snl ++Store symbolic links as links ++.TP ++.B \-sni ++Store NT security information ++.TP ++.B \-sns[\-] ++Store NTFS alternate streams ++.TP ++.B \-sfx[{name}] ++Create SFX archive ++.TP ++.B \-so ++Write data to stdout (e.g. 7za x \-so directory.tar.7z | tar xf \-) ++.TP ++.B \-spd ++Disable wildcard matching for file names ++.TP ++.B \-spe ++Eliminate duplication of root folder for extract command ++.TP ++.B \-spf ++Use fully qualified file paths ++.TP ++.B \-ssc[\-] ++Set sensitive case mode ++.TP ++.B \-ssw ++Compress shared files ++.TP ++.B \-stl ++Set archive timestamp from the most recently modified file ++.TP ++.B \-stm{HexMask} ++Set CPU thread affinity mask (hexadecimal number) ++.TP ++.B \-stx{Type} ++Exclude archive type ++.TP ++.B \-t{Type} ++Set type of archive + .TP + .B \-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] + Update options + .TP ++.B \-v{Size}[b|k|m|g] ++Create volumes ++.TP + .B \-w[path] +-Set Working directory ++Set working directory. Empty path means a temporary directory + .TP +-.B \-x[r[-|0]]]{@listfile|!wildcard} ++.B \-x[r[\-|0]]]{@listfile|!wildcard} + Exclude filenames + .TP + .B \-y +@@ -105,7 +196,8 @@ Assume Yes on all queries + .IP 0 + Normal (no errors or warnings detected) + .IP 1 +-Warning (Non fatal error(s)). For example, some files cannot be read during compressing. So they were not compressed ++Warning (Non fatal error(s)). For example, some files cannot be read during compressing, ++so they were not compressed + .IP 2 + Fatal error + .IP 7 +@@ -165,10 +257,15 @@ add all files from directory "dir1" to S + 7za a \-mhe=on \-pmy_password archive.7z a_directory + add all files from directory "a_directory" to the archive "archive.7z" (with data and header archive encryption on) + .SH "SEE ALSO" +-7z(1), 7zr(1), bzip2(1), gzip(1), zip(1) ++.BR 7zr (1), ++.BR 7z (1), ++.BR p7zip (1), ++.BR bzip2 (1), ++.BR gzip (1), ++.BR zip(1), + .PP + .SH "HTML Documentation" +-{DEST_SHARE_DOC}/MANUAL/index.htm ++/usr/share/doc/p7zip-full/DOC/MANUAL/start.htm + .SH AUTHOR + .TP +-Written for Debian by Mohammed Adnene Trojette. ++Written for Debian by Mohammed Adnene Trojette. Updated by Robert Luberda. +diff -rup p7zip_16.02.orig/man1/7zr.1 p7zip_16.02/man1/7zr.1 +--- p7zip_16.02.orig/man1/7zr.1 2007-09-21 19:53:34.000000000 +0100 ++++ p7zip_16.02/man1/7zr.1 2018-02-04 03:33:07.305726696 +0000 +@@ -1,99 +1,192 @@ +-.TH 7zr 1 "September 1 2006" "Mohammed Adnene Trojette" ++.TH 7zr 1 "March 6th, 2016" "7-Zip" + .SH NAME +-7zr \- A file archiver with highest compression ratio ++7zr \- A file archiver with high compression ratio format + .SH SYNOPSIS + .B 7zr +-.BR [adeltux] +-.BR [-] +-.BR [SWITCH] +-.BR +-.BR ... ++.B ++.RB [ "... ]" ++.B ++.RB [ "... ]" ++.RB [ <@listfiles> "... ]" + .PP + .SH DESCRIPTION +-7-Zip is a file archiver with the highest compression ratio. The program supports 7z (that implements LZMA compression algorithm), ZIP, CAB, ARJ, GZIP, BZIP2, TAR, CPIO, RPM and DEB formats. Compression ratio in the new 7z format is 30-50% better than ratio in ZIP format. +-.TP +-7zr is a stand-alone executable. 7zr handles less archive formats than 7z, but does not need any others. 7zr is a "light-version" of 7za that only handles 7z archives. ++7-Zip is a file archiver supporting 7z (that implements LZMA compression algorithm ++featuring very high compression ratio), LZMA2, XZ, ZIP, Zip64, CAB, ++RAR (if the non-free p7zip-rar package is installed), ARJ, GZIP, BZIP2, TAR, CPIO, RPM, ISO, ++most filesystem images and DEB formats. ++Compression ratio in the new 7z format is 30-50% better than ratio in ZIP format. + .PP +-.SH FUNCTION LETTERS ++.B 7zr ++is a stand-alone executable. ++.B 7zr ++is a "light-version" of ++.BR 7za (1). ++.B 7zr ++handles password-less archives in the 7z, LZMA2, and XZ formats only. ++.SH COMMANDS + .TP + .B a +-Add ++Add files to archive ++.TP ++.B b ++Benchmark + .TP + .B d +-Delete ++Delete files from archive + .TP + .B e +-Extract ++Extract files from archive (without using directory names) ++.TP ++.B h ++Calculate hash values for files ++.TP ++.B i ++Show information about supported formats + .TP + .B l +-List ++List contents of archive ++.TP ++.B rn ++Rename files in archive + .TP + .B t +-Test ++Test integrity of archive + .TP + .B u +-Update ++Update files to archive + .TP + .B x +-eXtract with full paths ++eXtract files with full paths + .PP + .SH SWITCHES + .TP ++.B \-\- ++Stop switches parsing ++.TP + .B \-ai[r[-|0]]{@listfile|!wildcard} + Include archives + .TP + .B \-ax[r[-|0]]{@listfile|!wildcard} +-eXclude archives ++Exclude archives ++.TP ++.B \-ao{a|s|t|u} ++Set Overwrite mode ++.TP ++.B \-an ++Disable archive_name field ++.TP ++.B -bb[0-3] ++Set output log level + .TP + .B \-bd +-Disable percentage indicator ++Disable progress indicator + .TP +-.B \-i[r[-|0]]{@listfile|!wildcard} +-Include filenames ++.B \-bs{o|e|p}{0|1|2} ++Set output stream for output/error/progress line + .TP +-.B \-l +-don't store symlinks; store the files/directories they point to (CAUTION : the scanning stage can never end because of recursive symlinks like 'ln \-s .. ldir') ++.B \-bt ++Show execution time statistics + .TP +-.B \-m{Parameters} +-Set Compression Method (see {DEST_SHARE_DOC}/MANUAL/switches/method.htm for a list of methods) ++.B \-i[r[\-|0]]{@listfile|!wildcard} ++Include filenames + .TP +-.B \-mhe=on|off +-7z format only : enables or disables archive header encryption (Default : off) ++.B \-m{Parameters} ++Set Compression Method (see /usr/share/doc/p7zip/DOC/MANUAL/cmdline/switches/method.htm from the p7zip-full package for a list of methods) + .TP + .B \-o{Directory} + Set Output directory + .TP +-.B \-p{Password} +-Set Password +-.TP +-.B \-r[-|0] ++.B \-r[\-|0] + Recurse subdirectories (CAUTION: this flag does not do what you think, avoid using it) + .TP ++.B \-sa{a|e|s} ++Set archive name mode ++.TP ++.B \-scc{UTF\-8|WIN|DOS} ++Set charset for for console input/output ++.TP ++.B \-scs{UTF\-8|UTF\-16LE|UTF\-16BE|WIN|DOS|{id}} ++Set charset for list files ++.TP ++.B \-scrc[CRC32|CRC64|SHA1|SHA256|*] ++Set hash function for x, e, h commands ++.TP ++.B \-sdel ++Delete files after compression ++.TP ++.B \-seml[.] ++Send archive by email ++.TP + .B \-sfx[{name}] + Create SFX archive + .TP +-.B \-si +-Read data from StdIn (eg: tar cf \- directory | 7zr a \-si directory.tar.7z) ++.B \-si[{name}] ++Read data from stdin (e.g. tar cf \- directory | 7zr a \-si directory.tar.7z) + .TP +-.B \-so +-Write data to StdOut (eg: 7zr x \-so directory.tar.7z | tar xf \-) ++.B \-slp ++Set Large Pages mode + .TP + .B \-slt +-Sets technical mode for l (list) command ++Show technical information for l (List) command + .TP +-.B \-v{Size}[b|k|m|g] +-Create volumes ++.B \-snh ++Store hard links as links ++.TP ++.B \-snl ++Store symbolic links as links ++.TP ++.B \-sni ++Store NT security information ++.TP ++.B \-sns[\-] ++Store NTFS alternate streams ++.TP ++.B \-sfx[{name}] ++Create SFX archive ++.TP ++.B \-so ++Write data to stdout (e.g. 7zr x \-so directory.tar.7z | tar xf \-) ++.TP ++.B \-spd ++Disable wildcard matching for file names ++.TP ++.B \-spe ++Eliminate duplication of root folder for extract command ++.TP ++.B \-spf ++Use fully qualified file paths ++.TP ++.B \-ssc[\-] ++Set sensitive case mode ++.TP ++.B \-ssw ++Compress shared files ++.TP ++.B \-stl ++Set archive timestamp from the most recently modified file ++.TP ++.B \-stm{HexMask} ++Set CPU thread affinity mask (hexadecimal number) ++.TP ++.B \-stx{Type} ++Exclude archive type ++.TP ++.B \-t{Type} ++Set type of archive + .TP + .B \-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] + Update options + .TP ++.B \-v{Size}[b|k|m|g] ++Create volumes ++.TP + .B \-w[path] +-Set Working directory ++Set working directory. Empty path means a temporary directory + .TP +-.B \-x[r[-|0]]]{@listfile|!wildcard} ++.B \-x[r[\-|0]]]{@listfile|!wildcard} + Exclude filenames + .TP +-.B \-y ++.B \-y + Assume Yes on all queries + .PP + .SH DIAGNOSTICS +@@ -102,7 +195,8 @@ Assume Yes on all queries + .IP 0 + Normal (no errors or warnings detected) + .IP 1 +-Warning (Non fatal error(s)). For example, some files cannot be read during compressing. So they were not compressed ++Warning (Non fatal error(s)). For example, some files cannot be read during compressing, ++so they were not compressed + .IP 2 + Fatal error + .IP 7 +@@ -117,8 +211,8 @@ DO NOT USE the 7-zip format for backup p + + .LP + On Linux/Unix, in order to backup directories you must use tar : +- \- to backup a directory : tar cf - directory | 7zr a -si directory.tar.7z +- \- to restore your backup : 7zr x -so directory.tar.7z | tar xf - ++ \- to backup a directory : tar cf \- directory | 7zr a \-si directory.tar.7z ++ \- to restore your backup : 7zr x \-so directory.tar.7z | tar xf \- + + If you want to send files and directories (not the owner of file) + to others Unix/MacOS/Windows users, you can use the 7-zip format. +@@ -156,16 +250,16 @@ solid archive = on + .B + 7zr a \-sfx archive.exe dir1 + add all files from directory "dir1" to SFX archive archive.exe (Remark : SFX archive MUST end with ".exe") +-.SH EXAMPLE 3 +-.TP +-.B +-7zr a \-mhe=on \-pmy_password archive.7z a_directory +-add all files from directory "a_directory" to the archive "archive.7z" (with data and header archive encryption on) + .SH "SEE ALSO" +-7z(1), 7za(1), bzip2(1), gzip(1), zip(1) ++.BR 7za (1), ++.BR 7z (1), ++.BR p7zip (1), ++.BR bzip2 (1), ++.BR gzip (1), ++.BR zip(1), + .PP + .SH "HTML Documentation" +-{DEST_SHARE_DOC}/MANUAL/index.htm ++/usr/share/doc/p7zip/DOC/MANUAL/start.htm (avabilable when the p7zip-full package is installed) + .SH AUTHOR + .TP +-Written for Debian by Mohammed Adnene Trojette. ++Written for Debian by Mohammed Adnene Trojette. Updated by Robert Luberda. diff --git a/p7zip/patch/p7zip_15.14-norar_cmake.patch b/p7zip/patch/p7zip_15.14-norar_cmake.patch new file mode 100644 index 0000000..41a351d --- /dev/null +++ b/p7zip/patch/p7zip_15.14-norar_cmake.patch @@ -0,0 +1,149 @@ +diff -rup p7zip_15.14.orig/CPP/7zip/Bundles/Format7zFree/makefile.list p7zip_15.14/CPP/7zip/Bundles/Format7zFree/makefile.list +--- p7zip_15.14.orig/CPP/7zip/Bundles/Format7zFree/makefile.list 2016-03-10 07:27:16.000000000 +0000 ++++ p7zip_15.14/CPP/7zip/Bundles/Format7zFree/makefile.list 2016-03-15 13:50:22.638470716 +0000 +@@ -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/Arc + $(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/ + $(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 -rup p7zip_15.14.orig/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt p7zip_15.14/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt +--- p7zip_15.14.orig/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt 2016-03-10 07:27:16.000000000 +0000 ++++ p7zip_15.14/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt 2016-03-15 13:50:22.639470728 +0000 +@@ -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 -rup p7zip_15.14.orig/CPP/7zip/CMAKE/generate.sh p7zip_15.14/CPP/7zip/CMAKE/generate.sh +--- p7zip_15.14.orig/CPP/7zip/CMAKE/generate.sh 2016-02-03 04:54:00.000000000 +0000 ++++ p7zip_15.14/CPP/7zip/CMAKE/generate.sh 2016-03-15 13:50:47.596758591 +0000 +@@ -15,15 +15,15 @@ CURDIR=$PWD + cd $CURDIR + doit "Unix" "Unix Makefiles" + +-cd $CURDIR +-doit "codeblocks" "CodeBlocks - Unix Makefiles" ++#cd $CURDIR ++#doit "codeblocks" "CodeBlocks - Unix Makefiles" + + #cd $CURDIR + #doit "KDevelop3" "KDevelop3" + +-cd $CURDIR +-doit "EclipseCDT4" "Eclipse CDT4 - Unix Makefiles" ++#cd $CURDIR ++#doit "EclipseCDT4" "Eclipse CDT4 - Unix Makefiles" + +-cd $CURDIR +-doit "ninja" "Ninja" ++#cd $CURDIR ++#doit "ninja" "Ninja" + +diff -rup p7zip_15.14.orig/DOC/License.txt p7zip_15.14/DOC/License.txt +--- p7zip_15.14.orig/DOC/License.txt 2016-03-02 05:57:39.000000000 +0000 ++++ p7zip_15.14/DOC/License.txt 2016-03-15 13:50:22.640470740 +0000 +@@ -1,3 +1,6 @@ ++ Fedora package note: non-Free unrar code have been removed from the sources ++ (#190277) ++ + 7-Zip source code + ~~~~~~~~~~~~~~~~~ + License for use and distribution +diff -rup p7zip_15.14.orig/makefile p7zip_15.14/makefile +--- p7zip_15.14.orig/makefile 2016-02-29 06:28:31.000000000 +0000 ++++ p7zip_15.14/makefile 2016-03-15 13:50:22.640470740 +0000 +@@ -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/p7zip/slack-desc b/p7zip/slack-desc new file mode 100644 index 0000000..088fa43 --- /dev/null +++ b/p7zip/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +p7zip: p7zip (File Compression/Decompression Utility) +p7zip: +p7zip: 7-Zip is a well-known file compression utility for windows. +p7zip: p7zip is a ported version for linux with nearly the same capabilities. +p7zip: +p7zip: Homepage: http://p7zip.sourceforge.net/ +p7zip: +p7zip: +p7zip: +p7zip: +p7zip: diff --git a/parcellite/README b/parcellite/README new file mode 100644 index 0000000..7c0ccd5 --- /dev/null +++ b/parcellite/README @@ -0,0 +1,18 @@ +Parcellite is a lightweight GTK+ clipboard manager. This is a stripped +down, basic-features-only clipboard manager with a small memory footprint +for those who like simplicity. + +Parcellite features a clipboard CLI. Unrecognized options and the +contents of your standard input get copied to your clipboard. +See the man page for examples. + +Features + * Keeps a clipboard history. + * Various view options to display items the way you like it. + * Daemon mode; guard your clipboard contents when you close applications. + * Global hotkeys to display your items quickly. + * Perform custom commands using clipboard contents. + +If you prefer using stock GTK icons (based on your GTK theme) as opposed to +the new Parcellite icon, then simply run the script like this: + NOICON=YES ./parcellite.SlackBuild diff --git a/parcellite/doinst.sh b/parcellite/doinst.sh new file mode 100644 index 0000000..140e332 --- /dev/null +++ b/parcellite/doinst.sh @@ -0,0 +1,3 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications +fi diff --git a/parcellite/parcellite.SlackBuild b/parcellite/parcellite.SlackBuild new file mode 100644 index 0000000..99632fb --- /dev/null +++ b/parcellite/parcellite.SlackBuild @@ -0,0 +1,113 @@ +#!/bin/sh + +# Slackware build script for parcellite +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=parcellite +VERSION=${VERSION:-1.2.1} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +# If set to "YES" then parcellite will use GTK Stock Icon based upon theme +NOICON=${NOICON:-NO} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" +else + SLKCFLAGS="-O2" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +if [ "$NOICON" = "YES" ]; then + # Force parcellite to use the stock GTK icons + sed -i "s/gtk_status_icon_new_from_icon_name(PARCELLITE_ICON)/gtk_status_icon_new_from_stock(PARCELLITE_ICON)/" src/main.c + sed -i "s/PARCELLITE_ICON/GTK_STOCK_PASTE/" src/main.c + sed -i "s/#define GTK_STOCK_PASTE \"parcellite\"//" src/main.c +fi + +export CFLAGS="-g $SLKCFLAGS" +export CPPFLAGS="-g $SLKCFLAGS" +export LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/man \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make -j$(nproc) install DESTDIR=$PKG + +if [ "$NOICON" = "YES" ]; then + sed -i "s/Icon=parcellite/Icon=gtk-paste/" $PKG/usr/share/applications/parcellite.desktop + sed -i "s/Icon=parcellite/Icon=gtk-paste/" $PKG/etc/xdg/autostart/parcellite-startup.desktop + + # Remove the unused icons + rm -rfv $PKG/usr/share/pixmaps/ +fi + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a AUTHORS COPYING ChangeLog README TODO INSTALL NEWS $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/parcellite/parcellite.info b/parcellite/parcellite.info new file mode 100644 index 0000000..6280e36 --- /dev/null +++ b/parcellite/parcellite.info @@ -0,0 +1,10 @@ +PRGNAM="parcellite" +VERSION="1.2.1" +HOMEPAGE="http://parcellite.sourceforge.net" +DOWNLOAD="http://downloads.sourceforge.net/parcellite/parcellite-1.2.1.tar.gz" +MD5SUM="f7d5ca3a31c7a558cf56b77e4e7cdc6c" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/parcellite/slack-desc b/parcellite/slack-desc new file mode 100644 index 0000000..db1905e --- /dev/null +++ b/parcellite/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +parcellite: parcellite (clipboard manager) +parcellite: +parcellite: Parcellite is a lightweight GTK+ clipboard manager. +parcellite: +parcellite: Homepage: http://parcellite.sourceforge.net +parcellite: +parcellite: +parcellite: +parcellite: +parcellite: +parcellite: diff --git a/pasystray/README b/pasystray/README new file mode 100644 index 0000000..b96d62f --- /dev/null +++ b/pasystray/README @@ -0,0 +1,5 @@ +Pasystray allows setting the default PulseAudio source/sink and moving +streams on the fly between sources/sinks without restarting the client +applications. + +Can optionally take advantage of paman, paprefs, and pavumeter. diff --git a/pasystray/doinst.sh b/pasystray/doinst.sh new file mode 100644 index 0000000..35d8ba1 --- /dev/null +++ b/pasystray/doinst.sh @@ -0,0 +1,9 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications &> /dev/null +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/pasystray/pasystray.SlackBuild b/pasystray/pasystray.SlackBuild new file mode 100644 index 0000000..f54d1ca --- /dev/null +++ b/pasystray/pasystray.SlackBuild @@ -0,0 +1,107 @@ +#!/bin/sh +# +# Slackware build script for pasystray +# +# Copyright 2014-2019 Erik W. Hanson, Minneapolis, MN, USA +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=pasystray +VERSION=${VERSION:-0.8.0} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -ue + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +rm -rf autom4te.cache +rm -f config.cache +aclocal +autoconf +autoheader +automake --add-missing + +CFLAGS="-g $SLKCFLAGS" \ +CXXFLAGS="-g $SLKCFLAGS" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-static \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --build=$ARCH-slackware-linux + +make clean +make -j$(nproc) +make install-strip DESTDIR=$PKG + +find $PKG/usr/man -type f -exec gzip -9 {} \; + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a AUTHORS LICENSE README.md TODO $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/pasystray/pasystray.info b/pasystray/pasystray.info new file mode 100644 index 0000000..e351118 --- /dev/null +++ b/pasystray/pasystray.info @@ -0,0 +1,10 @@ +PRGNAM="pasystray" +VERSION="0.8.0" +HOMEPAGE="https://github.com/christophgysin/pasystray" +DOWNLOAD="https://github.com/christophgysin/pasystray/archive/refs/tags/0.8.0/pasystray-0.8.0.tar.gz" +MD5SUM="7fd769d2a476e2af1dac1ddfba658d8a" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/pasystray/slack-desc b/pasystray/slack-desc new file mode 100644 index 0000000..3a02f64 --- /dev/null +++ b/pasystray/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +pasystray: pasystray (System tray application for PulseAudio) +pasystray: +pasystray: Pasystray allows setting the default PulseAudio source/sink and +pasystray: moving streams on the fly between sources/sinks without restarting +pasystray: the client applications. +pasystray: +pasystray: +pasystray: +pasystray: +pasystray: +pasystray: diff --git a/pbzip2/README b/pbzip2/README new file mode 100644 index 0000000..2f2fc09 --- /dev/null +++ b/pbzip2/README @@ -0,0 +1,5 @@ +PBZIP2 is a parallel implementation of the bzip2 block-sorting file +compressor that uses pthreads and achieves near-linear speedup on SMP +machines. The output of this version is fully compatible with bzip2 v1.0.2 +or newer (ie: anything compressed with pbzip2 can be decompressed with +bzip2). diff --git a/pbzip2/pbzip2.SlackBuild b/pbzip2/pbzip2.SlackBuild new file mode 100644 index 0000000..5c6de46 --- /dev/null +++ b/pbzip2/pbzip2.SlackBuild @@ -0,0 +1,91 @@ +#!/bin/sh + +# Slackware build script for PBZIP2 + +# Copyright 2009-2017 Erik W. Hanson, Minneapolis, MN, USA +# Copyright 2022 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=pbzip2 +VERSION=${VERSION:-1.1.13} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" +else + SLKCFLAGS="-O2" +fi + +set -eu + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +make -j$(nproc) CFLAGS+="$SLKCFLAGS" LDFLAGS+="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed" + +# DESTDIR isn't supported; install manually +mkdir -p $PKG/usr/{bin,man/man1,doc/$PRGNAM-$VERSION} + +# Binary +cp pbzip2 $PKG/usr/bin/pbzip2 +strip --strip-unneeded $PKG/usr/bin/pbzip2 2> /dev/null +chmod 0755 $PKG/usr/bin/pbzip2 + +# Man page +gzip -9c pbzip2.1 > $PKG/usr/man/man1/pbzip2.1.gz +chmod 0644 $PKG/usr/man/man1/pbzip2.1.gz + +cp -a AUTHORS COPYING ChangeLog README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/pbzip2/pbzip2.info b/pbzip2/pbzip2.info new file mode 100644 index 0000000..dfa6e96 --- /dev/null +++ b/pbzip2/pbzip2.info @@ -0,0 +1,10 @@ +PRGNAM="pbzip2" +VERSION="1.1.13" +HOMEPAGE="http://compression.ca/pbzip2/" +DOWNLOAD="https://launchpad.net/pbzip2/1.1/1.1.13/+download/pbzip2-1.1.13.tar.gz" +MD5SUM="4cb87da2dba05540afce162f34b3a9a6" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/pbzip2/slack-desc b/pbzip2/slack-desc new file mode 100644 index 0000000..5ccc690 --- /dev/null +++ b/pbzip2/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +pbzip2: pbzip2 (Parallel BZIP2) +pbzip2: +pbzip2: PBZIP2 is a parallel implementation of the bzip2 block-sorting file +pbzip2: compressor that uses pthreads and achieves near-linear speedup on SMP +pbzip2: machines. The output of this version is fully compatible with bzip2 +pbzip2: v1.0.2 or newer (ie: anything compressed with pbzip2 can be +pbzip2: decompressed with bzip2). +pbzip2: +pbzip2: +pbzip2: +pbzip2: diff --git a/perl-AnyEvent/README b/perl-AnyEvent/README new file mode 100644 index 0000000..2fdf2b1 --- /dev/null +++ b/perl-AnyEvent/README @@ -0,0 +1,4 @@ +AnyEvent provides a uniform interface to various event loops. This +allows module authors to use event loop functionality without +forcing module users to use a specific event loop implementation +(since more than one event loop cannot coexist peacefully). diff --git a/perl-AnyEvent/perl-AnyEvent.SlackBuild b/perl-AnyEvent/perl-AnyEvent.SlackBuild new file mode 100755 index 0000000..db74f57 --- /dev/null +++ b/perl-AnyEvent/perl-AnyEvent.SlackBuild @@ -0,0 +1,99 @@ +#!/bin/sh + +# Slackware build script for perl-AnyEvent +# +# Written by Marcin Herda +# Copyright 2016-2017 Johannes Schoepfer, Germany +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=perl-AnyEvent +VERSION=${VERSION:-7.17} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} + +SRCNAM="$(printf $PRGNAM | cut -d- -f2)" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +export PERL_CANARY_STABILITY_NOPROMPT=1 +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN1DIR=/usr/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make test +make install DESTDIR=$PKG + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a Changes README MANIFEST COPYING $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/perl-AnyEvent/perl-AnyEvent.info b/perl-AnyEvent/perl-AnyEvent.info new file mode 100644 index 0000000..5e39dfc --- /dev/null +++ b/perl-AnyEvent/perl-AnyEvent.info @@ -0,0 +1,10 @@ +PRGNAM="perl-AnyEvent" +VERSION="7.17" +HOMEPAGE="https://metacpan.org/release/AnyEvent" +DOWNLOAD="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/AnyEvent-7.17.tar.gz" +MD5SUM="7ac0d8f410061ec2a62c6ca9341f5fed" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/perl-AnyEvent/slack-desc b/perl-AnyEvent/slack-desc new file mode 100644 index 0000000..dbde560 --- /dev/null +++ b/perl-AnyEvent/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-AnyEvent: perl-AnyEvent (the DBI of event loop programming) +perl-AnyEvent: +perl-AnyEvent: AnyEvent provides a uniform interface to various event loops. This +perl-AnyEvent: allows module authors to use event loop functionality without +perl-AnyEvent: forcing module users to use a specific event loop implementation +perl-AnyEvent: (since more than one event loop cannot coexist peacefully). +perl-AnyEvent: +perl-AnyEvent: +perl-AnyEvent: +perl-AnyEvent: +perl-AnyEvent: diff --git a/perl-Canary-Stability/README b/perl-Canary-Stability/README new file mode 100644 index 0000000..bd9a9a5 --- /dev/null +++ b/perl-Canary-Stability/README @@ -0,0 +1 @@ +canary to check perl compatibility for schmorp's modules diff --git a/perl-Canary-Stability/perl-Canary-Stability.SlackBuild b/perl-Canary-Stability/perl-Canary-Stability.SlackBuild new file mode 100755 index 0000000..1fea260 --- /dev/null +++ b/perl-Canary-Stability/perl-Canary-Stability.SlackBuild @@ -0,0 +1,110 @@ +#!/bin/sh + +# Slackware Package Build Script for perl modules: Canary::Stability +# Home Page https://metacpan.org/release/MLEHMANN/Canary-Stability-2006 + +# Copyright (c) 2015, Nishant Limbachia, Hoffman Estates, IL, USA +# (nishant _AT_ mnspace _DOT_ net) +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. + +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: + +# 1. Redistributions of script must retain the above copyright notice, +# this list of conditions and the following disclaimer. + +# 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. + +PRGNAM="perl-Canary-Stability" +VERSION=${VERSION:-2006} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM="$(printf $PRGNAM | cut -f2- -d-)" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +set -e + +DOCS="COPYING Changes README" + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +rm -fr $TMP/$SRCNAM-$VERSION $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $TMP/$SRCNAM-$VERSION +chown -R root.root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN1DIR=/usr/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/man/man3 + +make +make install DESTDIR=$PKG + +### putting essential docs +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +# Remove perlocal.pod and .packlist from $PKG +find $PKG -name "perllocal.pod" -o -name ".packlist" -o -name "*.bs" | xargs rm -f + +# Remove empty directories +find $PKG -depth -type d -empty -exec rm -rf {} \; + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $(find $PKG/usr/man -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/perl-Canary-Stability/perl-Canary-Stability.info b/perl-Canary-Stability/perl-Canary-Stability.info new file mode 100644 index 0000000..d60a9a7 --- /dev/null +++ b/perl-Canary-Stability/perl-Canary-Stability.info @@ -0,0 +1,10 @@ +PRGNAM="perl-Canary-Stability" +VERSION="2006" +HOMEPAGE="https://metacpan.org/release/MLEHMANN/Canary-Stability-2006" +DOWNLOAD="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/Canary-Stability-2006.tar.gz" +MD5SUM="570ffd5fd8a399b6ba392c8451c8f5ab" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/perl-Canary-Stability/slack-desc b/perl-Canary-Stability/slack-desc new file mode 100644 index 0000000..3758678 --- /dev/null +++ b/perl-Canary-Stability/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-Canary-Stability: perl-Canary-Stability (Canary::Stability) +perl-Canary-Stability: +perl-Canary-Stability: canary to check perl compatibility for schmorp's modules +perl-Canary-Stability: +perl-Canary-Stability: +perl-Canary-Stability: Homepage: https://metacpan.org/release/MLEHMANN/Canary-Stability-2006 +perl-Canary-Stability: +perl-Canary-Stability: +perl-Canary-Stability: +perl-Canary-Stability: +perl-Canary-Stability: diff --git a/perl-Coro/README b/perl-Coro/README new file mode 100644 index 0000000..829b494 --- /dev/null +++ b/perl-Coro/README @@ -0,0 +1,32 @@ +This module collection manages continuations in general, most often in +the form of cooperative threads (also called coros, or simply "coro" in +the documentation). They are similar to kernel threads but don't (in +general) run in parallel at the same time even on SMP machines. The +specific flavor of thread offered by this module also guarantees you +that it will not switch between threads unless necessary, at +easily-identified points in your program, so locking and parallel access +are rarely an issue, making thread programming much safer and easier than +using other thread models. + +Unlike the so-called "Perl threads" (which are not actually real threads +but only the windows process emulation (see section of same name for more +details) ported to UNIX, and as such act as processes), Coro provides a +full shared address space, which makes communication between threads very +easy. And coro threads are fast, too: disabling the Windows process +emulation code in your perl and using Coro can easily result in a two to +four times speed increase for your programs. A parallel matrix +multiplication benchmark (very communication-intensive) runs over 300 +times faster on a single core than perls pseudo-threads on a quad core +using all four cores. + +Coro achieves that by supporting multiple running interpreters that share +data, which is especially useful to code pseudo-parallel processes and for +event-based programming, such as multiple HTTP-GET requests running +concurrently. See Coro::AnyEvent to learn more on how to integrate Coro +into an event-based environment. + +In this module, a thread is defined as "callchain + lexical variables + +some package variables + C stack), that is, a thread has its own +callchain, its own set of lexicals and its own set of perls most +important global variables (see Coro::State for more configuration and +background info). diff --git a/perl-Coro/perl-Coro.SlackBuild b/perl-Coro/perl-Coro.SlackBuild new file mode 100755 index 0000000..d6e6259 --- /dev/null +++ b/perl-Coro/perl-Coro.SlackBuild @@ -0,0 +1,97 @@ +#!/bin/sh + +# Slackware build script for perl-Coro + +# Copyright 2019 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=perl-Coro +VERSION=${VERSION:-6.57} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM="$(printf $PRGNAM | cut -d- -f2-)" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +PERL_CANARY_STABILITY_NOPROMPT=1 \ +PERL_MM_USE_DEFAULT=1 \ +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN1DIR=/usr/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make test +make install DESTDIR=$PKG + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a Changes COPYING README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/perl-Coro/perl-Coro.info b/perl-Coro/perl-Coro.info new file mode 100644 index 0000000..2bfadf6 --- /dev/null +++ b/perl-Coro/perl-Coro.info @@ -0,0 +1,10 @@ +PRGNAM="perl-Coro" +VERSION="6.57" +HOMEPAGE="https://metacpan.org/pod/Coro" +DOWNLOAD="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/Coro-6.57.tar.gz" +MD5SUM="fa5970a2a2f3df9d68d4369c7dde1a55" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="perl-EV perl-AnyEvent perl-common-sense perl-Guard perl-event" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/perl-Coro/slack-desc b/perl-Coro/slack-desc new file mode 100644 index 0000000..2903ad0 --- /dev/null +++ b/perl-Coro/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-Coro: perl-Coro (the only real threads in perl) +perl-Coro: +perl-Coro: Coro provides a full shared address space, which makes communication +perl-Coro: between threads very easy. And coro threads are fast, too: disabling +perl-Coro: the Windows process emulation code in your perl and using Coro can +perl-Coro: easily result in a two to four times speed increase for your +perl-Coro: programs. A parallel matrix multiplication benchmark (very +perl-Coro: communication-intensive) runs over 300 times faster on a single core +perl-Coro: than perls pseudo-threads on a quad core using all four cores. +perl-Coro: +perl-Coro: Homepage: https://metacpan.org/pod/Coro diff --git a/perl-Coro/slack-required b/perl-Coro/slack-required new file mode 100644 index 0000000..e9feeb9 --- /dev/null +++ b/perl-Coro/slack-required @@ -0,0 +1,5 @@ +perl-EV +perl-AnyEvent +perl-common-sense +perl-Guard +perl-event \ No newline at end of file diff --git a/perl-EV/README b/perl-EV/README new file mode 100644 index 0000000..d8e4a02 --- /dev/null +++ b/perl-EV/README @@ -0,0 +1,11 @@ +perl-EV is a perl interface to libev, a high performance full-featured +event loop. + +This module is very fast and scalable. It is actually so fast that you +can use it through the AnyEvent module, stay portable to other event +loops (if you don't rely on any watcher types not available through it) +and still be faster than with any other event loop currently supported +in Perl. + +Note that this bundles its own version of libev, so it does not depend +on the SlackBuilds.org version of libev being present. diff --git a/perl-EV/perl-EV.SlackBuild b/perl-EV/perl-EV.SlackBuild new file mode 100755 index 0000000..772c757 --- /dev/null +++ b/perl-EV/perl-EV.SlackBuild @@ -0,0 +1,106 @@ +#!/bin/sh + +# Slackware build script for perl-EV + +# Copyright 2017-2019 Andreas Guldstrand +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=perl-EV +VERSION=${VERSION:-4.33} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM="$(printf $PRGNAM | cut -d- -f2-)" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +PERL_CANARY_STABILITY_NOPROMPT=1 \ +PERL_MM_USE_DEFAULT=1 \ +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN1DIR=/usr/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make test +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a Changes COPYING README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/perl-EV/perl-EV.info b/perl-EV/perl-EV.info new file mode 100644 index 0000000..839243e --- /dev/null +++ b/perl-EV/perl-EV.info @@ -0,0 +1,10 @@ +PRGNAM="perl-EV" +VERSION="4.33" +HOMEPAGE="https://metacpan.org/pod/EV" +DOWNLOAD="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/EV-4.33.tar.gz" +MD5SUM="b6d348e9306fd78dab0b80c55e9efb32" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="perl-common-sense perl-Canary-Stability" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/perl-EV/slack-desc b/perl-EV/slack-desc new file mode 100644 index 0000000..ee451e7 --- /dev/null +++ b/perl-EV/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-EV: perl-EV (perl interface to libev) +perl-EV: +perl-EV: This module is very fast and scalable. It is actually so fast that +perl-EV: you can use it through the AnyEvent module, stay portable to other +perl-EV: event loops and still be faster than with any other event loop +perl-EV: currently supported in Perl. +perl-EV: +perl-EV: Homepage: https://metacpan.org/pod/EV +perl-EV: +perl-EV: +perl-EV: diff --git a/perl-EV/slack-required b/perl-EV/slack-required new file mode 100644 index 0000000..7c97f9f --- /dev/null +++ b/perl-EV/slack-required @@ -0,0 +1,2 @@ +perl-Canary-Stability +perl-common-sense diff --git a/perl-Guard/README b/perl-Guard/README new file mode 100644 index 0000000..70f36a3 --- /dev/null +++ b/perl-Guard/README @@ -0,0 +1,7 @@ +This module implements so-called "guards". A guard is something (usually +an object) that "guards" a resource, ensuring that it is cleaned up when +expected. + +Specifically, this module supports two different types of guards: guard +objects, which execute a given code block when destroyed, and scoped +guards, which are tied to the scope exit. diff --git a/perl-Guard/perl-Guard.SlackBuild b/perl-Guard/perl-Guard.SlackBuild new file mode 100755 index 0000000..abec2a5 --- /dev/null +++ b/perl-Guard/perl-Guard.SlackBuild @@ -0,0 +1,97 @@ +#!/bin/sh + +# Slackware build script for perl-Guard + +# Copyright 2019 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=perl-Guard +VERSION=${VERSION:-1.023} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM="$(printf $PRGNAM | cut -d- -f2-)" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +PERL_CANARY_STABILITY_NOPROMPT=1 \ +PERL_MM_USE_DEFAULT=1 \ +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN1DIR=/usr/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make test +make install DESTDIR=$PKG + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a Changes COPYING README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/perl-Guard/perl-Guard.info b/perl-Guard/perl-Guard.info new file mode 100644 index 0000000..0f34102 --- /dev/null +++ b/perl-Guard/perl-Guard.info @@ -0,0 +1,10 @@ +PRGNAM="perl-Guard" +VERSION="1.023" +HOMEPAGE="https://metacpan.org/pod/Guard" +DOWNLOAD="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/Guard-1.023.tar.gz" +MD5SUM="dbbb944601a31f60ee58954ad4cb65b4" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/perl-Guard/slack-desc b/perl-Guard/slack-desc new file mode 100644 index 0000000..57917ea --- /dev/null +++ b/perl-Guard/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-Guard: perl-Guard (safe cleanup blocks) +perl-Guard: +perl-Guard: This module implements so-called "guards". A guard is something +perl-Guard: (usually an object) that "guards" a resource, ensuring that it is +perl-Guard: cleaned up when expected. +perl-Guard: +perl-Guard: +perl-Guard: Homepage: https://metacpan.org/pod/Guard +perl-Guard: +perl-Guard: +perl-Guard: diff --git a/perl-JSON-XS/README b/perl-JSON-XS/README new file mode 100644 index 0000000..c6b0c00 --- /dev/null +++ b/perl-JSON-XS/README @@ -0,0 +1,3 @@ +This module converts Perl data structures to JSON and vice versa. Its +primary goal is to be correct and its secondary goal is to be fast. To +reach the latter goal it was written in C. diff --git a/perl-JSON-XS/perl-JSON-XS.SlackBuild b/perl-JSON-XS/perl-JSON-XS.SlackBuild new file mode 100755 index 0000000..435448d --- /dev/null +++ b/perl-JSON-XS/perl-JSON-XS.SlackBuild @@ -0,0 +1,108 @@ +#!/bin/sh + +# Slackware build script for perl-JSON-XS + +# Copyright 2013 Donald Cooley La Porte, IN USA +# Copyright 2017-2019 Donald Cooley South Haven, IN USA +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=perl-JSON-XS +VERSION=${VERSION:-4.03} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM="$(printf $PRGNAM | cut -d- -f2-)" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +export PERL_MM_USE_DEFAULT=1 +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN1DIR=/usr/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make test +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + COPYING README Changes \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/perl-JSON-XS/perl-JSON-XS.info b/perl-JSON-XS/perl-JSON-XS.info new file mode 100644 index 0000000..2f55a2c --- /dev/null +++ b/perl-JSON-XS/perl-JSON-XS.info @@ -0,0 +1,10 @@ +PRGNAM="perl-JSON-XS" +VERSION="4.03" +HOMEPAGE="https://metacpan.org/release/JSON-XS" +DOWNLOAD="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/JSON-XS-4.03.tar.gz" +MD5SUM="5358225ebc9f5b74516d7585ac236086" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="perl-Canary-Stability perl-Types-Serialiser" +MAINTAINER="Donald Cooley" +EMAIL="chytraeu@sdf.org" diff --git a/perl-JSON-XS/slack-desc b/perl-JSON-XS/slack-desc new file mode 100644 index 0000000..676c690 --- /dev/null +++ b/perl-JSON-XS/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-JSON-XS: perl-JSON-XS (JSON serialising/deserialising) +perl-JSON-XS: +perl-JSON-XS: +perl-JSON-XS: This module converts Perl data structures to JSON and vice +perl-JSON-XS: versa. Its primary goal is to be correct and its secondary goal +perl-JSON-XS: is to be fast. To reach the latter goal it was written in C. +perl-JSON-XS: +perl-JSON-XS: +perl-JSON-XS: +perl-JSON-XS: +perl-JSON-XS: https://metacpan.org/release/JSON-XS diff --git a/perl-JSON-XS/slack-required b/perl-JSON-XS/slack-required new file mode 100644 index 0000000..9b84aca --- /dev/null +++ b/perl-JSON-XS/slack-required @@ -0,0 +1,2 @@ +perl-Canary-Stability +perl-Types-Serialiser diff --git a/perl-Types-Serialiser/README b/perl-Types-Serialiser/README new file mode 100644 index 0000000..2f9d73f --- /dev/null +++ b/perl-Types-Serialiser/README @@ -0,0 +1,5 @@ +This module provides some extra datatypes that are used by common +serialisation formats such as JSON or CBOR. The idea is to have a +repository of simple/small constants and containers that can be shared +by different implementations so they become interoperable between each +other. diff --git a/perl-Types-Serialiser/perl-Types-Serialiser.SlackBuild b/perl-Types-Serialiser/perl-Types-Serialiser.SlackBuild new file mode 100755 index 0000000..735a83a --- /dev/null +++ b/perl-Types-Serialiser/perl-Types-Serialiser.SlackBuild @@ -0,0 +1,105 @@ +#!/bin/sh + +# Slackware build script for perl-Types-Serialiser + +# Copyright 2017 Donald Cooley South Haven, IN USA +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=perl-Types-Serialiser +VERSION=${VERSION:-1.01} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM="$(printf $PRGNAM | cut -d- -f2-)" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make test +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + COPYING README Changes \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/perl-Types-Serialiser/perl-Types-Serialiser.info b/perl-Types-Serialiser/perl-Types-Serialiser.info new file mode 100644 index 0000000..934f1d0 --- /dev/null +++ b/perl-Types-Serialiser/perl-Types-Serialiser.info @@ -0,0 +1,10 @@ +PRGNAM="perl-Types-Serialiser" +VERSION="1.01" +HOMEPAGE="https://metacpan.org/release/Types-Serialiser" +DOWNLOAD="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/Types-Serialiser-1.01.tar.gz" +MD5SUM="4839af5f3fcbacc3945b0e6f3dc9a018" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="perl-common-sense" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/perl-Types-Serialiser/slack-desc b/perl-Types-Serialiser/slack-desc new file mode 100644 index 0000000..011396f --- /dev/null +++ b/perl-Types-Serialiser/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-Types-Serialiser: perl-Types-Serialiser (simple data types for serialisation formats) +perl-Types-Serialiser: +perl-Types-Serialiser: This module provides some extra datatypes that are used by common +perl-Types-Serialiser: serialisation formats such as JSON or CBOR. The idea is to have a +perl-Types-Serialiser: shared repository of simple/small constants and containers that can +perl-Types-Serialiser: be shared by different implementations so they become interoperable +perl-Types-Serialiser: between each other. +perl-Types-Serialiser: +perl-Types-Serialiser: +perl-Types-Serialiser: +perl-Types-Serialiser: https://metacpan.org/release/Types-Serialiser diff --git a/perl-Types-Serialiser/slack-required b/perl-Types-Serialiser/slack-required new file mode 100644 index 0000000..dc78e0a --- /dev/null +++ b/perl-Types-Serialiser/slack-required @@ -0,0 +1 @@ +perl-common-sense diff --git a/perl-common-sense/README b/perl-common-sense/README new file mode 100644 index 0000000..d1e5aa5 --- /dev/null +++ b/perl-common-sense/README @@ -0,0 +1,3 @@ +common::sense module implements some sane defaults for Perl programs, +as defined by two typical, (or not so typical - use your common sense) +specimens of Perl coders. diff --git a/perl-common-sense/perl-common-sense.SlackBuild b/perl-common-sense/perl-common-sense.SlackBuild new file mode 100755 index 0000000..a59e78d --- /dev/null +++ b/perl-common-sense/perl-common-sense.SlackBuild @@ -0,0 +1,106 @@ +#!/bin/sh + +# Slackware build script for perl-common-sense + +# Copyright 2013 Donald Cooley La Porte, IN USA +# Copyright 2017 Donald Cooley South Haven, IN USA +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=perl-common-sense +VERSION=${VERSION:-3.75} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +SRCNAM="$(printf $PRGNAM | cut -d- -f2-)" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + + +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make test +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + Changes LICENSE README \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/perl-common-sense/perl-common-sense.info b/perl-common-sense/perl-common-sense.info new file mode 100644 index 0000000..109c23e --- /dev/null +++ b/perl-common-sense/perl-common-sense.info @@ -0,0 +1,10 @@ +PRGNAM="perl-common-sense" +VERSION="3.75" +HOMEPAGE="https://metacpan.org/pod/common::sense" +DOWNLOAD="https://cpan.metacpan.org/authors/id/M/ML/MLEHMANN/common-sense-3.75.tar.gz" +MD5SUM="0929c6b03455ca988a9b4219aca15292" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/perl-common-sense/slack-desc b/perl-common-sense/slack-desc new file mode 100644 index 0000000..f2a3d45 --- /dev/null +++ b/perl-common-sense/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-common-sense: perl-common-sense (perl common defaults with lower memory usage) +perl-common-sense: +perl-common-sense: +perl-common-sense: common::sense module implements some sane defaults for Perl +perl-common-sense: programs, as defined by two typical, (or not so typical - +perl-common-sense: use your common sense) specimens of Perl coders. +perl-common-sense: +perl-common-sense: +perl-common-sense: +perl-common-sense: +perl-common-sense: https://metacpan.org/pod/common::sense diff --git a/perl-event/README b/perl-event/README new file mode 100644 index 0000000..0978a46 --- /dev/null +++ b/perl-event/README @@ -0,0 +1,5 @@ +The Event module provide a central facility to watch for various +types of events and invoke a callback when these events occur. The +idea is to delay the handling of events so that they may be +dispatched in priority order when it is safe for callbacks to +execute. diff --git a/perl-event/perl-event.SlackBuild b/perl-event/perl-event.SlackBuild new file mode 100755 index 0000000..d9a1af1 --- /dev/null +++ b/perl-event/perl-event.SlackBuild @@ -0,0 +1,96 @@ +#!/bin/sh + +# Slackware build script for perl-event + +# Copyright 2023 Sergei Fedosoff + +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=perl-event +VERSION=${VERSION:-1.28} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/Event-$VERSION.tar.gz +cd Event-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +perl Makefile.PL \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make install DESTDIR=$PKG + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a ANNOUNCE Changes INSTALL README README.EV TODO \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/perl-event/perl-event.info b/perl-event/perl-event.info new file mode 100644 index 0000000..4ac5e46 --- /dev/null +++ b/perl-event/perl-event.info @@ -0,0 +1,10 @@ +PRGNAM="perl-event" +VERSION="1.28" +HOMEPAGE="https://metacpan.org/pod/Event" +DOWNLOAD="https://cpan.metacpan.org/authors/id/E/ET/ETJ/Event-1.28.tar.gz" +MD5SUM="c40b79af3fec249ae1023dfc4213b375" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/perl-event/slack-desc b/perl-event/slack-desc new file mode 100644 index 0000000..eb2139c --- /dev/null +++ b/perl-event/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-event: perl-event (Event loop processing) +perl-event: +perl-event: The Event module provide a central facility to watch for various +perl-event: types of events and invoke a callback when these events occur. The +perl-event: idea is to delay the handling of events so that they may be +perl-event: dispatched in priority order when it is safe for callbacks to +perl-event: execute. +perl-event: +perl-event: +perl-event: +perl-event: diff --git a/perl-local-lib/README b/perl-local-lib/README new file mode 100644 index 0000000..e866a08 --- /dev/null +++ b/perl-local-lib/README @@ -0,0 +1,8 @@ +perl-local-lib (create and use a local lib/ for perl modules) + +This module provides a quick, convenient way of bootstrapping a +user-local Perl module library located within the user's home +directory. It also constructs and prints out for the user the list of +environment variables using the syntax appropriate for the user's +current shell, suitable for directly adding to one's shell +configuration file. diff --git a/perl-local-lib/perl-local-lib.SlackBuild b/perl-local-lib/perl-local-lib.SlackBuild new file mode 100755 index 0000000..fdfcfb3 --- /dev/null +++ b/perl-local-lib/perl-local-lib.SlackBuild @@ -0,0 +1,110 @@ +#!/bin/bash + +# Slackware build script for perl-local-lib + +# Copyright 2016 Andreas Guldstrand. +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=perl-local-lib +VERSION=${VERSION:-2.000024} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +SRCNAM="$(printf $PRGNAM | cut -d- -f2-)" + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$VERSION +tar xvf $CWD/$SRCNAM-$VERSION.tar.gz +cd $SRCNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +perl Makefile.PL \ + PREFIX=/usr \ + INSTALLDIRS=vendor \ + INSTALLVENDORMAN1DIR=/usr/man/man1 \ + INSTALLVENDORMAN3DIR=/usr/man/man3 +make +make test +make install DESTDIR=$PKG + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +find $PKG -name perllocal.pod -o -name ".packlist" -o -name "*.bs" | xargs rm -f || true + +find $PKG -depth -type d -empty -delete || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a Changes LICENSE README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/perl-local-lib/perl-local-lib.info b/perl-local-lib/perl-local-lib.info new file mode 100644 index 0000000..e6e02a6 --- /dev/null +++ b/perl-local-lib/perl-local-lib.info @@ -0,0 +1,10 @@ +PRGNAM="perl-local-lib" +VERSION="2.000024" +HOMEPAGE="https://metacpan.org/pod/local::lib" +DOWNLOAD="https://cpan.metacpan.org/authors/id/H/HA/HAARG/local-lib-2.000024.tar.gz" +MD5SUM="f9ce59c65137fde81c426f525cffc4e5" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Andreas Guldstrand" +EMAIL="andreas.guldstrand@gmail.com" diff --git a/perl-local-lib/slack-desc b/perl-local-lib/slack-desc new file mode 100644 index 0000000..0fcb437 --- /dev/null +++ b/perl-local-lib/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +perl-local-lib: perl-local-lib (create and use a local lib/ for perl modules) +perl-local-lib: +perl-local-lib: This module provides a quick, convenient way of bootstrapping a +perl-local-lib: user-local Perl module library located within the user's home +perl-local-lib: directory. It also constructs and prints out for the user the list of +perl-local-lib: environment variables using the syntax appropriate for the user's +perl-local-lib: current shell, suitable for directly adding to one's shell +perl-local-lib: configuration file. +perl-local-lib: +perl-local-lib: +perl-local-lib: diff --git a/pigz/README b/pigz/README new file mode 100644 index 0000000..9ffe321 --- /dev/null +++ b/pigz/README @@ -0,0 +1,4 @@ +pigz, which stands for Parallel Implementation of GZip, is a fully functional +replacement for gzip that utilizes multiple processors and CPU cores when +compressing data. pigz was written by Mark Adler, and uses zlib and pthread +libraries. diff --git a/pigz/pigz.SlackBuild b/pigz/pigz.SlackBuild new file mode 100644 index 0000000..59646b2 --- /dev/null +++ b/pigz/pigz.SlackBuild @@ -0,0 +1,104 @@ +#!/bin/sh + +# Slackware build script for pigz + +# Copyright 2010 Max Miorim +# Copyright 2010 Diogo Leal +# Copyright 2012 Matteo Bernardini +# Copyright 2013 Patrick Verner +# Copyright 2020 Dominik Drobek +# Copyright 2022 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=pigz +VERSION=${VERSION:-2.7} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +# append our SLKCFLAGS to CFLAGS in the Makefile: +sed -i "/^CFLAGS=/s/$/\ $SLKCFLAGS/" Makefile +sed -i "s/^CFLAGS=-O3 /CFLAGS=/" Makefile +export LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" +sed -i "/^LDFLAGS=/s/$/\ $LDFLAGS/" Makefile +make -j$(nproc) + +install -Dpm 0755 pigz $PKG/usr/bin/pigz +install -Dpm 0644 pigz.1 $PKG/usr/man/man1/pigz.1 +# don't install pigz binary as unpigz, make a symlink instead: +( cd $PKG/usr/bin ; ln -sf pigz unpigz ) + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a README pigz.pdf $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/pigz/pigz.info b/pigz/pigz.info new file mode 100644 index 0000000..ec9222e --- /dev/null +++ b/pigz/pigz.info @@ -0,0 +1,10 @@ +PRGNAM="pigz" +VERSION="2.7" +HOMEPAGE="https://www.zlib.net/pigz/" +DOWNLOAD="https://www.zlib.net/pigz/pigz-2.7.tar.gz" +MD5SUM="2d084221ba829d29f344305845a313f3" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/pigz/slack-desc b/pigz/slack-desc new file mode 100644 index 0000000..a7a2f85 --- /dev/null +++ b/pigz/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +pigz: pigz (Parallel Implementation of GZip) +pigz: +pigz: pigz is a fully functional replacement for gzip that utilizes +pigz: multiple processors and CPU cores when compressing data. pigz +pigz: was written by Mark Adler, and uses zlib and pthread libraries. +pigz: +pigz: Homepage: https://www.zlib.net/pigz/ +pigz: +pigz: +pigz: +pigz: diff --git a/postgresql/README b/postgresql/README new file mode 100644 index 0000000..5e488da --- /dev/null +++ b/postgresql/README @@ -0,0 +1,14 @@ +PostgreSQL is an advanced object-relational database management +system (ORDBMS) based on POSTGRES. With more than 15 years of +development history, it is quickly becoming the de facto +database for enterprise level open source solutions. + +Before you can run postgresql you'll need to create the database; +please see README.SBo. + +You need a "postgres" user and group prior to building postgresql. +Something like this will suffice for most systems: + groupadd -g 209 postgres + useradd -u 209 -g 209 -d /var/lib/pgsql postgres +Feel free to use a different uid and gid if desired, but 209 is +recommended to avoid conflicts with other stuff from SlackBuilds.org. diff --git a/postgresql/README.SBo b/postgresql/README.SBo new file mode 100644 index 0000000..d4b48e1 --- /dev/null +++ b/postgresql/README.SBo @@ -0,0 +1,64 @@ +Before you can run postgresql you'll need to create the +database files in /var/lib/pgsql. The following should do +the trick. + # su postgres -c "initdb -D /var/lib/pgsql/10.2/data --locale=en_US.UTF-8 -A md5 -W" + +Additionally, a logrotation script and init script are included. +For production level log file handling please read +http://www.postgresql.org/docs/10.2/interactive/logfile-maintenance.html + +In order to start postgresql at boot and stop it properly at shutdown, +make sure rc.postgresql is executable and add the following lines to +the following files: + + /etc/rc.d/rc.local + ================== + # Startup postgresql + if [ -x /etc/rc.d/rc.postgresql ]; then + /etc/rc.d/rc.postgresql start + fi + + /etc/rc.d/rc.local_shutdown + =========================== + # Stop postgres + if [ -x /etc/rc.d/rc.postgresql ]; then + /etc/rc.d/rc.postgresql stop + fi + +Additionally, rc.postgresql script has additional modes for stop/restart: + force-stop|force-restart (i.e. pg_ctl 'fast' mode) + unclean-stop|unclean-restart (i.e. pg_ctl 'immediate' mode) +See http://www.postgresql.org/docs/10.2/static/app-pg-ctl.html + +From PostgreSQL 9.3 we support in place database upgrades using pg_upgrade: + http://www.postgresql.org/docs/10.2/static/pgupgrade.html + +A few hints for PostgreSQL 9.6 -> 10.2 upgrade: + - Don't remove old PostgreSQL 9.6.x package + - Install PostgreSQL 10.2.x, note that binaries are in + '/usr/lib64/postgresql/10.2/bin' + - Follow regular pg_upgrade docs + - Remove old package when transition is over, or read comments in + rc.postgresql if you want to run multiple PostgreSQL versions in parallel + - Check the /usr/bin for stale symlinks for old binaries_ + e.g. in v10.0 pg_xlogdump got renamed to pg_waldump. + +This script builds postgresql with some useful extension modules from +the contrib directory, see PG_EXTENSIONS in SlackBuild file. +To build PostgreSQL with all extensions, use the following command: + + # PG_EXTENSIONS=ALL ./postgresql.SlackBuild + +Please note that in order to actually use extension, you must execute +'CREATE EXTENSION [ IF NOT EXISTS ] extension_name' for each extension. + +OpenLDAP Notes + +With OpenLDAP versions 2.4.24 through 2.4.31, inclusive, each backend +process that loads libpq (via WAL receiver, dblink, or postgres_fdw) and +also uses LDAP will crash on exit. + +The LDAP wont be enabled (regardless of '--with-ldap' flag in slackbuild) +for affected OpenLDAP versions, so we've removed that build flag alltogether. + +(OpenLDAP 2.4.31 is the version included in Slackware 14.1) diff --git a/postgresql/doinst.sh b/postgresql/doinst.sh new file mode 100644 index 0000000..7b63ec5 --- /dev/null +++ b/postgresql/doinst.sh @@ -0,0 +1,40 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +preserve_perms etc/rc.d/rc.postgresql.new +config etc/logrotate.d/postgresql.new + +# Create default program symlinks in /usr/bin +( + cd usr/bin + for pg_binary in ../lib@LIBDIRSUFFIX@/@PRGNAM@/@PG_VERSION@/bin/*; do + pg_prog=$(basename $pg_binary) + if [ -L $pg_prog ]; then + ln -sf $pg_binary + elif [ ! -e $pg_prog ]; then + # make sure we don't overwrite actual binaries + ln -s $pg_binary + fi + done +) + diff --git a/postgresql/postgresql.SlackBuild b/postgresql/postgresql.SlackBuild new file mode 100644 index 0000000..3a7817d --- /dev/null +++ b/postgresql/postgresql.SlackBuild @@ -0,0 +1,206 @@ +#!/bin/sh + +# Slackware build script for PostgreSQL +# +# Copyright 2007-2018 Adis Nezirovic +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +# Modified by the SlackBuilds.org Project + +PRGNAM=postgresql +VERSION=${VERSION:-10.21} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +PG_VERSION=${PG_VERSION:-10} +PG_PORT=${PG_PORT:-5432} +PG_UID=${PG_UID:-209} +PG_GID=${PG_GID:-209} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +# Bail out if user or group isn't valid on your system +# For slackbuilds.org, assigned postgres uid/gid are 209/209 +# See http://slackbuilds.org/uid_gid.txt +# Other popular choice is 26/26 +if ! grep ^postgres: /etc/group 2>&1 > /dev/null; then + echo " You must have a postgres group to run this script." + echo " # groupadd -g $PG_GID postgres" + exit 1 +elif ! grep ^postgres: /etc/passwd 2>&1 > /dev/null; then + echo " You must have a postgres user to run this script." + echo " # useradd -u $PG_UID -g $PG_GID -d /var/lib/pgsql postgres" + exit 1 +fi + +# Enable NLS builds using 'ENABLE_NLS=1 ./postgresql.SlackBuild' +if [ ! -z $ENABLE_NLS ];then + NLS=enable +else + NLS=disable +fi + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-g3 -O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $TMP/$PRGNAM-$VERSION $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="$SLKCFLAGS" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +./configure \ + --prefix=/usr/lib${LIBDIRSUFFIX}/$PRGNAM/$PG_VERSION \ + --sysconfdir=/etc/$PRGNAM/$PG_VERSION \ + --includedir=/usr/include \ + --datarootdir=/usr/share \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --datadir=/usr/share/$PRGNAM-$PG_VERSION \ + --with-openssl \ + --with-tcl \ + --with-perl \ + --with-python \ + --with-libxml \ + --with-libxslt \ + --enable-thread-safety \ + --with-system-tzdata=/usr/share/zoneinfo \ + --$NLS-nls \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install-strip DESTDIR=$PKG +make install-docs DESTDIR=$PKG + +# create symlinks to shared library for other programs to link against +( cd $PKG/usr/lib${LIBDIRSUFFIX} + for i in $(ls $PRGNAM/$PG_VERSION/lib/lib*.so*) ; do ln -sf $i ; done +) + +# create symlinks to pkg-config scripts +( mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig + cd $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig + for i in $(ls ../$PRGNAM/$PG_VERSION/lib/pkgconfig/*) ; do ln -sf $i ; done +) + +# Some interesting additional modules: +# http://www.postgresql.org/docs/10.2/static/contrib.html +# +# adminpack - helper extension for pgAdmin +# pgcrypto - extension for some business applications +# ltree, xml2 - useful extensions for developers +# postgres_fdw - foreign-data wrapper for access to external PostgreSQL servers +# file_fdw - foreign-data wrapper for access to data files on filesystem + +PG_EXTENSIONS=${PG_EXTENSIONS:-"adminpack pgcrypto ltree xml2 postgres_fdw file_fdw hstore citext"} + +if [ "x$PG_EXTENSIONS" = "xALL" ];then + cd $TMP/$PRGNAM-$VERSION/contrib + make all + make install-strip DESTDIR=$PKG +else + for ext in $PG_EXTENSIONS; do + cd $TMP/$PRGNAM-$VERSION/contrib/$ext + make + make install-strip DESTDIR=$PKG + done +fi + +cd $TMP/$PRGNAM-$VERSION + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +cp -a COPYRIGHT HISTORY README doc/KNOWN_BUGS doc/MISSING_FEATURES doc/TODO $PKG/usr/doc/$PRGNAM-$VERSION/ +rm -rf $PKG/usr/doc/$PRGNAM-$VERSION/{man.tar.gz,man1,manl,man7,postgres.tar.gz} +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +cat $CWD/README.SBo > $PKG/usr/doc/$PRGNAM-$VERSION/README.SBo + +# base database directory +# assumes you are using /var/lib/pgsql as a homedir for postgres user +mkdir -p $PKG/var/lib/pgsql/$PG_VERSION/data +chown -R postgres:postgres $PKG/var/lib/pgsql +chmod 700 $PKG/var/lib/pgsql +# permissions for DATADIR should be u=rwx (0700) +chmod 700 $PKG/var/lib/pgsql/$PG_VERSION/data + +# Install init script +mkdir -p $PKG/etc/rc.d +sed -e "s%@PG_VERSION@%$PG_VERSION%" \ + -e "s%@PRGNAM@%$PRGNAM%" \ + -e "s%@PG_PORT@%$PG_PORT%" \ + -e "s%@LIBDIRSUFFIX@%$LIBDIRSUFFIX%" \ + $CWD/rc.$PRGNAM.new > $PKG/etc/rc.d/rc.$PRGNAM.new +chmod 0755 $PKG/etc/rc.d/rc.$PRGNAM.new + +# Install logrotate script +mkdir -p $PKG/etc/logrotate.d +sed -e "s%@PG_VERSION@%$PG_VERSION%" \ + -e "s%@PRGNAM@%$PRGNAM%" \ + $CWD/$PRGNAM.logrotate > $PKG/etc/logrotate.d/$PRGNAM.new + +mkdir -p $PKG/var/log/setup +sed -e "s%@UID@%$PG_UID%" \ + -e "s%@GID@%$PG_GID%" \ + -e "s%@PG_VERSION@%$PG_VERSION%" \ + $CWD/setup.$PRGNAM > $PKG/var/log/setup/setup.$PRGNAM +chmod 755 $PKG/var/log/setup/setup.$PRGNAM + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +sed -e "s%@PG_VERSION@%$PG_VERSION%" \ + -e "s%@PRGNAM@%$PRGNAM%" \ + -e "s%@LIBDIRSUFFIX@%$LIBDIRSUFFIX%" \ + $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/postgresql/postgresql.info b/postgresql/postgresql.info new file mode 100644 index 0000000..0ac36ad --- /dev/null +++ b/postgresql/postgresql.info @@ -0,0 +1,10 @@ +PRGNAM="postgresql" +VERSION="10.21" +HOMEPAGE="https://www.postgresql.org" +DOWNLOAD="https://ftp.postgresql.org/pub/source/v10.21/postgresql-10.21.tar.gz" +MD5SUM="30b9587bb863cf798304a664d1ad60d7" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Adis Nezirovic" +EMAIL="adis_at_linux.org.ba" diff --git a/postgresql/postgresql.logrotate b/postgresql/postgresql.logrotate new file mode 100644 index 0000000..489effe --- /dev/null +++ b/postgresql/postgresql.logrotate @@ -0,0 +1,9 @@ +/var/log/@PRGNAM@-@PG_VERSION@ { + daily + rotate 7 + copytruncate + delaycompress + compress + notifempty + missingok +} diff --git a/postgresql/rc.postgresql.new b/postgresql/rc.postgresql.new new file mode 100644 index 0000000..4f793db --- /dev/null +++ b/postgresql/rc.postgresql.new @@ -0,0 +1,171 @@ +#!/bin/bash + +# PostgreSQL startup script for Slackware Linux +# +# $Revision$ +# $Date$ +# +# Copyright 2007-2018 Adis Nezirovic +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +# Do not source this script (since it contains exit() calls) +# +# Since version 9.3 this startup script can run multiple PostgreSQL +# versions on different ports and with different data dirs. +# +# e.g. PG_VERSION=10.10 PG_PORT=6432 /etc/rc.d/rc.@PRGNAM@ start + +PG_VERSION=${PG_VERSION:-@PG_VERSION@} +PG_PORT=${PG_PORT:-@PG_PORT@} +LIBDIRSUFFIX="@LIBDIRSUFFIX@" +LOGFILE=/var/log/@PRGNAM@-$PG_VERSION +DATADIR=/var/lib/pgsql/$PG_VERSION/data +POSTGRES=/usr/lib${LIBDIRSUFFIX}/@PRGNAM@/$PG_VERSION/bin/postgres +PG_CTL=/usr/lib${LIBDIRSUFFIX}/@PRGNAM@/$PG_VERSION/bin/pg_ctl +PIDFILE=$DATADIR/postmaster.pid + +# oom-killer score +# +# http://www.postgresql.org/docs/10.2/static/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT +PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj +PG_MASTER_OOM_SCORE_ADJ=-1000 +PG_CHILD_OOM_SCORE_ADJ=0 +PG_ENV="PG_OOM_ADJUST_FILE=$PG_OOM_ADJUST_FILE PG_OOM_ADJUST_VALUE=$PG_CHILD_OOM_SCORE_ADJ" + +# Return values (according to LSB): +# 0 - success +# 1 - generic or unspecified error +# 2 - invalid or excess argument(s) +# 3 - unimplemented feature (e.g. "reload") +# 4 - insufficient privilege +# 5 - program is not installed +# 6 - program is not configured +# 7 - program is not running + +pg_ctl() +{ + CMD="$PG_CTL -o '-p $PG_PORT' $@" + su - postgres -c "$PG_ENV $CMD" +} + +if [ ! -f $POSTGRES ]; then + echo "Could not find 'postgres' binary. Maybe PostgreSQL is not installed properly?" + exit 5 +fi + +case "$1" in + + "start") + echo "Starting PostgreSQL" + touch $LOGFILE + chown postgres:wheel $LOGFILE + chmod 0640 $LOGFILE + + if [ ! -e $DATADIR/PG_VERSION ]; then + echo "You should initialize the PostgreSQL database at location $DATADIR" + echo "e.g. su postgres -c \"initdb -D $DATADIR --locale=en_US.UTF-8 -A md5 -W\"" + exit 6 + fi + + if [ $(pgrep -f $POSTGRES) ]; then + + echo "PostgreSQL daemon already running" + if [ ! -f $PIDFILE ]; then + echo "Warning: Missing pid file $PIDFILE" + fi + exit 1 + + else + test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE" + pg_ctl start -w -l $LOGFILE -D $DATADIR + exit 0 + fi + ;; + + "stop") + echo "Shutting down PostgreSQL..." + pg_ctl stop -l $LOGFILE -D $DATADIR -m smart + ;; + + "force-stop") + # Take care! This will kill _all_ client connections + # and rollback current transactions. + echo "Shutting down PostgreSQL (fast)..." + pg_ctl stop -l $LOGFILE -D $DATADIR -m fast + ;; + + "unclean-stop") + # Take care! This will abort server process itself + # resulting with database recovery on next start. + echo "Shutting down PostgreSQL (immediate)..." + pg_ctl stop -l $LOGFILE -D $DATADIR -m immediate + ;; + + "restart") + echo "Restarting PostgreSQL..." + test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE" + pg_ctl restart -l $LOGFILE -D $DATADIR -m smart + ;; + + "force-restart") + # Take care! This will kill _all_ client connections + # and rollback current transactions. + echo "Restarting PostgreSQL (fast)..." + pg_ctl restart -l $LOGFILE -D $DATADIR -m fast + ;; + + "unclean-restart") + # Take care: This will abort server process itself + # resulting with database recovery on start. + echo "Restarting PostgreSQL (immediate)..." + pg_ctl restart -l $LOGFILE -D $DATADIR -m immediate + ;; + + "reload") + echo "Reloading configuration for PostgreSQL..." + pg_ctl reload -l $LOGFILE -D $DATADIR -m smart + ;; + + "status") + if [ $(pgrep -f $POSTGRES) ]; then + echo "PostgreSQL is running" + + if [ ! -e $PIDFILE ]; then + echo "Warning: Missing pid file $PIDFILE" + fi + + exit 0 + else + echo "PostgreSQL is stopped" + + if [ -e $PIDFILE ]; then + echo "Detected stale pid file $PIDFILE" + fi + + exit 0 + fi + ;; + + *) + # unclean-stop and unclean-restart are not documented on purpose. + echo "Usage: $0 {start|stop|force-stop|status|restart|force-restart|reload}" + exit 1 + ;; +esac diff --git a/postgresql/setup.postgresql b/postgresql/setup.postgresql new file mode 100644 index 0000000..2f0ec5f --- /dev/null +++ b/postgresql/setup.postgresql @@ -0,0 +1,35 @@ +#!/bin/bash +#BLURB="PostgreSQL @PG_VERSION@" + +PG_HOME=/var/lib/pgsql +PG_USER=postgres +PG_USER_ID=@UID@ +PG_GROUP=postgres +PG_GROUP_ID=@GID@ +PG_VERSION=@PG_VERSION@ + +echo "Adding PostgreSQL user and group..." +groupadd -g $PG_GROUP_ID $PG_GROUP +useradd -g $PG_GROUP -u $PG_USER_ID -d $PG_HOME -c PostgreSQL $PG_USER +mkdir -p $PG_HOME/$PG_VERSION/data + +## default permissions +echo "Setting up permissions..." +chown -R $PG_USER:$PG_GROUP $PG_HOME +chmod 700 $PG_HOME +chmod 700 $PG_HOME/$PG_VERSION +chmod 700 $PG_HOME/$PG_VERSION/data + +## database cluster +if [ ! -f $PG_HOME/$PG_VERSION/data/PG_VERSION ]; then + echo "Creating database cluster in $PG_HOME/$PG_VERSION/data..." + su $PG_USER -c "initdb -D $PG_HOME/$PG_VERSION/data --locale=en_US.UTF-8 -A md5 -W" +else + echo "*** WARNING ***" >&2 + echo " There is already a database cluster in $PG_HOME/$PG_VERSION/data." >&2 + echo " If you are upgrading from an older version of PostgreSQL" >&2 + echo " you will have to 'dump' and 'restore' your database." >&2 + echo " See PostgreSQL manual for more details." >&2 +fi + +echo "PostgreSQL post-installation setup completed" diff --git a/postgresql/slack-desc b/postgresql/slack-desc new file mode 100644 index 0000000..7e7ced4 --- /dev/null +++ b/postgresql/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +postgresql: postgresql (object-relational database management system) +postgresql: +postgresql: PostgreSQL is an advanced object-relational database management +postgresql: system (ORDBMS) based on POSTGRES. With more than 15 years of +postgresql: development history, it is quickly becoming the de facto +postgresql: database for enterprise level open source solutions. +postgresql: +postgresql: Homepage: https://www.postgresql.org +postgresql: +postgresql: +postgresql: diff --git a/profanity/README b/profanity/README new file mode 100644 index 0000000..706f979 --- /dev/null +++ b/profanity/README @@ -0,0 +1,5 @@ +Profanity is a console based XMPP client written in C using ncurses +and libstrophe, inspired by Irssi. + +libotr (https://otr.cypherpunks.ca/) is an optional dependency for +verifiable end-to-end encryption. diff --git a/profanity/profanity.SlackBuild b/profanity/profanity.SlackBuild new file mode 100644 index 0000000..df76ce5 --- /dev/null +++ b/profanity/profanity.SlackBuild @@ -0,0 +1,108 @@ +#!/bin/sh + +# Slackware build script for profanity + +# Copyright 2015-2018 Pedro R.M. Júnior, Campinas, SP, Brazil +# Copyright 2022 Sergei Fedosoff +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=profanity +VERSION=${VERSION:-0.14.0} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-g -O2 -fPIC -flto -rdynamic" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2 -Wl,-s" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --enable-plugins \ + --enable-c-plugins \ + --enable-python-plugins \ + --enable-omemo=no \ + --disable-omemo \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE.txt COPYING $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/profanity/profanity.info b/profanity/profanity.info new file mode 100644 index 0000000..d8ab47c --- /dev/null +++ b/profanity/profanity.info @@ -0,0 +1,10 @@ +PRGNAM="profanity" +VERSION="0.14.0" +HOMEPAGE="https://profanity-im.github.io/" +DOWNLOAD="https://profanity-im.github.io/tarballs/profanity-0.14.0.tar.gz" +MD5SUM="f6b9ee24aeda7e50cf043e25916793c8" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="libstrophe" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/profanity/slack-desc b/profanity/slack-desc new file mode 100644 index 0000000..cb1a5df --- /dev/null +++ b/profanity/slack-desc @@ -0,0 +1,20 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +profanity: profanity (A console based XMPP client) +profanity: +profanity: Profanity is a console based XMPP client written in C using ncurses +profanity: and libstrophe, inspired by Irssi. +profanity: +profanity: Homepage: http://www.profanity.im/ +profanity: +profanity: +profanity: +profanity: +profanity: + diff --git a/profanity/slack-required b/profanity/slack-required new file mode 100644 index 0000000..efb64bc --- /dev/null +++ b/profanity/slack-required @@ -0,0 +1,4 @@ +libstrophe +glib2 +sqlite +python3 diff --git a/psi-plus/README b/psi-plus/README new file mode 100644 index 0000000..291061c --- /dev/null +++ b/psi-plus/README @@ -0,0 +1,8 @@ +Psi is a free instant messaging application designed for the XMPP network +(including Google Talk). Fast and lightweight, Psi is fully open-source +and compatible with Windows, Linux, and Mac OS X. + +With Psi's full Unicode support and localizations, easy file transfers, +customizable iconsets, and many other great features, you'll learn why +users around the world are making the switch to free, open instant +messaging. diff --git a/psi-plus/doinst.sh b/psi-plus/doinst.sh new file mode 100644 index 0000000..c64f890 --- /dev/null +++ b/psi-plus/doinst.sh @@ -0,0 +1,8 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database usr/share/applications >/dev/null 2>&1 +fi + +if [ -x /usr/bin/gtk-update-icon-cache ] \ + && [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 +fi diff --git a/psi-plus/psi-plus.SlackBuild b/psi-plus/psi-plus.SlackBuild new file mode 100755 index 0000000..6f125a5 --- /dev/null +++ b/psi-plus/psi-plus.SlackBuild @@ -0,0 +1,108 @@ +#!/bin/sh + +# Slackware build script for psi + +# Copyright 2010-2017 Eugene Wissner, Dachau, Germany +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=psi-plus +VERSION=${VERSION:-1.5.1652} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-march=i486 -mtune=i686" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-march=i686 -mtune=i686" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX=64 +else + SLKCFLAGS="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-snapshots-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + +export CFLAGS="-g $SLKFLAGS -rdynamic" +export CXXFLAGS="-g $SLKFLAGS -rdynamic" +export LDFLAGS="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" +mkdir build +cd build +cmake \ + -DCMAKE_C_FLAGS:STRING="-g $SLKCFLAGS -rdynamic" \ + -DCMAKE_CXX_FLAGS:STRING="-g $SLKCFLAGS -rdynamic" \ + -DLINK_FLAGS:STRING="-rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ + -DUSE_CCACHE=ON \ + -DBUILD_IRIS_TOOLS=OFF \ + -DBUILD_PSIMEDIA=OFF \ + -DBUNDLED_IRIS=ON \ + -DBUNDLED_USRSCTP=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DENABLE_PLUGINS=ON \ + -DJINGLE_SCTP=OFF \ + -DPLUGINS_NO_DEBUG=ON \ + -DPSI_LIBDIR=/usr/lib${LIBDIRSUFFIX}/psi \ +.. + +make -j$(nproc) +make install DESTDIR=$PKG +cd .. + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a COPYING INSTALL.md README $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/psi-plus/psi-plus.info b/psi-plus/psi-plus.info new file mode 100644 index 0000000..9174d1f --- /dev/null +++ b/psi-plus/psi-plus.info @@ -0,0 +1,10 @@ +PRGNAM="psi-plus" +VERSION="1.5.1652" +HOMEPAGE="http://psi-im.org/" +DOWNLOAD="https://github.com/psi-plus/psi-plus-snapshots/archive/refs/tags/1.5.1652.tar.gz" +MD5SUM="6e23f451e4086f331b2bf84a413a7d65" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/psi-plus/slack-desc b/psi-plus/slack-desc new file mode 100644 index 0000000..c8c1bad --- /dev/null +++ b/psi-plus/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +psi-plus: psi-plus-plus (Qt Jabber client) +psi-plus: +psi-plus: psi-plus is a free instant messaging application designed for the +psi-plus: XMPP network (including Google Talk). Fast and lightweight, psi-plus +psi-plus: is fully open-source and compatible with Windows, Linux, and Mac OS. +psi-plus: +psi-plus: With psi-plus's full Unicode support and localizations, easy file +psi-plus: transfers, customizable iconsets, and many other great features, +psi-plus: you'll learn why users around the world are making the switch to +psi-plus: free, open instant messaging. +psi-plus: diff --git a/psi-plus/slack-required b/psi-plus/slack-required new file mode 100644 index 0000000..072f58a --- /dev/null +++ b/psi-plus/slack-required @@ -0,0 +1,3 @@ +libsignal-protocol-c +libotr + diff --git a/pv/README b/pv/README new file mode 100644 index 0000000..226564c --- /dev/null +++ b/pv/README @@ -0,0 +1,5 @@ +Pipe Viewer is a terminal-based tool for monitoring the progress of +data through a pipeline. It can be inserted into any normal pipeline +between two processes to give a visual indication of how quickly data +is passing through, how long it has taken, how near to completion it is, +and an estimate of how long it will be until completion. diff --git a/pv/pv.SlackBuild b/pv/pv.SlackBuild new file mode 100644 index 0000000..25ed63f --- /dev/null +++ b/pv/pv.SlackBuild @@ -0,0 +1,97 @@ +#!/bin/sh +# +# Slackware build script for pv +# +# Copyright 2010 GPLeo +# Copyright 2022 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=pv +VERSION=${VERSION:-1.6.20} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +DOCS="COPYING INSTALL NEWS PACKAGE TODO VERSION" + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.bz2 +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +CFLAGS="-g $SLKCFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +CXXFLAGS="$CFLAGS" \ +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man + +make -j$(nproc) +make -j$(nproc) install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +( cd $TMP/$PRGNAM-$VERSION/doc + cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION ) +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/pv/pv.info b/pv/pv.info new file mode 100644 index 0000000..d4e1e97 --- /dev/null +++ b/pv/pv.info @@ -0,0 +1,10 @@ +PRGNAM="pv" +VERSION="1.6.20" +HOMEPAGE="https://www.ivarch.com/programs/pv.shtml" +DOWNLOAD="https://www.ivarch.com/programs/sources/pv-1.6.20.tar.bz2" +MD5SUM="85b25c827add82ebdd5a58a5ffde1d7d" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/pv/slack-desc b/pv/slack-desc new file mode 100644 index 0000000..46d42e6 --- /dev/null +++ b/pv/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +pv: pv (Pipe Viewer) +pv: +pv: Pipe Viewer is a terminal-based tool for monitoring the progress of +pv: data through a pipeline. It can be inserted into any normal pipeline +pv: between two processes to give a visual indication of how quickly data +pv: is passing through, how long it has taken, how near to completion +pv: it is, and an estimate of how long it will be until completion. +pv: +pv: Homepage: http://www.ivarch.com/programs/pv.shtml +pv: +pv: diff --git a/redis/README b/redis/README new file mode 100644 index 0000000..d5aae82 --- /dev/null +++ b/redis/README @@ -0,0 +1,7 @@ +Redis is an advanced key-value store. It is similar to memcached but +the dataset is not volatile, and values can be strings, exactly like in +memcached, but also lists, sets, and ordered sets. These data types can +be manipulated with atomic operations to push/pop elements, add/remove +elements, perform server side union, intersection, difference between +sets, and so forth. Redis supports different kinds of sorting +abilities. diff --git a/redis/doinst.sh b/redis/doinst.sh new file mode 100644 index 0000000..9e57d26 --- /dev/null +++ b/redis/doinst.sh @@ -0,0 +1,28 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +config etc/redis/redis.conf.new +config etc/redis/sentinel.conf.new +config etc/logrotate.d/redis.new +preserve_perms etc/rc.d/rc.redis.new diff --git a/redis/rc.redis.new b/redis/rc.redis.new new file mode 100644 index 0000000..0d4b1b0 --- /dev/null +++ b/redis/rc.redis.new @@ -0,0 +1,61 @@ +#!/bin/sh +# +# Redis startup script for Slackware Linux + +PORT=6379 +SERV=/usr/bin/redis-server +CLI=/usr/bin/redis-cli +PIDFILE=/var/run/redis_${PORT}.pid +CONF=/etc/redis/redis.conf + +redis_start() { + if [ ! -r $CONF ]; then + echo "$CONF does not appear to exist. Abort." + exit 1 + fi + + if [ -s $PIDFILE ]; then + echo "Redis appears to be already running?" + exit 1 + fi + + echo "Starting Redis server..." + $SERV $CONF +} + +redis_stop() { + if [ ! -s $PIDFILE ]; then + echo "$PIDFILE does not exist or is empty." + exit 1 + fi + + PID=$(cat $PIDFILE) + echo -n "Stopping Redis server..." + $CLI -p $PORT shutdown + while [ -d /proc/$PID ]; do + sleep 1 + echo -n "." + done + echo " done" +} + +redis_restart() { + redis_stop + sleep 3 + redis_start +} + +case "$1" in + start) + redis_start + ;; + stop) + redis_stop + ;; + restart) + redis_restart + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac diff --git a/redis/redis.SlackBuild b/redis/redis.SlackBuild new file mode 100644 index 0000000..7138a0d --- /dev/null +++ b/redis/redis.SlackBuild @@ -0,0 +1,123 @@ +#!/bin/sh + +# Slackware build script for redis + +# Copyright 2010 Kuroi Kenshi +# Copyright 2012-2018 Audrius Kažukauskas +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=redis +VERSION=${VERSION:-6.0.16} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +# Use our CFLAGS. +sed -i "s|-O3||" deps/Makefile deps/hiredis/Makefile + +# No ./configure necessary. +# +# http://lists.slackbuilds.org/pipermail/slackbuilds-users/2013-January/010042.html +( unset ARCH ; CFLAGS="-g $SLKFLAGS -rdynamic" LDFLAGS="-flto -Wl,--no-as-needed -Wl,-O2 -rdynamic" make -j$(nproc) ) +make install PREFIX=$PKG/usr + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# Use sample config and set some sane defaults. +install -D -m 0644 redis.conf $PKG/etc/redis/redis.conf.new +sed -i \ + -e 's|^daemonize no|daemonize yes|' \ + -e 's|^dir \.|dir /var/lib/redis|' \ + -e 's|^logfile ""|logfile /var/log/redis/redis.log|' \ + -e 's|^pidfile /var/run/redis|pidfile /run/redis|' \ + $PKG/etc/redis/redis.conf.new +install -D -m 0644 sentinel.conf $PKG/etc/redis/sentinel.conf.new + +# Create data directory. +mkdir -p $PKG/var/lib/redis +chmod 0700 $PKG/var/lib/redis + +# Create log directory. +mkdir -p $PKG/var/log/redis + +# Install init script. +mkdir -p $PKG/etc/rc.d +cat $CWD/rc.redis.new > $PKG/etc/rc.d/rc.redis.new + +# Install logrotate script. +mkdir -p $PKG/etc/logrotate.d +cat $CWD/redis.logrotate > $PKG/etc/logrotate.d/redis.new + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + 00-RELEASENOTES BUGS CONTRIBUTING COPYING MANIFESTO README.md \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/redis/redis.info b/redis/redis.info new file mode 100644 index 0000000..00e6dbd --- /dev/null +++ b/redis/redis.info @@ -0,0 +1,10 @@ +PRGNAM="redis" +VERSION="6.0.16" +HOMEPAGE="https://redis.io/" +DOWNLOAD="http://download.redis.io/releases/redis-6.0.16.tar.gz" +MD5SUM="a376066e0cc629d016050e925ee63669" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/redis/redis.logrotate b/redis/redis.logrotate new file mode 100644 index 0000000..12e6ea8 --- /dev/null +++ b/redis/redis.logrotate @@ -0,0 +1,9 @@ +/var/log/redis/redis.log { + daily + rotate 7 + copytruncate + delaycompress + compress + notifempty + missingok +} diff --git a/redis/slack-desc b/redis/slack-desc new file mode 100644 index 0000000..28359f0 --- /dev/null +++ b/redis/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +redis: redis (Key-Value Store) +redis: +redis: Redis is an advanced key-value store. It is similar to memcached but +redis: the dataset is not volatile, and values can be strings, exactly like +redis: in memcached, but also lists, sets, and ordered sets. These data +redis: types can be manipulated with atomic operations to push/pop elements, +redis: add/remove elements, perform server side union, intersection, +redis: Records are organized in hash table, B+ tree, or a fixed-length array. +redis: Redis supports different kinds of sorting abilities. +redis: +redis: Homepage: https://redis.io/ diff --git a/runc/README b/runc/README new file mode 100644 index 0000000..b2cca2a --- /dev/null +++ b/runc/README @@ -0,0 +1,9 @@ +runC is a CLI tool for spawning and running containers according to the +OCI specification. Containers are started as a child process of runC +and can be embedded into various other systems without having to run a +daemon. runC is built on libcontainer, the same container technology +powering millions of Docker Engine installations. runC does not force +you to have a particular workflow or deployment setup, it only requires +a root filesystem and configuration. + +Docker images can be run with runC. diff --git a/runc/runc.SlackBuild b/runc/runc.SlackBuild new file mode 100755 index 0000000..b92c7e8 --- /dev/null +++ b/runc/runc.SlackBuild @@ -0,0 +1,77 @@ +#!/bin/sh + +# Slackware build script for runc + +# Copyright 2016 Asaf Ohayon +# Copyright 2017-2019 Audrius Kažukauskas +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=runc +VERSION=${VERSION:-1.1.10} +PRGVER=${PRGVER:-1.1.10} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +tar xf $CWD/$PRGNAM-$PRGVER.tar.gz +cd $PRGNAM-$PRGVER +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +export EXTRA_LDFLAGS="-s -w" +export EXTRA_FLAGS="-a -gcflags=all=-l" + +make +make install BINDIR=$PKG/usr/bin +make install-bash PREFIX=$PKG/usr + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE MAINTAINERS NOTICE README.md $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/slack-required > $PKG/install/slack-required + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/runc/runc.info b/runc/runc.info new file mode 100644 index 0000000..f8dc1d7 --- /dev/null +++ b/runc/runc.info @@ -0,0 +1,11 @@ +PRGNAM="runc" +VERSION="1.1.10" +HOMEPAGE="https://github.com/opencontainers/runc" +DOWNLOAD="UNSUPPORTED" +MD5SUM="" +DOWNLOAD_x86_64="https://github.com/opencontainers/runc/archive/v1.1.10/runc-1.1.10.tar.gz" +MD5SUM_x86_64="1a3c4081ad29cfaf8544edc70be81e0c" +BUILDREQUIRES="google-go-lang libseccomp" +REQUIRES="libseccomp" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/runc/slack-desc b/runc/slack-desc new file mode 100644 index 0000000..15fd5ef --- /dev/null +++ b/runc/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +runc: runc (a CLI tool for spawning and running containers) +runc: +runc: runC is a CLI tool for spawning and running containers according to +runc: the OCI specification. Containers are started as a child process of +runc: runC and can be embedded into various other systems without having to +runc: run a daemon. runC is built on libcontainer, the same container +runc: technology powering millions of Docker Engine installations. runC +runc: does not force you to have a particular workflow or deployment setup +runc: it only requires a root filesystem and configuration. +runc: +runc: Homepage: https://github.com/opencontainers/runc diff --git a/runc/slack-required b/runc/slack-required new file mode 100644 index 0000000..86075e0 --- /dev/null +++ b/runc/slack-required @@ -0,0 +1 @@ +libseccomp diff --git a/runit/README b/runit/README new file mode 100644 index 0000000..8182586 --- /dev/null +++ b/runit/README @@ -0,0 +1,7 @@ +runit (a UNIX init scheme with service supervision) + +a cross-platform Unix init scheme with service supervision, a +replacement for sysvinit, and other init schemes. + +runit can replace init or its service supervision can be used with +traditional init. runit is compatible with djb's daemontools diff --git a/runit/config/etc/runit/1 b/runit/config/etc/runit/1 new file mode 100644 index 0000000..41b2348 --- /dev/null +++ b/runit/config/etc/runit/1 @@ -0,0 +1,10 @@ +#!/bin/sh +# system one time tasks + +PATH=/command:/sbin:/bin:/usr/sbin:/usr/bin + +/etc/rc.d/rc.S +/etc/rc.d/rc.M + +touch /etc/runit/stopit +chmod 0 /etc/runit/stopit diff --git a/runit/config/etc/runit/2 b/runit/config/etc/runit/2 new file mode 100644 index 0000000..794de3a --- /dev/null +++ b/runit/config/etc/runit/2 @@ -0,0 +1,8 @@ +#!/bin/sh + +PATH=/command:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin + +runsvchdir default >/dev/null + +exec env - PATH=$PATH \ +runsvdir -P /service 'log: ...........................................................................................................................................................................................................................................................................................................................................................................................................' diff --git a/runit/config/etc/runit/3 b/runit/config/etc/runit/3 new file mode 100644 index 0000000..ff3a4d1 --- /dev/null +++ b/runit/config/etc/runit/3 @@ -0,0 +1,15 @@ +#!/bin/sh +exec 2>&1 + +PATH=/command:/sbin:/bin:/usr/sbin:/usr/bin + +echo "Running shutdown script $0:" +echo 'Waiting for services to stop...' +sv force-stop /service/* +sv exit /service/* + +if [ -x /etc/runit/reboot ] ;then + /etc/rc.d/rc.6 +else + /etc/rc.d/rc.0 +fi diff --git a/runit/config/etc/sv/agetty-tty1/finish b/runit/config/etc/sv/agetty-tty1/finish new file mode 100644 index 0000000..438ef44 --- /dev/null +++ b/runit/config/etc/sv/agetty-tty1/finish @@ -0,0 +1,2 @@ +#!/bin/sh +exec utmpset -w tty1 diff --git a/runit/config/etc/sv/agetty-tty1/run b/runit/config/etc/sv/agetty-tty1/run new file mode 100644 index 0000000..5cbf3c3 --- /dev/null +++ b/runit/config/etc/sv/agetty-tty1/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec setsid /sbin/agetty 38400 tty1 linux diff --git a/runit/config/etc/sv/agetty-tty2/finish b/runit/config/etc/sv/agetty-tty2/finish new file mode 100644 index 0000000..6b09eb0 --- /dev/null +++ b/runit/config/etc/sv/agetty-tty2/finish @@ -0,0 +1,2 @@ +#!/bin/sh +exec utmpset -w tty2 diff --git a/runit/config/etc/sv/agetty-tty2/run b/runit/config/etc/sv/agetty-tty2/run new file mode 100644 index 0000000..05c4d5f --- /dev/null +++ b/runit/config/etc/sv/agetty-tty2/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec setsid /sbin/agetty 38400 tty2 linux diff --git a/runit/config/etc/sv/agetty-tty3/finish b/runit/config/etc/sv/agetty-tty3/finish new file mode 100644 index 0000000..6513fa5 --- /dev/null +++ b/runit/config/etc/sv/agetty-tty3/finish @@ -0,0 +1,2 @@ +#!/bin/sh +exec utmpset -w tty3 diff --git a/runit/config/etc/sv/agetty-tty3/run b/runit/config/etc/sv/agetty-tty3/run new file mode 100644 index 0000000..ef589ac --- /dev/null +++ b/runit/config/etc/sv/agetty-tty3/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec setsid /sbin/agetty 38400 tty3 linux diff --git a/runit/config/etc/sv/agetty-tty4/finish b/runit/config/etc/sv/agetty-tty4/finish new file mode 100644 index 0000000..de02392 --- /dev/null +++ b/runit/config/etc/sv/agetty-tty4/finish @@ -0,0 +1,2 @@ +#!/bin/sh +exec utmpset -w tty4 diff --git a/runit/config/etc/sv/agetty-tty4/run b/runit/config/etc/sv/agetty-tty4/run new file mode 100644 index 0000000..0c7abe7 --- /dev/null +++ b/runit/config/etc/sv/agetty-tty4/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec setsid /sbin/agetty 38400 tty4 linux diff --git a/runit/config/etc/sv/agetty-tty5/finish b/runit/config/etc/sv/agetty-tty5/finish new file mode 100644 index 0000000..72d719b --- /dev/null +++ b/runit/config/etc/sv/agetty-tty5/finish @@ -0,0 +1,2 @@ +#!/bin/sh +exec utmpset -w tty5 diff --git a/runit/config/etc/sv/agetty-tty5/run b/runit/config/etc/sv/agetty-tty5/run new file mode 100644 index 0000000..52044cf --- /dev/null +++ b/runit/config/etc/sv/agetty-tty5/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec setsid /sbin/agetty 38400 tty5 linux diff --git a/runit/config/etc/sv/agetty-tty6/finish b/runit/config/etc/sv/agetty-tty6/finish new file mode 100644 index 0000000..43f24b6 --- /dev/null +++ b/runit/config/etc/sv/agetty-tty6/finish @@ -0,0 +1,2 @@ +#!/bin/sh +exec utmpset -w tty6 diff --git a/runit/config/etc/sv/agetty-tty6/run b/runit/config/etc/sv/agetty-tty6/run new file mode 100644 index 0000000..ddf59d4 --- /dev/null +++ b/runit/config/etc/sv/agetty-tty6/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec setsid /sbin/agetty 38400 tty6 linux diff --git a/runit/config/usr/sbin/shutdown b/runit/config/usr/sbin/shutdown new file mode 100644 index 0000000..dc57f74 --- /dev/null +++ b/runit/config/usr/sbin/shutdown @@ -0,0 +1,93 @@ +#!/bin/sh + +sysv() { + /sbin/shutdown "$@" +} + +single() { + runsvchdir single +} + +abort() { + printf '%s\n' "$1" >&2 + exit 1 +} + +usage() { + abort "Usage: ${0##*/} [-fF] [-kchPr] time [warning message]" +} + +runit_init() { + + while getopts akrhPHfFnct: opt; do + case "$opt" in + a|n|H) abort "'-$opt' is not implemented";; + t) ;; + f) touch /fastboot;; + F) touch /forcefsck;; + k) action=true;; + c) action=cancel;; + h|P) action="/sbin/runit-init 0";; + r) action="/sbin/runit-init 6";; + [?]) usage;; + esac + done + shift $((OPTIND - 1)) + + [ $# -eq 0 ] && usage + + time=$1; shift + message="${*:-system is going down}" + + if [ "$action" = "cancel" ]; then + kill "$(cat /run/shutdown.pid)" + if [ -e /etc/nologin ] && ! [ -s /etc/nologin ]; then + rm /etc/nologin + fi + echo "${*:-shutdown cancelled}" | wall + exit + fi + + touch /run/shutdown.pid 2>/dev/null || abort "Not enough permissions to execute ${0#*/}" + echo $$ >/run/shutdown.pid + + case "$time" in + now) time=0;; + +*) time=${time#+};; + *:*) abort "absolute time is not implemented";; + *) abort "invalid time";; + esac + + for break in 5 0; do + [ "$time" -gt "$break" ] || continue + [ "$break" = 0 ] && touch /etc/nologin + + printf '%s in %s minutes\n' "$message" "$time" | wall + printf 'shutdown: sleeping for %s minutes... ' "$(( time - break ))" + sleep $(( (time - break) * 60 )) + time="$break" + printf '\n' + + [ "$break" = 0 ] && rm /etc/nologin + done + + printf '%s NOW\n' "$message" | wall + + $action + +} + +initsystem=$( ps -p 1 -o comm= ) + +action=single + +case "$initsystem" in +'init') + sysv "$@" + ;; +'runit') + runit_init "$@" + ;; +*) + exit +esac diff --git a/runit/patches/0003-utmpset.c-mixes-int32_t-and-time_t.diff b/runit/patches/0003-utmpset.c-mixes-int32_t-and-time_t.diff new file mode 100644 index 0000000..6b21bbb --- /dev/null +++ b/runit/patches/0003-utmpset.c-mixes-int32_t-and-time_t.diff @@ -0,0 +1,57 @@ +From 20a0afcd367666efc17c59cf121a0d991ff1bd09 Mon Sep 17 00:00:00 2001 +From: Gerrit Pape +Date: Thu, 31 Jul 2014 12:25:49 +0000 +Subject: [PATCH] utmpset.c: mixes "int32_t *" and "time_t *" + +Don't pass int32_t to time(), thx Lorenzo Beretta, +https://bugs.debian.org/754849 +--- + runit-2.1.2/src/utmpset.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/runit-2.1.2/src/utmpset.c b/runit-2.1.2/src/utmpset.c +index eea41a5..2e8a525 100644 +--- a/runit-2.1.2/src/utmpset.c ++++ b/runit-2.1.2/src/utmpset.c +@@ -24,6 +24,7 @@ void usage(void) { strerr_die4x(1, "usage: ", progname, USAGE, "\n"); } + int utmp_logout(const char *line) { + int fd; + uw_tmp ut; ++ time_t t; + int ok =-1; + + if ((fd =open(UW_TMP_UFILE, O_RDWR, 0)) < 0) +@@ -35,7 +36,8 @@ int utmp_logout(const char *line) { + if (!ut.ut_name[0] || (str_diff(ut.ut_line, line) != 0)) continue; + memset(ut.ut_name, 0, sizeof ut.ut_name); + memset(ut.ut_host, 0, sizeof ut.ut_host); +- if (time(&ut.ut_time) == -1) break; ++ if (time(&t) == -1) break; ++ ut.ut_time = t; + #ifdef DEAD_PROCESS + ut.ut_type =DEAD_PROCESS; + #endif +@@ -52,6 +54,7 @@ int wtmp_logout(const char *line) { + int len; + struct stat st; + uw_tmp ut; ++ time_t t; + + if ((fd = open_append(UW_TMP_WFILE)) == -1) + strerr_die4sys(111, FATAL, "unable to open ", UW_TMP_WFILE, ": "); +@@ -65,10 +68,11 @@ int wtmp_logout(const char *line) { + memset(&ut, 0, sizeof(uw_tmp)); + if ((len =str_len(line)) > sizeof ut.ut_line) len =sizeof ut.ut_line -2; + byte_copy(ut.ut_line, len, line); +- if (time(&ut.ut_time) == -1) { ++ if (time(&t) == -1) { + close(fd); + return(-1); + } ++ ut.ut_time = t; + #ifdef DEAD_PROCESS + ut.ut_type =DEAD_PROCESS; + #endif +-- +2.0.1 + diff --git a/runit/patches/0006-make-buildsystem-respect-CFLAGS.patch b/runit/patches/0006-make-buildsystem-respect-CFLAGS.patch new file mode 100644 index 0000000..269d79a --- /dev/null +++ b/runit/patches/0006-make-buildsystem-respect-CFLAGS.patch @@ -0,0 +1,21 @@ +Description: Make buildsystem respect dpkg-buildflags +Author: Dmitry Bogatov +Last-Update: 2016-06-01 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/runit-2.1.2/src/print-cc.sh ++++ b/runit-2.1.2/src/print-cc.sh +@@ -2,4 +2,4 @@ cc="`head -n1 conf-cc`" + systype="`cat systype`" + + cat warn-auto.sh +-echo exec "$cc" '-c ${1+"$@"}' ++echo exec "$cc" "$CPPFLAGS" "$CFLAGS" '-c ${1+"$@"}' +--- a/runit-2.1.2/src/print-ld.sh ++++ b/runit-2.1.2/src/print-ld.sh +@@ -3,4 +3,4 @@ systype="`cat systype`" + + cat warn-auto.sh + echo 'main="$1"; shift' +-echo exec "$ld" '-o "$main" "$main".o ${1+"$@"}' ++echo exec "$ld" "$LDFLAGS" '-o "$main" "$main".o ${1+"$@"}' diff --git a/runit/patches/0007-move-communication-files.patch b/runit/patches/0007-move-communication-files.patch new file mode 100644 index 0000000..637a619 --- /dev/null +++ b/runit/patches/0007-move-communication-files.patch @@ -0,0 +1,77 @@ +Description: Move communication files under /run + Runit by default uses files /etc/runit/stop and /etc/runit/reboot. + This configuration will not work when /etc is mounted read-only, + as such this patch renames this files into /run/runit.stop and + /run/runit.reboot +Author: Dmitry Bogatov +Last-Update: 2016-06-02 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/runit-2.1.2/etc/debian/1 ++++ b/runit-2.1.2/etc/debian/1 +@@ -6,5 +6,5 @@ PATH=/command:/sbin:/bin:/usr/sbin:/usr/ + /etc/init.d/rcS + /etc/init.d/rmnologin + +-touch /etc/runit/stopit +-chmod 0 /etc/runit/stopit ++touch /run/runit.stopit ++chmod 0 /run/runit.stopit +--- a/runit-2.1.2/etc/debian/3 ++++ b/runit-2.1.2/etc/debian/3 +@@ -4,7 +4,7 @@ exec 2>&1 + PATH=/command:/sbin:/bin:/usr/sbin:/usr/bin + + LAST=0 +-test -x /etc/runit/reboot && LAST=6 ++test -x /run/runit.reboot && LAST=6 + + echo 'Waiting for services to stop...' + sv -w196 force-stop /service/* +--- a/runit-2.1.2/etc/debian/ctrlaltdel ++++ b/runit-2.1.2/etc/debian/ctrlaltdel +@@ -4,6 +4,6 @@ PATH=/bin:/usr/bin + MSG="System is going down in 14 seconds..." + + # echo 'disabled.' ; exit +-touch /etc/runit/stopit +-chmod 100 /etc/runit/stopit && echo "$MSG" | wall ++touch /etc/runit.stopit ++chmod 100 /etc/runit.stopit && echo "$MSG" | wall + /bin/sleep 14 +--- a/runit-2.1.2/man/runit-init.8 ++++ b/runit-2.1.2/man/runit-init.8 +@@ -26,9 +26,9 @@ To signal + the system halt request, + .B runit-init + removes all permissions of the file +-.I /etc/runit/reboot ++.I /run/runit.reboot + (chmod 0), and sets the execute by owner permission of the file +-.I /etc/runit/stopit ++.I /run/runit.stopit + (chmod 100). + Then a CONT signal is sent to + .BR runit (8). +@@ -40,9 +40,9 @@ To signal + the system reboot request, + .B runit-init + sets the execute by owner permission of the files +-.I /etc/runit/reboot ++.I /run/runit.reboot + and +-.I /etc/runit/stopit ++.I /run/runit.stopit + (chmod 100). Then a CONT signal is sent to + .BR runit (8). + .SH EXIT CODES +--- a/runit-2.1.2/src/runit.h ++++ b/runit-2.1.2/src/runit.h +@@ -1,5 +1,5 @@ + #define RUNIT "/sbin/runit" +-#define STOPIT "/etc/runit/stopit" +-#define REBOOT "/etc/runit/reboot" ++#define STOPIT "/run/runit.stopit" ++#define REBOOT "/run/runit.reboot" + #define NOSYNC "/run/runit.nosync" + #define CTRLALTDEL "/etc/runit/ctrlaltdel" diff --git a/runit/patches/0008-emulate-sysv-runlevel-5.patch b/runit/patches/0008-emulate-sysv-runlevel-5.patch new file mode 100644 index 0000000..0d370c8 --- /dev/null +++ b/runit/patches/0008-emulate-sysv-runlevel-5.patch @@ -0,0 +1,20 @@ +Description: Emulalate sysv runlevel 5 by default + Currently, not many daemons in Debian provides proper runscripts, so + if user switches to runit, she will on next reboot, that none of daemons, + including essential, like cron, are started. + . + This patch starts them in sysv-init style -- unmanaged, in background. + It is sub-par solution, but allows one-by-one transition. +Author: Dmitry Bogatov +Forwarded: not-needed +Last-Update: 2016-06-09 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/runit-2.1.2/etc/debian/1 ++++ b/runit-2.1.2/etc/debian/1 +@@ -8,3 +8,5 @@ PATH=/command:/sbin:/bin:/usr/sbin:/usr/ + + touch /run/runit.stopit + chmod 0 /run/runit.stopit ++ ++[ -e /etc/runit/no-emulate-sysv ] || /etc/init.d/rc 5 diff --git a/runit/patches/0009-svlogd.c_clear_dir_struct.patch b/runit/patches/0009-svlogd.c_clear_dir_struct.patch new file mode 100644 index 0000000..f95890e --- /dev/null +++ b/runit/patches/0009-svlogd.c_clear_dir_struct.patch @@ -0,0 +1,18 @@ +commit e0f48258bb2ff9f65524530771d4f6f4b2948384 +Author: Érico Rolim +Date: Sun Aug 16 15:12:35 2020 -0300 + + svlogd.c: Clear dir struct. + +diff --git a/src/svlogd.c b/src/svlogd.c +index 5e55a90..006493e 100644 +--- a/runit-2.1.2/src/svlogd.c ++++ b/runit-2.1.2/src/svlogd.c +@@ -705,6 +705,7 @@ int main(int argc, const char **argv) { + coe(fdwdir); + dir =(struct logdir*)alloc(dirn *sizeof(struct logdir)); + if (! dir) die_nomem(); ++ memset(dir, 0, dirn * sizeof(struct logdir)); + for (i =0; i < dirn; ++i) { + dir[i].fddir =-1; dir[i].fdcur =-1; + dir[i].btmp =(char*)alloc(buflen *sizeof(char)); diff --git a/runit/patches/0010-svlogd.c_Initialize_all_fields_of_sockaddr_in.patch b/runit/patches/0010-svlogd.c_Initialize_all_fields_of_sockaddr_in.patch new file mode 100644 index 0000000..94ad7fe --- /dev/null +++ b/runit/patches/0010-svlogd.c_Initialize_all_fields_of_sockaddr_in.patch @@ -0,0 +1,20 @@ +commit 4d2a8e66a3c62f47ca7b9e91c49afbeaa0cfc0b1 +Author: Érico Rolim +Date: Sun Aug 16 15:12:45 2020 -0300 + + svlogd.c: Initialize all fields of sockaddr_in. + + http://skarnet.org/cgi-bin/archive.cgi?2:mss:1163:201602:gpiglpbjdemlioaeabbn + +diff --git a/src/svlogd.c b/src/svlogd.c +index 006493e..8de65e0 100644 +--- a/runit-2.1.2/src/svlogd.c ++++ b/runit-2.1.2/src/svlogd.c +@@ -430,6 +430,7 @@ unsigned int logdir_open(struct logdir *ld, const char *fn) { + ld->name =(char*)fn; + ld->ppid =0; + ld->match ='+'; ++ ld->udpaddr.sin_family =AF_INET; + ld->udpaddr.sin_port =0; + ld->udponly =0; + while (! stralloc_copys(&ld->prefix, "")) pause_nomem(); diff --git a/runit/patches/0011-svlogd.c_add_missing_header.patch b/runit/patches/0011-svlogd.c_add_missing_header.patch new file mode 100644 index 0000000..1cc1c5d --- /dev/null +++ b/runit/patches/0011-svlogd.c_add_missing_header.patch @@ -0,0 +1,18 @@ +commit ec0f605d5b385c6c230a10312697315e01dad217 +Author: Érico Rolim +Date: Sun Aug 16 15:19:37 2020 -0300 + + svlogd.c: add missing header. + +diff --git a/src/svlogd.c b/src/svlogd.c +index 8de65e0..8c68c73 100644 +--- a/runit-2.1.2/src/svlogd.c ++++ b/runit-2.1.2/src/svlogd.c +@@ -8,6 +8,7 @@ + #include + #include + #include ++#include + #include "pmatch.h" + #include "fmt_ptime.h" + #include "alloc.h" diff --git a/runit/patches/0012-seek_set.c_add_missing_header.patch b/runit/patches/0012-seek_set.c_add_missing_header.patch new file mode 100644 index 0000000..ccad4a3 --- /dev/null +++ b/runit/patches/0012-seek_set.c_add_missing_header.patch @@ -0,0 +1,18 @@ +commit 53bf22e68c36b2fc2281998f8311c7c73c17259c +Author: Érico Rolim +Date: Sun Aug 16 15:19:45 2020 -0300 + + seek_set.c: add missing header. + +diff --git a/src/seek_set.c b/src/seek_set.c +index 19b8265..a1a36d0 100644 +--- a/runit-2.1.2/src/seek_set.c ++++ b/runit-2.1.2/src/seek_set.c +@@ -1,6 +1,7 @@ + /* Public domain. */ + + #include ++#include + #include "seek.h" + + #define SET 0 /* sigh */ diff --git a/runit/patches/0013-pathexec_run.c_add_missing_header.patch b/runit/patches/0013-pathexec_run.c_add_missing_header.patch new file mode 100644 index 0000000..56edd39 --- /dev/null +++ b/runit/patches/0013-pathexec_run.c_add_missing_header.patch @@ -0,0 +1,17 @@ +commit 3295cb4865759a71c27ca5fe4ade980c8b69db6c +Author: Érico Rolim +Date: Sun Aug 16 15:19:51 2020 -0300 + + pathexec_run.c:: add missing header. + +diff --git a/src/pathexec_run.c b/src/pathexec_run.c +index 1770ac7..70ac7a8 100644 +--- a/runit-2.1.2/src/pathexec_run.c ++++ b/runit-2.1.2/src/pathexec_run.c +@@ -1,5 +1,6 @@ + /* Public domain. */ + ++#include + #include "error.h" + #include "stralloc.h" + #include "str.h" diff --git a/runit/patches/0014-chkshsgr.c_use_gid_t.patch b/runit/patches/0014-chkshsgr.c_use_gid_t.patch new file mode 100644 index 0000000..9e25516 --- /dev/null +++ b/runit/patches/0014-chkshsgr.c_use_gid_t.patch @@ -0,0 +1,23 @@ +commit c3c65bcdfe53aac4f1bd27f4bfb3faccabfa2fd3 +Author: Érico Rolim +Date: Sun Aug 16 15:19:57 2020 -0300 + + chkshsgr.c: use gid_t. + +diff --git a/src/chkshsgr.c b/src/chkshsgr.c +index 38c352d..31eda67 100644 +--- a/runit-2.1.2/src/chkshsgr.c ++++ b/runit-2.1.2/src/chkshsgr.c +@@ -1,10 +1,11 @@ + /* Public domain. */ + ++#include + #include + + int main() + { +- short x[4]; ++ gid_t x[4]; + + x[0] = x[1] = 0; + if (getgroups(1,x) == 0) if (setgroups(1,x) == -1) _exit(1); diff --git a/runit/patches/0015-prot.c_prot.h_use_gid_t_and_uid_t.patch b/runit/patches/0015-prot.c_prot.h_use_gid_t_and_uid_t.patch new file mode 100644 index 0000000..6a153c6 --- /dev/null +++ b/runit/patches/0015-prot.c_prot.h_use_gid_t_and_uid_t.patch @@ -0,0 +1,48 @@ +commit fc2f8674d726df289e650b79189c4221ff66c8a5 +Author: Érico Rolim +Date: Sun Aug 16 15:20:03 2020 -0300 + + prot.c, prot.h: use gid_t and uid_t. + +diff --git a/src/prot.c b/src/prot.c +index 79a88c5..66cdc05 100644 +--- a/runit-2.1.2/src/prot.c ++++ b/runit-2.1.2/src/prot.c +@@ -3,7 +3,11 @@ + #include "hasshsgr.h" + #include "prot.h" + +-int prot_gid(int gid) ++#include ++#include ++#include ++ ++int prot_gid(gid_t gid) + { + #ifdef HASSHORTSETGROUPS + short x[2]; +@@ -15,7 +19,7 @@ int prot_gid(int gid) + return setgid(gid); /* _should_ be redundant, but on some systems it isn't */ + } + +-int prot_uid(int uid) ++int prot_uid(uid_t uid) + { + return setuid(uid); + } +diff --git a/src/prot.h b/src/prot.h +index 2e5cb81..b9fa6c8 100644 +--- a/runit-2.1.2/src/prot.h ++++ b/runit-2.1.2/src/prot.h +@@ -3,7 +3,9 @@ + #ifndef PROT_H + #define PROT_H + +-extern int prot_gid(int); +-extern int prot_uid(int); ++#include ++ ++extern int prot_gid(gid_t); ++extern int prot_uid(uid_t); + + #endif diff --git a/runit/patches/0016-chpst_fix_undefined_operation_on_sequence_point.patch b/runit/patches/0016-chpst_fix_undefined_operation_on_sequence_point.patch new file mode 100644 index 0000000..bbf78e8 --- /dev/null +++ b/runit/patches/0016-chpst_fix_undefined_operation_on_sequence_point.patch @@ -0,0 +1,24 @@ +commit 727b2a5236346e75ec6455179d5073e348d165be (HEAD -> refs/heads/master, refs/remotes/origin/master, refs/remotes/origin/HEAD) +Author: Érico Rolim +Date: Wed Aug 26 21:00:34 2020 -0300 + + chpst: fix undefined operation on sequence point. + + Based on patch from + + https://salsa.debian.org/debian/runit/-/blob/77a49befd7c1a08bfe0613454e540562529811fa/debian/patches/0016-fix-warning-for-undefined-operation-on-sequence-poin.patch + +diff --git a/src/chpst.c b/src/chpst.c +index f279d44..1cca5f4 100644 +--- a/runit-2.1.2/src/chpst.c ++++ b/runit-2.1.2/src/chpst.c +@@ -308,7 +308,8 @@ int main(int argc, const char **argv) { + case 'n': + switch (*optarg) { + case '-': +- if (optarg[scan_ulong(++optarg, &ul)]) usage(); nicelvl =ul; ++ ++optarg; ++ if (optarg[scan_ulong(optarg, &ul)]) usage(); nicelvl =ul; + nicelvl *=-1; + break; + case '+': ++optarg; diff --git a/runit/patches/0017-fix_runsvdir_c_event_check.patch b/runit/patches/0017-fix_runsvdir_c_event_check.patch new file mode 100644 index 0000000..991e282 --- /dev/null +++ b/runit/patches/0017-fix_runsvdir_c_event_check.patch @@ -0,0 +1,25 @@ +From 8a090ee97d4037ed19fc468ce2933db8cb264016 Mon Sep 17 00:00:00 2001 +From: Jan +Date: Sun, 26 Jan 2020 13:39:52 +0100 +Subject: [PATCH] fix: runsvdir.c event check + + - fix runsvdir: wrong operator in event check, should be 'and' instead of 'or'. + This is a common typo. The IOPAUSE_READ is not being checked and the condition + always wrongly evaluates to true. +--- + runit-2.1.2/src/runsvdir.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/runit-2.1.2/src/runsvdir.c b/runit-2.1.2/src/runsvdir.c +index 1317fe9..aca22d0 100644 +--- a/runit-2.1.2/src/runsvdir.c ++++ b/runit-2.1.2/src/runsvdir.c +@@ -265,7 +265,7 @@ int main(int argc, char **argv) { + iopause(0, 0, &deadline, &now); + sig_unblock(sig_child); + +- if (rplog && (io[0].revents | IOPAUSE_READ)) ++ if (rplog && (io[0].revents & IOPAUSE_READ)) + while (read(logpipe[0], &ch, 1) > 0) + if (ch) { + for (i =6; i < rploglen; i++) diff --git a/runit/patches/0018-resource_leaks_and_other_issues_as_reported_by_infer.patch b/runit/patches/0018-resource_leaks_and_other_issues_as_reported_by_infer.patch new file mode 100644 index 0000000..3a19cf1 --- /dev/null +++ b/runit/patches/0018-resource_leaks_and_other_issues_as_reported_by_infer.patch @@ -0,0 +1,89 @@ +From 62031255f6e7f6ef0355c81010bb193153267485 Mon Sep 17 00:00:00 2001 +From: Jan +Date: Fri, 8 Mar 2019 21:18:35 +0100 +Subject: [PATCH] fix: resource leaks and other issues as reported by infer + + to run infer static code analyzer (fbinfer.com): + cd src; infer run -- make + + - fix: fd_move.c resource leak - close file handle + - fix: runit-init.c resource leak - close file handle + - fix: svlogd.c dead storage - value never used + - fix: x86cpuid.c uninitialized value read + - fix: package/install-man - do not use unreliable symlinks +--- + runit-2.1.2/package/install-man | 11 +++-------- + runit-2.1.2/src/fd_move.c | 5 ++++- + runit-2.1.2/src/runit-init.c | 6 +++--- + runit-2.1.2/src/svlogd.c | 2 +- + runit-2.1.2/src/x86cpuid.c | 4 ++++ + 5 files changed, 15 insertions(+), 13 deletions(-) + +diff -ruNp admin/runit-2.1.2/src/fd_move.c admin.new/runit-2.1.2/src/fd_move.c +--- admin/runit-2.1.2/src/fd_move.c 2014-08-10 22:22:35.000000000 +0400 ++++ admin.new/runit-2.1.2/src/fd_move.c 2020-11-04 16:04:06.064942243 +0300 +@@ -6,7 +6,10 @@ + int fd_move(int to,int from) + { + if (to == from) return 0; +- if (fd_copy(to,from) == -1) return -1; ++ if (fd_copy(to,from) == -1) { ++ close(from); ++ return -1; ++ } + close(from); + return 0; + } +diff -ruNp admin/runit-2.1.2/src/runit-init.c admin.new/runit-2.1.2/src/runit-init.c +--- admin/runit-2.1.2/src/runit-init.c 2014-08-10 22:22:34.000000000 +0400 ++++ admin.new/runit-2.1.2/src/runit-init.c 2020-11-04 16:04:06.065942238 +0300 +@@ -17,7 +17,7 @@ const char *progname; + void usage(void) { strerr_die4x(0, "usage: ", progname, USAGE, "\n"); } + + void runit_halt () { +- if (open_trunc(STOPIT) == -1) ++ if (close(open_trunc(STOPIT)) == -1) + strerr_die4sys(111, FATAL, "unable to create ", STOPIT, ": "); + if (chmod(STOPIT, 0100) == -1) + strerr_die4sys(111, FATAL, "unable to chmod ", STOPIT, ": "); +@@ -29,11 +29,11 @@ void runit_halt () { + } + + void runit_reboot () { +- if (open_trunc(STOPIT) == -1) ++ if (close(open_trunc(STOPIT)) == -1) + strerr_die4sys(111, FATAL, "unable to create ", STOPIT, ": "); + if (chmod(STOPIT, 0100) == -1) + strerr_die4sys(111, FATAL, "unable to chmod ", STOPIT, ": "); +- if (open_trunc(REBOOT) == -1) ++ if (close(open_trunc(REBOOT)) == -1) + strerr_die4sys(111, FATAL, "unable to create ", REBOOT, ": "); + if (chmod(REBOOT, 0100) == -1) + strerr_die4sys(111, FATAL, "unable to chmod ", REBOOT, ": "); +diff -ruNp admin/runit-2.1.2/src/svlogd.c admin.new/runit-2.1.2/src/svlogd.c +--- admin/runit-2.1.2/src/svlogd.c 2014-08-10 22:22:34.000000000 +0400 ++++ admin.new/runit-2.1.2/src/svlogd.c 2020-11-04 16:06:23.526311748 +0300 +@@ -396,7 +396,8 @@ unsigned int ip4_scan(const char *s,char + if (*s != '.') return 0; ++s; ++len; + i = scan_ulong(s,&u); if (!i) return 0; ip[2] = u; s += i; len += i; + if (*s != '.') return 0; ++s; ++len; +- i = scan_ulong(s,&u); if (!i) return 0; ip[3] = u; s += i; len += i; ++ i = scan_ulong(s,&u); if (!i) return 0; ip[3] = u; len += i; ++ + return len; + } + +diff -ruNp admin/runit-2.1.2/src/x86cpuid.c admin.new/runit-2.1.2/src/x86cpuid.c +--- admin/runit-2.1.2/src/x86cpuid.c 2014-08-10 22:22:34.000000000 +0400 ++++ admin.new/runit-2.1.2/src/x86cpuid.c 2020-11-04 16:04:06.067942229 +0300 +@@ -21,6 +21,10 @@ int main() + x[1] = 0; + x[2] = 0; + x[3] = 0; ++ y[0] = 0; ++ y[1] = 0; ++ y[2] = 0; ++ y[3] = 0; + + asm volatile(".byte 15;.byte 162" : "=a"(x[0]),"=b"(x[1]),"=c"(x[3]),"=d"(x[2]) : "0"(0) ); + if (!x[0]) return 0; diff --git a/runit/patches/0019-replace_obsolete_usleep_with_nanosleep.patch b/runit/patches/0019-replace_obsolete_usleep_with_nanosleep.patch new file mode 100644 index 0000000..4967047 --- /dev/null +++ b/runit/patches/0019-replace_obsolete_usleep_with_nanosleep.patch @@ -0,0 +1,40 @@ +From f7b8f943d1f7a8f26df8d81eeb0a2d5a69ee7e22 Mon Sep 17 00:00:00 2001 +From: Jan +Date: Wed, 6 Mar 2019 18:38:04 +0100 +Subject: [PATCH] fix: replace obsolete usleep with nanosleep + + POSIX.1-2001 declares usleep obsolete, + POSIX.1-2008 removes the specification of usleep, + see https://linux.die.net/man/3/usleep +--- + runit-2.1.2/src/sv.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/runit-2.1.2/src/sv.c b/runit-2.1.2/src/sv.c +index 6cc2a8b..f97c5a2 100644 +--- a/runit-2.1.2/src/sv.c ++++ b/runit-2.1.2/src/sv.c +@@ -1,5 +1,6 @@ + #include + #include ++#include + #include + #include "str.h" + #include "strerr.h" +@@ -271,6 +272,7 @@ int control(char *a) { + int main(int argc, char **argv) { + unsigned int i, done; + char *x; ++ const struct timespec sleeptime = {0, 420000000}; + + progname =*argv; + for (i =str_len(*argv); i; --i) if ((*argv)[i -1] == '/') break; +@@ -388,7 +390,7 @@ int main(int argc, char **argv) { + fatal("unable to change to original directory"); + } + if (done) break; +- usleep(420000); ++ nanosleep(&sleeptime, NULL); + taia_now(&tnow); + } + return(rc > 99 ? 99 : rc); diff --git a/runit/patches/0020-implicit_declarations_incompatible_types_argv_type.patch b/runit/patches/0020-implicit_declarations_incompatible_types_argv_type.patch new file mode 100644 index 0000000..62a22e5 --- /dev/null +++ b/runit/patches/0020-implicit_declarations_incompatible_types_argv_type.patch @@ -0,0 +1,294 @@ +diff -ruNp admin/runit-2.1.2/src/chkshsgr.c admin.new/runit-2.1.2/src/chkshsgr.c +--- admin/runit-2.1.2/src/chkshsgr.c 2020-11-04 16:53:26.482378214 +0300 ++++ admin.new/runit-2.1.2/src/chkshsgr.c 2020-11-04 16:55:36.400785552 +0300 +@@ -2,6 +2,7 @@ + + #include + #include ++#include + + int main() + { +diff -ruNp admin/runit-2.1.2/src/chpst.c admin.new/runit-2.1.2/src/chpst.c +--- admin/runit-2.1.2/src/chpst.c 2020-11-04 16:53:35.608336583 +0300 ++++ admin.new/runit-2.1.2/src/chpst.c 2020-11-04 16:57:34.848244408 +0300 +@@ -3,6 +3,7 @@ + #include + #include + #include ++#include + #include "sgetopt.h" + #include "error.h" + #include "strerr.h" +@@ -40,7 +41,7 @@ void usage() { strerr_die4x(100, "usage: + + char *set_user =0; + char *env_user =0; +-const char *argv0 =0; ++char *argv0 =0; + const char *env_dir =0; + unsigned int verbose =0; + unsigned int pgrp =0; +@@ -258,14 +259,14 @@ void slimit() { + } + + /* argv[0] */ +-void setuidgid(int, const char *const *); +-void envuidgid(int, const char *const *); +-void envdir(int, const char *const *); +-void pgrphack(int, const char *const *); +-void setlock(int, const char *const *); +-void softlimit(int, const char *const *); ++void setuidgid(int, char *const *); ++void envuidgid(int, char *const *); ++void envdir(int, char *const *); ++void pgrphack(int, char *const *); ++void setlock(int, char *const *); ++void softlimit(int, char *const *); + +-int main(int argc, const char **argv) { ++int main(int argc, char **argv) { + int opt; + int i; + unsigned long ul; +@@ -367,7 +368,7 @@ int main(int argc, const char **argv) { + void setuidgid_usage() { + strerr_die4x(100, "usage: ", progname, USAGE_SETUIDGID, "\n"); + } +-void setuidgid(int argc, const char *const *argv) { ++void setuidgid(int argc, char *const *argv) { + const char *account; + + if (! (account =*++argv)) setuidgid_usage(); +@@ -380,7 +381,7 @@ void setuidgid(int argc, const char *con + void envuidgid_usage() { + strerr_die4x(100, "usage: ", progname, USAGE_ENVUIDGID, "\n"); + } +-void envuidgid(int argc, const char *const *argv) { ++void envuidgid(int argc, char *const *argv) { + const char *account; + + if (! (account =*++argv)) envuidgid_usage(); +@@ -393,7 +394,7 @@ void envuidgid(int argc, const char *con + void envdir_usage() { + strerr_die4x(100, "usage: ", progname, USAGE_ENVDIR, "\n"); + } +-void envdir(int argc, const char *const *argv) { ++void envdir(int argc, char *const *argv) { + const char *dir; + + if (! (dir =*++argv)) envdir_usage(); +@@ -406,7 +407,7 @@ void envdir(int argc, const char *const + void pgrphack_usage() { + strerr_die4x(100, "usage: ", progname, USAGE_PGRPHACK, "\n"); + } +-void pgrphack(int argc, const char *const *argv) { ++void pgrphack(int argc, char *const *argv) { + if (! *++argv) pgrphack_usage(); + setsid(); + pathexec(argv); +@@ -416,7 +417,7 @@ void pgrphack(int argc, const char *cons + void setlock_usage() { + strerr_die4x(100, "usage: ", progname, USAGE_SETLOCK, "\n"); + } +-void setlock(int argc, const char *const *argv) { ++void setlock(int argc, char *const *argv) { + int opt; + unsigned int delay =0; + unsigned int x =0; +@@ -450,7 +451,7 @@ void getlarg(long *l) { + if (optarg[scan_ulong(optarg, &ul)]) usage(); + *l =ul; + } +-void softlimit(int argc, const char *const *argv) { ++void softlimit(int argc, char *const *argv) { + int opt; + + while ((opt =getopt(argc,argv,"a:c:d:f:l:m:o:p:r:s:t:")) != opteof) +diff -ruNp admin/runit-2.1.2/src/pathexec.h admin.new/runit-2.1.2/src/pathexec.h +--- admin/runit-2.1.2/src/pathexec.h 2014-08-10 22:22:35.000000000 +0400 ++++ admin.new/runit-2.1.2/src/pathexec.h 2020-11-04 16:54:40.572040232 +0300 +@@ -3,9 +3,9 @@ + #ifndef PATHEXEC_H + #define PATHEXEC_H + +-extern void pathexec_run(const char *,const char * const *,const char * const *); ++extern void pathexec_run(const char *, char *const *, char *const *); + extern int pathexec_env(const char *,const char *); +-extern void pathexec_env_run(const char *, const char * const *); +-extern void pathexec(const char * const *); ++extern void pathexec_env_run(const char *, char *const *); ++extern void pathexec(char * const *); + + #endif +diff -ruNp admin/runit-2.1.2/src/pathexec_env.c admin.new/runit-2.1.2/src/pathexec_env.c +--- admin/runit-2.1.2/src/pathexec_env.c 2014-08-10 22:22:35.000000000 +0400 ++++ admin.new/runit-2.1.2/src/pathexec_env.c 2020-11-04 16:54:40.573040227 +0300 +@@ -22,9 +22,9 @@ int pathexec_env(const char *s,const cha + return stralloc_cat(&plus,&tmp); + } + +-void pathexec_env_run(const char *file, const char *const *argv) ++void pathexec_env_run(const char *file, char *const *argv) + { +- const char **e; ++ char **e; + unsigned int elen; + unsigned int i; + unsigned int j; +@@ -40,7 +40,7 @@ void pathexec_env_run(const char *file, + if (!plus.s[i]) + ++elen; + +- e = (const char **) alloc((elen + 1) * sizeof(char *)); ++ e = (char **) alloc((elen + 1) * sizeof(char *)); + if (!e) return; + + elen = 0; +@@ -68,7 +68,7 @@ void pathexec_env_run(const char *file, + alloc_free(e); + } + +-void pathexec(const char *const *argv) ++void pathexec(char *const *argv) + { + return pathexec_env_run(*argv, argv); + } +diff -ruNp admin/runit-2.1.2/src/pathexec_run.c admin.new/runit-2.1.2/src/pathexec_run.c +--- admin/runit-2.1.2/src/pathexec_run.c 2020-11-04 16:53:22.330397154 +0300 ++++ admin.new/runit-2.1.2/src/pathexec_run.c 2020-11-04 16:54:42.135033101 +0300 +@@ -9,7 +9,7 @@ + + static stralloc tmp; + +-void pathexec_run(const char *file,const char * const *argv,const char * const *envp) ++void pathexec_run(const char *file, char *const *argv, char *const *envp) + { + const char *path; + unsigned int split; +diff -ruNp admin/runit-2.1.2/src/prot.c admin.new/runit-2.1.2/src/prot.c +--- admin/runit-2.1.2/src/prot.c 2020-11-04 16:53:30.775358630 +0300 ++++ admin.new/runit-2.1.2/src/prot.c 2020-11-04 16:59:33.850699916 +0300 +@@ -10,7 +10,7 @@ + int prot_gid(gid_t gid) + { + #ifdef HASSHORTSETGROUPS +- short x[2]; ++ gid_t x[2]; + x[0] = gid; x[1] = 73; /* catch errors */ + if (setgroups(1,x) == -1) return -1; + #else +diff -ruNp admin/runit-2.1.2/src/runsvdir.c admin.new/runit-2.1.2/src/runsvdir.c +--- admin/runit-2.1.2/src/runsvdir.c 2020-11-04 16:53:40.102316083 +0300 ++++ admin.new/runit-2.1.2/src/runsvdir.c 2020-11-04 16:54:50.376995503 +0300 +@@ -63,7 +63,7 @@ void runsv(int no, char *name) { + } + if (pid == 0) { + /* child */ +- const char *prog[3]; ++ char *prog[3]; + + prog[0] ="runsv"; + prog[1] =name; +@@ -71,7 +71,7 @@ void runsv(int no, char *name) { + sig_uncatch(sig_hangup); + sig_uncatch(sig_term); + if (pgrp) setsid(); +- pathexec_run(*prog, prog, (const char* const*)environ); ++ pathexec_run(*prog, prog, (char * const *)environ); + fatal("unable to start runsv ", name); + } + sv[no].pid =pid; +diff -ruNp admin/runit-2.1.2/src/sgetopt.c admin.new/runit-2.1.2/src/sgetopt.c +--- admin/runit-2.1.2/src/sgetopt.c 2014-08-10 22:22:35.000000000 +0400 ++++ admin.new/runit-2.1.2/src/sgetopt.c 2020-11-04 16:54:52.310986681 +0300 +@@ -27,7 +27,7 @@ Documentation in sgetopt.3. + int opterr = 1; + const char *optprogname = 0; + +-int getopt(int argc,const char *const *argv,const char *opts) ++int getopt(int argc,char *const *argv,const char *opts) + { + int c; + const char *s; +diff -ruNp admin/runit-2.1.2/src/sgetopt.h admin.new/runit-2.1.2/src/sgetopt.h +--- admin/runit-2.1.2/src/sgetopt.h 2014-08-10 22:22:34.000000000 +0400 ++++ admin.new/runit-2.1.2/src/sgetopt.h 2020-11-04 16:54:52.311986676 +0300 +@@ -16,7 +16,7 @@ + + #include "subgetopt.h" + +-extern int sgetoptmine(int,const char *const *,const char *); ++extern int sgetoptmine(int,char *const *,const char *); + extern int sgetopterr; + extern const char *sgetoptprogname; + +diff -ruNp admin/runit-2.1.2/src/subgetopt.c admin.new/runit-2.1.2/src/subgetopt.c +--- admin/runit-2.1.2/src/subgetopt.c 2014-08-10 22:22:35.000000000 +0400 ++++ admin.new/runit-2.1.2/src/subgetopt.c 2020-11-04 16:54:52.312986672 +0300 +@@ -16,7 +16,7 @@ const char *optarg = 0; + int optproblem = 0; + int optdone = SUBGETOPTDONE; + +-int sgopt(int argc,const char *const *argv,const char *opts) ++int sgopt(int argc,char *const *argv,const char *opts) + { + int c; + const char *s; +diff -ruNp admin/runit-2.1.2/src/subgetopt.h admin.new/runit-2.1.2/src/subgetopt.h +--- admin/runit-2.1.2/src/subgetopt.h 2014-08-10 22:22:35.000000000 +0400 ++++ admin.new/runit-2.1.2/src/subgetopt.h 2020-11-04 16:54:52.312986672 +0300 +@@ -15,7 +15,7 @@ + + #define SUBGETOPTDONE -1 + +-extern int subgetopt(int,const char *const *,const char *); ++extern int subgetopt(int,char *const *,const char *); + extern const char *subgetoptarg; + extern int subgetoptind; + extern int subgetoptpos; +diff -ruNp admin/runit-2.1.2/src/sv.c admin.new/runit-2.1.2/src/sv.c +--- admin/runit-2.1.2/src/sv.c 2020-11-04 16:53:54.756249234 +0300 ++++ admin.new/runit-2.1.2/src/sv.c 2020-11-04 16:54:54.886974929 +0300 +@@ -283,7 +283,7 @@ int main(int argc, char **argv) { + lsb =(str_diff(progname, "sv")); + if ((x =env_get("SVDIR"))) varservice =x; + if ((x =env_get("SVWAIT"))) scan_ulong(x, &wait); +- while ((i =getopt(argc, (const char* const*)argv, "w:vV")) != opteof) { ++ while ((i =getopt(argc, (char* const*)argv, "w:vV")) != opteof) { + switch(i) { + case 'w': scan_ulong(optarg, &wait); + case 'v': verbose =1; break; +diff -ruNp admin/runit-2.1.2/src/svlogd.c admin.new/runit-2.1.2/src/svlogd.c +--- admin/runit-2.1.2/src/svlogd.c 2020-11-04 16:53:47.389282841 +0300 ++++ admin.new/runit-2.1.2/src/svlogd.c 2020-11-04 16:54:56.968965432 +0300 +@@ -53,7 +53,7 @@ unsigned long linelen; + const char *replace =""; + char repl =0; + +-const char **fndir; ++char **fndir; + int fdwdir; + struct stat st; + stralloc sa; +@@ -664,7 +664,7 @@ void logmatch(struct logdir *ld) { + i +=byte_chr(&ld->inst.s[i], ld->inst.len -i, 0); + } + } +-int main(int argc, const char **argv) { ++int main(int argc, char **argv) { + int i; + int opt; + +diff -ruNp admin/runit-2.1.2/src/utmpset.c admin.new/runit-2.1.2/src/utmpset.c +--- admin/runit-2.1.2/src/utmpset.c 2020-11-04 16:52:29.062640152 +0300 ++++ admin.new/runit-2.1.2/src/utmpset.c 2020-11-04 16:54:59.851952280 +0300 +@@ -85,7 +85,7 @@ int wtmp_logout(const char *line) { + return(1); + } + +-int main (int argc, const char * const *argv, const char * const *envp) { ++int main (int argc, char * const *argv, char * const *envp) { + int opt; + int wtmp =0; + diff --git a/runit/patches/0022-fix_spin_lock_on_systems_with_poor_clock.patch b/runit/patches/0022-fix_spin_lock_on_systems_with_poor_clock.patch new file mode 100644 index 0000000..10aaa81 --- /dev/null +++ b/runit/patches/0022-fix_spin_lock_on_systems_with_poor_clock.patch @@ -0,0 +1,22 @@ +From 7791b76917a00ca44e3a5c297675214a40f7f215 Mon Sep 17 00:00:00 2001 +From: Dmitry Bogatov +Date: Mon, 28 May 2018 21:46:39 +0300 +Subject: [PATCH] [PATCH] Fix spin lock on systems with poor clock + +--- + runit-2.1.2/src/svlogd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/runit-2.1.2/src/svlogd.c b/runit-2.1.2/src/svlogd.c +index 90a3321..fab8441 100644 +--- a/runit-2.1.2/src/svlogd.c ++++ b/runit-2.1.2/src/svlogd.c +@@ -234,7 +234,7 @@ void rmoldest(struct logdir *ld) { + if (unlink(f->d_name) == -1) + warn2("unable to unlink processor leftover", f->d_name); + } +- else { ++ else if (f->d_name[26] != 'u') { + ++n; + if (str_diff(f->d_name, oldest) < 0) byte_copy(oldest, 27, f->d_name); + } diff --git a/runit/patches/enable-runsvup-and-runsvdown.patch b/runit/patches/enable-runsvup-and-runsvdown.patch new file mode 100644 index 0000000..a38e2b7 --- /dev/null +++ b/runit/patches/enable-runsvup-and-runsvdown.patch @@ -0,0 +1,27 @@ +diff -ruN admin/runit-2.1.2/package/commands admin.new/runit-2.1.2/package/commands +--- admin/runit-2.1.2/package/commands 2014-08-10 22:22:35.000000000 +0400 ++++ admin.new/runit-2.1.2/package/commands 2020-04-29 00:52:22.669255084 +0300 +@@ -5,5 +5,7 @@ + runsvchdir + runsvdir + sv ++svwaitdown ++svwaitup + svlogd + utmpset +diff -ruN admin/runit-2.1.2/src/Makefile admin.new/runit-2.1.2/src/Makefile +--- admin/runit-2.1.2/src/Makefile 2014-08-10 22:22:35.000000000 +0400 ++++ admin.new/runit-2.1.2/src/Makefile 2020-04-29 00:50:35.024580450 +0300 +@@ -1,9 +1,10 @@ +-IT=chpst runit runit-init runsv runsvchdir runsvdir sv svlogd utmpset ++IT=chpst runit runit-init runsv runsvchdir runsvdir sv svlogd svwaitdown svwaitup utmpset ++ME=chpst runit runit-init runsv runsvchdir runsvdir sv svlogd utmpset + + default: sysdeps $(IT) + + check: $(IT) +- ./check-local $(IT) ++ ./check-local $(ME) + + runit: load runit.o unix.a byte.a + ./load runit unix.a byte.a -static diff --git a/runit/patches/malloc-to-calloc.patch b/runit/patches/malloc-to-calloc.patch new file mode 100644 index 0000000..465b2e6 --- /dev/null +++ b/runit/patches/malloc-to-calloc.patch @@ -0,0 +1,13 @@ +diff -ruNp admin/runit-2.1.2/src/alloc.c admin.new/runit-2.1.2/src/alloc.c +--- admin/runit-2.1.2/src/alloc.c 2014-08-10 22:22:34.000000000 +0400 ++++ admin.new/runit-2.1.2/src/alloc.c 2020-11-04 19:12:09.110651948 +0300 +@@ -18,7 +18,7 @@ unsigned int n; + char *x; + n = ALIGNMENT + n - (n & (ALIGNMENT - 1)); /* XXX: could overflow */ + if (n <= avail) { avail -= n; return space + avail; } +- x = malloc(n); ++ x = calloc(n, sizeof(char)); + if (!x) errno = error_nomem; + return x; + } + diff --git a/runit/runit.SlackBuild b/runit/runit.SlackBuild new file mode 100755 index 0000000..5ec1449 --- /dev/null +++ b/runit/runit.SlackBuild @@ -0,0 +1,135 @@ +#!/bin/sh +# Slackware package build script for runit + +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=runit +VERSION=${VERSION:-2.1.2} +BUILD=${BUILD:-4} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +set -e + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -g -march=i586 -mtune=i686" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -g -march=i686 -mtune=i686" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -g -fPIC" +else + SLKCFLAGS="-O2 -g" +fi + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz --strip-components=1 +cd $PRGNAM-$VERSION + +patch -p2 -i $CWD/patches/0003-utmpset.c-mixes-int32_t-and-time_t.diff +patch -p2 -i $CWD/patches/0006-make-buildsystem-respect-CFLAGS.patch +patch -p2 -i $CWD/patches/0007-move-communication-files.patch +patch -p2 -i $CWD/patches/0008-emulate-sysv-runlevel-5.patch +patch -p2 -i $CWD/patches/0009-svlogd.c_clear_dir_struct.patch +patch -p2 -i $CWD/patches/0010-svlogd.c_Initialize_all_fields_of_sockaddr_in.patch +patch -p2 -i $CWD/patches/0011-svlogd.c_add_missing_header.patch +patch -p2 -i $CWD/patches/0012-seek_set.c_add_missing_header.patch +patch -p2 -i $CWD/patches/0013-pathexec_run.c_add_missing_header.patch +patch -p2 -i $CWD/patches/0014-chkshsgr.c_use_gid_t.patch +patch -p2 -i $CWD/patches/0015-prot.c_prot.h_use_gid_t_and_uid_t.patch +patch -p2 -i $CWD/patches/0016-chpst_fix_undefined_operation_on_sequence_point.patch +patch -p2 -i $CWD/patches/enable-runsvup-and-runsvdown.patch + +patch -p2 -i $CWD/patches/0017-fix_runsvdir_c_event_check.patch +patch -p2 -i $CWD/patches/0018-resource_leaks_and_other_issues_as_reported_by_infer.patch +patch -p2 -i $CWD/patches/0019-replace_obsolete_usleep_with_nanosleep.patch +patch -p2 -i $CWD/patches/0020-implicit_declarations_incompatible_types_argv_type.patch +patch -p2 -i $CWD/patches/0022-fix_spin_lock_on_systems_with_poor_clock.patch + +patch -p2 -i $CWD/patches/malloc-to-calloc.patch + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +echo gcc $SLKCFLAGS -Wall > src/conf-cc + +package/compile +package/check + +install -d $PKG/{sbin,usr/bin} +install -Dpm 0755 command/{runit*,utmpset} $PKG/sbin +install -Dpm 0755 command/{chpst,runsv*,sv*} $PKG/usr/bin +install -Dpm 0750 etc/2 $PKG/sbin/runsvdir-start + +install -d $PKG/usr/man/man8 +install -Dpm 0644 man/* $PKG/usr/man/man8 +install -Dpm 0644 $CWD/svwaitdown.8 $PKG/usr/man/man8 +install -Dpm 0644 $CWD/svwaitup.8 $PKG/usr/man/man8 + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +# Proceed with the configuration files. By default we install them. +if [ "${CONFIG:-no}" != "yes" ]; then + # Set up the configuration files + cp -rp $CWD/config/* $PKG/ + # Set up the runlevels + mkdir -p $PKG/etc/runit/runsvdir/{default,single}/ + ln -s /etc/sv/agetty-tty1 $PKG/etc/runit/runsvdir/single/ + ln -s default $PKG/etc/runit/runsvdir/current + for N in 1 2 3 4 5 6; do + ln -s /etc/sv/agetty-tty${N} $PKG/etc/runit/runsvdir/default/ + done + ln -s /etc/runit/runsvdir/current $PKG/service +fi + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a package/CHANGES package/README package/TODO package/COPYING package/THANKS \ + doc/ etc/ $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/runit/runit.info b/runit/runit.info new file mode 100644 index 0000000..6a87af9 --- /dev/null +++ b/runit/runit.info @@ -0,0 +1,10 @@ +PRGNAM="runit" +VERSION="2.1.2" +HOMEPAGE="http://smarden.org/runit/" +DOWNLOAD="http://smarden.org/runit/runit-2.1.2.tar.gz" +MD5SUM="6c985fbfe3a34608eb3c53dc719172c4" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/runit/slack-desc b/runit/slack-desc new file mode 100644 index 0000000..6d43adf --- /dev/null +++ b/runit/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +runit: runit (a UNIX init scheme with service supervision) +runit: +runit: a cross-platform Unix init scheme with service supervision, a +runit: replacement for sysvinit, and other init schemes. +runit: +runit: runit can replace init or its service supervision can be used with +runit: traditional init. runit is compatible with djb's daemontools +runit: +runit: Homepage: http://smarden.org/runit/index.html +runit: +runit: diff --git a/runit/svwaitdown.8 b/runit/svwaitdown.8 new file mode 100644 index 0000000..9d78ed1 --- /dev/null +++ b/runit/svwaitdown.8 @@ -0,0 +1,119 @@ +.TH svwaitdown 8 +.SH NAME +svwaitdown \- waits for services controlled by runsv(8) or supervise(8) to be down +.SH SYNOPSIS +.B svwaitdown +[ +.B \-v +] [ +.B \-k +] [ +.B \-t +.I sec +] +.I services +.SH DESCRIPTION +.I services +consists of one or more arguments. Each +.I service +directory must start with a slash. +.P +.B svwaitdown +sends each +.I service +given at the command line the ``down'' command, and waits for it to become +down. +The +.I services +given at the command line must be controlled by +.BR runsv (8), +or +.BR supervise (8). +.P +.B svwaitdown +blocks, limited by a +.IR timeout , +until all +.I services +are down or reports errors. +.SH OPTIONS +.TP +.B \-v +verbose. Print verbose messages to stderr. +.TP +.B \-t \fIsec +Set the timeout for waiting for +.I services +to become down to +.I sec +seconds. +.I sec +must be between 2 and 6000. Default is 600 (10 minutes). +.TP +.B \-k +Kill. If the timeout is reached before all +.I services +are down, tell the +.BR runsv (8) +processes to send the +.I services +a KILL signal. +.TP +.B \-x +Exit. Send each +.I service +the ``exit'' command additionally to the ``down'' command, and wait for the +corresponding +.BR runsv (8) +processes to exit instead for the +.I services +to be down. +This option should only be used by +.BR runit (8) +in stage 3 when +.BR runsvdir (8) +is already stopped. +.SH EXIT CODES +.B svwaitdown +returns 0 as soon as all +.I services +are down. +.P +If a +.I service +is usually controlled by +.B runsv (8) +or +.BR supervise (8), +but no supervisor process is currently running, +.B svwaitdown +treats this +.I service +as if it would be down. +.P +For each +.I service +that causes an error while checking, +.B svwaitdown +increases the exit code by one and exits non zero. The maximum is 100. +.P +.B svwaitdown +returns 111 if the timeout +.I sec +was reached. +.SH SEE ALSO +svwaitdown(8), +runsv(8), +runsvctrl(8), +runsvstat(8), +runsvdir(8), +runsvchdir(8), +runit(8), +runit-init(8), +supervise(8), +svscan(8) +.P + http://smarden.org/runit/ + http://cr.yp.to/daemontools.html +.SH AUTHOR +Gerrit Pape diff --git a/runit/svwaitup.8 b/runit/svwaitup.8 new file mode 100644 index 0000000..476cce1 --- /dev/null +++ b/runit/svwaitup.8 @@ -0,0 +1,104 @@ +.TH svwaitup 8 +.SH NAME +svwaitup \- waits for services controlled by runsv(8) or supervise(8) to be up +.SH SYNOPSIS +.B svwaitup +[ +.B \-v +] +[ +.B \-s +.I sec +] +.I services +.SH DESCRIPTION +.I services +consist of one or more arguments. Each +.I service +directory must start with a slash. +.P +.B svwaitup +checks each +.I service +given at the command line for being at least the specified number of seconds +.I sec +up. The +.I services +given at the command line must be controlled by +.BR runsv (8), +or +.BR supervise (8). +.P +.B svwaitup +blocks until all +.I services +were up and running at least +.I sec +seconds when +.B svwaitup +was checking or reports errors. +.SH OPTIONS +.TP +.B \-v +verbose. Print verbose messages to stderr. +.TP +.B \-s \fIsec +Set the minimum number of seconds each +.I service +has to be up to +.I sec +seconds. +.I sec +must be between 2 and 600. Default is 2. +.SH EXIT CODES +.B svwaitup +returns 0 as soon as all +.I services +were at least +.I sec +seconds up. +.P +.BR Note : +If +.B svwaitup +exits 0, it does not guarantee that all +.I services +are actually running. A +.I service +could have crashed immediatly after +.B svwaitup +was successfully checking it to be up +.I sec +seconds. +.I services +should be designed not to rely on +.B svwaitup +to resolve dependencies. +.P +For each +.I service +that is down and not requested to become up, or that causes an error while +checking (e.g. +.BR runsv (8) +is not running), +.B svwaitup +increases the exit code by one and exits non zero. The maximum is 100. +.P +.B svwaitup +returns 111 on error. +.SH SEE ALSO +svwaitdown(8), +runsv(8), +runsvctrl(8), +runsvstat(8), +runsvdir(8), +runsvchdir(8), +runit(8), +runit-init(8), +supervise(8), +svscan(8) +.P + http://smarden.org/runit/ + http://cr.yp.to/daemontools.html +.SH AUTHOR +Gerrit Pape diff --git a/slapt-get/README b/slapt-get/README new file mode 100644 index 0000000..9c740c3 --- /dev/null +++ b/slapt-get/README @@ -0,0 +1,6 @@ +slapt-get is unofficial package manager maintained by Jason Woodward. + + +slapt-get tries to behave similar to Debian's apt-get, so it supports +different metadata including slack-required, slack-conflicts, slack-suggests +if package supplies it. diff --git a/slapt-get/doinst.sh b/slapt-get/doinst.sh new file mode 100644 index 0000000..b9f8cfa --- /dev/null +++ b/slapt-get/doinst.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +config() { + NEW="$1" + OLD="`dirname $NEW`/`basename $NEW .new`" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config /etc/slapt-get/slapt-getrc.new diff --git a/slapt-get/slack-desc b/slapt-get/slack-desc new file mode 100644 index 0000000..0e523a1 --- /dev/null +++ b/slapt-get/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler----------------------------------------------------| +slapt-get: Slapt-Get (Slackware APT Like System) +slapt-get: +slapt-get: Slapt-Get is an APT like system for Slackware package management +slapt-get: It allows one to search Slackware mirrors and third party sources +slapt-get: for packages, compare them with installed packages, install new +slapt-get: packages, or upgrade all installed packages. slapt-get is great for +slapt-get: scripting as well. +slapt-get: +slapt-get: +slapt-get: +slapt-get: diff --git a/slapt-get/slack-required b/slapt-get/slack-required new file mode 100644 index 0000000..81e6ad8 --- /dev/null +++ b/slapt-get/slack-required @@ -0,0 +1,22 @@ +aaa_libraries|aaa_elflibs|curl +aaa_libraries|aaa_elflibs|keyutils +aaa_libraries|aaa_elflibs|krb5 +aaa_libraries|aaa_elflibs|libidn2 +aaa_libraries|aaa_elflibs|libnsl +aaa_libraries|aaa_elflibs|libpsl +aaa_libraries|aaa_elflibs|libssh2 +aaa_libraries|aaa_elflibs|openldap +aaa_libraries|aaa_elflibs|zlib +aaa_libraries|aaa_elflibs|zstd +brotli +cyrus-sasl +e2fsprogs +gnupg2 +gpgme +libassuan +libgpg-error +libtirpc +libunistring +nghttp2 +openssl|openssl-solibs +pkgtools diff --git a/slapt-get/slapt-get.SlackBuild b/slapt-get/slapt-get.SlackBuild new file mode 100755 index 0000000..3d21da5 --- /dev/null +++ b/slapt-get/slapt-get.SlackBuild @@ -0,0 +1,93 @@ +#!/bin/sh + +# Slackware build script for slapt-get + +# Copyright 2021 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=slapt-get +VERSION=${VERSION:-0.11.10} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD="$(pwd)" +TMP="${TMP:-/tmp/EXs}" +PKG="$TMP/package-$PRGNAM" +OUTPUT="${OUTPUT:-/tmp}" + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf "$PKG" +mkdir -p "$TMP" "$PKG" "$OUTPUT" +cd "$TMP" +rm -rf "$PRGNAM-$VERSION" +tar xf "$CWD/$PRGNAM-$VERSION.tar.gz" +cd "$PRGNAM-$VERSION" +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \+ + +export CFLAGS="-g $SLKFLAGS -flto -rdynamic" +export LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" +meson setup build --prefix=/usr --sysconfdir=/etc --mandir=/usr/man --buildtype=debugoptimized +meson compile -C build +DESTDIR="$PKG" meson install -C build + +find "$PKG" -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +rm -f "$PKG/etc/slapt-get/slapt-getrc" +install -Dpm 0644 "$CWD/slapt-getrc.$ARCH" "$PKG/etc/slapt-get/slapt-getrc.new" +install -Dpm 0644 "$CWD/$PRGNAM.SlackBuild" "$PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild" +install -Dpm 0644 "$CWD/slack-desc" "$PKG/install/slack-desc" +install -Dpm 0644 slack-required "$PKG/install/slack-required" + +cd "$PKG" + +/sbin/makepkg -l y -c n "$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}" diff --git a/slapt-get/slapt-get.info b/slapt-get/slapt-get.info new file mode 100644 index 0000000..e57e48e --- /dev/null +++ b/slapt-get/slapt-get.info @@ -0,0 +1,10 @@ +PRGNAM="slapt-get" +VERSION="0.11.10" +HOMEPAGE="https://software.jaos.org/#slapt-get" +DOWNLOAD="https://github.com/jaos/slapt-get/archive/refs/tags/0.11.10/slapt-get-0.11.10.tar.gz" +MD5SUM="1efb00fe26f36736d082ab71940a6e26" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/slapt-get/slapt-getrc.arm b/slapt-get/slapt-getrc.arm new file mode 100644 index 0000000..bcec250 --- /dev/null +++ b/slapt-get/slapt-getrc.arm @@ -0,0 +1,27 @@ +# Working directory for local storage/cache. +WORKINGDIR=/var/slapt-get + +# Exclude package names and expressions. +# To exclude pre and beta packages, add this to the exclude: +# [0-9\_\.\-]{1}pre[0-9\-\.\-]{1} +EXCLUDE=^aaa_elflibs,^devs,^glibc-.*,^kernel-.*,^udev,.*-[0-9]+dl$,i[3456]86 + +# Packages on a CD/DVD. +# SOURCE=file:///mnt/cdrom/:OFFICIAL + + +# Base url to directory with a PACKAGES.TXT. +# This can point to any release, ie: 9.0, 10.0, current, etc. +# Slackware64 mirrors to choose from. +# Please use one of these in preference to ftp.slackware.com +# http://mirrors.slackware.com/mirrorlist/ +SOURCE=http://ftp.arm.slackware.com/slackwarearm/slackwarearm-14.2/:OFFICIAL + +# Sources for the testing, extra, and pasture areas - if you use them. +# SOURCE=http://ftp.arm.slackware.com/slackwarearm/slackwarearm-14.2/extra/:PREFERRED +# SOURCE=http://ftp.arm.slackware.com/slackwarearm/slackwarearm-14.2/testing/ +# SOURCE=http://ftp.arm.slackware.com/slackwarearm/slackwarearm-14.2/pasture/ + + +# Home made packages. +# SOURCE=file:///var/www/packages/:CUSTOM diff --git a/slapt-get/slapt-getrc.i586 b/slapt-get/slapt-getrc.i586 new file mode 100644 index 0000000..703d8f5 --- /dev/null +++ b/slapt-get/slapt-getrc.i586 @@ -0,0 +1,27 @@ +# Working directory for local storage/cache. +WORKINGDIR=/var/slapt-get + +# Exclude package names and expressions. +# To exclude pre and beta packages, add this to the exclude: +# [0-9\_\.\-]{1}pre[0-9\-\.\-]{1} +EXCLUDE=^aaa_elflibs,^devs,^glibc-.*,^kernel-.*,^udev,.*-[0-9]+dl$,i[3456]86 + +# Packages on a CD/DVD. +# SOURCE=file:///mnt/cdrom/:OFFICIAL + + +# Base url to directory with a PACKAGES.TXT. +# This can point to any release, ie: 9.0, 10.0, current, etc. +# Slackware64 mirrors to choose from. +# Please use one of these in preference to ftp.slackware.com +# http://mirrors.slackware.com/mirrorlist/ +SOURCE=http://ftp.slackware.com/pub/slackware/slackware-15.0/:OFFICIAL + +# Sources for the testing, extra, and pasture areas - if you use them. +# SOURCE=ftp://ftp.slackware.com/pub/slackware/slackware-15.0/extra/:PREFERRED +# SOURCE=ftp://ftp.slackware.com/pub/slackware/slackware-15.0/testing/ +# SOURCE=ftp://ftp.slackware.com/pub/slackware/slackware-15.0/pasture/ + + +# Home made packages. +# SOURCE=file:///var/www/packages/:CUSTOM diff --git a/slapt-get/slapt-getrc.x86_64 b/slapt-get/slapt-getrc.x86_64 new file mode 100644 index 0000000..88deb81 --- /dev/null +++ b/slapt-get/slapt-getrc.x86_64 @@ -0,0 +1,27 @@ +# Working directory for local storage/cache. +WORKINGDIR=/var/slapt-get + +# Exclude package names and expressions. +# To exclude pre and beta packages, add this to the exclude: +# [0-9\_\.\-]{1}pre[0-9\-\.\-]{1} +EXCLUDE=^aaa_elflibs,^devs,^glibc-.*,^kernel-.*,^udev,.*-[0-9]+dl$,i[3456]86 + +# Packages on a CD/DVD. +# SOURCE=file:///mnt/cdrom/:OFFICIAL + + +# Base url to directory with a PACKAGES.TXT. +# This can point to any release, ie: 9.0, 10.0, current, etc. +# Slackware64 mirrors to choose from. +# Please use one of these in preference to ftp.slackware.com +# http://mirrors.slackware.com/mirrorlist/ +SOURCE=http://ftp.slackware.com/pub/slackware/slackware64-15.0/:OFFICIAL + +# Sources for the testing, extra, and pasture areas - if you use them. +# SOURCE=ftp://ftp.slackware.com/pub/slackware/slackware64-15.0/extra/:PREFERRED +# SOURCE=ftp://ftp.slackware.com/pub/slackware/slackware64-15.0/testing/ +# SOURCE=ftp://ftp.slackware.com/pub/slackware/slackware64-15.0/pasture/ + + +# Home made packages. +# SOURCE=file:///var/www/packages/:CUSTOM diff --git a/slim/README b/slim/README new file mode 100644 index 0000000..5f189bc --- /dev/null +++ b/slim/README @@ -0,0 +1,10 @@ +SLiM is a lightweight login manager based on GNUstep's Login.app. It +makes a great replacement for XDM for those who want something that +looks good, but still do not want Gnome or KDE. + +Included is a custom Slackware theme that goes nicely with the lilo boot +theme. Regardless of whether you would like to use the custom theme, you +should see README.SLACKWARE for configuration hints (this file is also +installed into the package's documentation directory). + +When at the login screen, select the login session cycling with F1. diff --git a/slim/README.SLACKWARE b/slim/README.SLACKWARE new file mode 100644 index 0000000..81d62b6 --- /dev/null +++ b/slim/README.SLACKWARE @@ -0,0 +1,16 @@ +README.SLACKWARE for SLiM + +If you would like to use SLiM as the login manager in runlevel 4, add the +following lines to /etc/rc.d/rc.4 just above the section that tries to +start gdm: + + # Try to use SLiM login manager. This comes first, because if SLiM is + # installed, then the user probably wants to use it by default: + if [ -x /usr/bin/slim ]; then + exec /usr/bin/slim + fi + +Frank Caraballo took the time to create a custom Slackware theme which goes +nicely with the lilo boot theme. If you would like to use Frank's theme, you +will need to edit /etc/slim.conf and change the 'current_theme' directive from +'default' to 'slackware-black'. diff --git a/slim/doinst.sh b/slim/doinst.sh new file mode 100644 index 0000000..f502caf --- /dev/null +++ b/slim/doinst.sh @@ -0,0 +1,16 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +config etc/slim.conf.new +config etc/logrotate.d/slim.new + diff --git a/slim/files/Xsession b/slim/files/Xsession new file mode 100644 index 0000000..237fb36 --- /dev/null +++ b/slim/files/Xsession @@ -0,0 +1,158 @@ +#!/bin/sh +# +# Slim login manager Xsession script +# + +command="$@" + +# this will go into slim.log along with all other echo's +# good for debugging where things go wrong +echo "$0: Beginning session setup..." + +# First read /etc/profile and .profile +test -f /etc/profile && . /etc/profile +test -f "$HOME/.profile" && . "$HOME/.profile" +# Second read /etc/xprofile and .xprofile for X specific setup +test -f /etc/xprofile && . /etc/xprofile +test -f "$HOME/.xprofile" && . "$HOME/.xprofile" + +# wrap possible arguments to determine whether to treat special or not +if [ "x$command" = "xcustom" ] || [ "x$command" = "xCustom" ] || [ "x$command" = "xdefault" ] || [ "x$command" = "xDefault" ]; then + command="Xsession" +fi +if [ "x$command" = "x" ]; then + # no default specified, check if Xsession will complete + # and if not then assign XSESSION to command + if [ -x "$HOME/.xsession" ] || [ -x "$HOME/.Xclients" ] || [ -x /etc/X11/xinit/Xclients ] || [ -x /etc/X11/Xclients ]; then + command="Xsession" + else + command=$XSESSION + fi +fi + +# most of this is from /etc/X11/chooser.sh +sessionscript="" +if [ -n "${command}" ]; then + # find a match for $command in /etc/X11/Sessions + for x in /etc/X11/Sessions/* ; do + if [ "`echo ${x##*/} | awk '{ print toupper($1) }'`" = "`echo ${command} | awk '{ print toupper($1) }'`" ]; then + sessionscript=${x} + break + fi + done + if [ -n "${sessionscript}" ]; then + if [ -x "${sessionscript}" ]; then + command="${sessionscript}" + else + command="/bin/sh ${sessionscript}" + fi + else + + # find an executable for $command + x="" + y="" + + for x in "${command}" "`echo ${command} | awk '{ print toupper($1) }'`" "`echo ${command} | awk '{ print tolower($1) }'`" + do + # Fall through ... + if [ -x "`which ${x} 2>/dev/null`" ]; then + y="`which ${x} 2>/dev/null`" + break + fi + done + # note , if the command could not be found then $command will be empty + command="$y" + unset x + unset y + fi +fi + +# call xrdb and xmodmap and such, since $command is not a session script +if [ -z "${sessionscript}" ]; then + userresources="$HOME/.Xresources" + usermodmap="$HOME/.Xmodmap" + userxkbmap="$HOME/.Xkbmap" + + sysresources=/etc/X11/Xresources + sysmodmap=/etc/X11/Xmodmap + sysxkbmap=/etc/X11/Xkbmap + + rh6sysresources=/etc/X11/xinit/Xresources + rh6sysmodmap=/etc/X11/xinit/Xmodmap + + # merge in defaults + if [ -f "$rh6sysresources" ]; then + xrdb -merge "$rh6sysresources" + fi + + if [ -f "$sysresources" ]; then + xrdb -merge "$sysresources" + fi + + if [ -f "$userresources" ]; then + xrdb -merge "$userresources" + fi + + # merge in keymaps + if [ -f "$sysxkbmap" ]; then + setxkbmap `cat "$sysxkbmap"` + XKB_IN_USE=yes + fi + + if [ -f "$userxkbmap" ]; then + setxkbmap `cat "$userxkbmap"` + XKB_IN_USE=yes + fi + + # + # Eeek, this seems like too much magic here + # + if [ -z "$XKB_IN_USE" -a ! -L /etc/X11/X ]; then + if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then + xkbsymbols=`sed -n -e 's/^[ ]*XkbSymbols[ ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config` + if [ -n "$xkbsymbols" ]; then + setxkbmap -symbols "$xkbsymbols" + XKB_IN_USE=yes + fi + fi + fi + + # xkb and xmodmap don't play nice together + if [ -z "$XKB_IN_USE" ]; then + if [ -f "$rh6sysmodmap" ]; then + xmodmap "$rh6sysmodmap" + fi + + if [ -f "$sysmodmap" ]; then + xmodmap "$sysmodmap" + fi + + if [ -f "$usermodmap" ]; then + xmodmap "$usermodmap" + fi + fi + + unset XKB_IN_USE +fi +unset sessionscript + +# start failsafe session +if [ -z "${command}" ]; then + echo "$0: Failed to find a command to start the session, so starting a failsafe xterm." + exec xterm -geometry 80x24+0+0 +fi + +# run all system xinitrc shell scripts which will update command +if [ -d /etc/X11/xinit/xinitrc.d ]; then + for i in /etc/X11/xinit/xinitrc.d/* ; do + if [ -x "$i" ]; then + . "$i" + fi + done + unset i +fi + +echo "$0: Setup done, will execute: $command" +exec $command + +# vim:ts=4 diff --git a/slim/files/slim.logrotate b/slim/files/slim.logrotate new file mode 100644 index 0000000..3d237a2 --- /dev/null +++ b/slim/files/slim.logrotate @@ -0,0 +1,9 @@ +/var/log/slim.log { + compress + rotate 4 + size=1M + notifempty + missingok + copytruncate + noolddir +} diff --git a/slim/files/slim.pam b/slim/files/slim.pam new file mode 100644 index 0000000..1ab7fb0 --- /dev/null +++ b/slim/files/slim.pam @@ -0,0 +1,7 @@ +#%PAM-1.0 + +auth include system-local-login +-auth optional pam_gnome_keyring.so +account include system-local-login +session include system-local-login +-session optional pam_gnome_keyring.so auto_start diff --git a/slim/files/slimlock.pam b/slim/files/slimlock.pam new file mode 100644 index 0000000..660b510 --- /dev/null +++ b/slim/files/slimlock.pam @@ -0,0 +1,3 @@ +#%PAM-1.0 + +auth include system-local-login diff --git a/slim/patches/slim-1.3.6-config.diff b/slim/patches/slim-1.3.6-config.diff new file mode 100644 index 0000000..466590c --- /dev/null +++ b/slim/patches/slim-1.3.6-config.diff @@ -0,0 +1,60 @@ +diff -Naur slim-1.3.6.orig/slim.conf slim-1.3.6/slim.conf +--- slim-1.3.6.orig/slim.conf 2013-10-02 00:38:05.000000000 +0200 ++++ slim-1.3.6/slim.conf 2021-09-22 19:23:30.484086604 +0200 +@@ -9,6 +9,8 @@ + reboot_cmd /sbin/shutdown -r now + console_cmd /usr/bin/xterm -C -fg white -bg black +sb -T "Console login" -e /bin/sh -c "/bin/cat /etc/issue; exec /bin/login" + #suspend_cmd /usr/sbin/suspend ++## slackware suspend command ++suspend_cmd /usr/sbin/pm-suspend + + # Full path to the xauth binary + xauth_path /usr/bin/xauth +@@ -33,7 +35,8 @@ + # to adjust the command according to your preferred shell, + # i.e. for freebsd use: + # login_cmd exec /bin/sh - ~/.xinitrc %session +-login_cmd exec /bin/bash -login ~/.xinitrc %session ++# login_cmd exec /bin/bash -login ~/.xinitrc %session ++login_cmd exec /bin/bash -login /usr/share/slim/Xsession %session + + # Commands executed when starting and exiting a session. + # They can be used for registering a X11 session with +@@ -41,17 +44,25 @@ + # + # sessionstart_cmd some command + # sessionstop_cmd some command ++sessionstart_cmd /usr/bin/sessreg -a -l :0.0 %user ++sessionstop_cmd /usr/bin/sessreg -d -l :0.0 %user + + # Start in daemon mode. Valid values: yes | no + # Note that this can be overriden by the command line + # options "-d" and "-nodaemon" + # daemon yes + +-# Available sessions (first one is the default). +-# The current chosen session name is replaced in the login_cmd ++# Available sessions: ++# The current chosen session name replaces %session in the login_cmd + # above, so your login command can handle different sessions. ++# If no session is chosen (via F1), %session will be an empty string. + # see the xinitrc.sample file shipped with slim sources +-sessions xfce4,icewm-session,wmaker,blackbox ++#sessions xfce4,icewm-session,wmaker,blackbox ++# Alternatively, read available sessions from a directory of scripts: ++#sessiondir /etc/X11/Sessions ++# Or, read available sessions from the xsessions desktop files -- ++# note that this may provide a full path to the session executable! ++sessiondir /usr/share/xsessions + + # Executed when pressing F11 (requires imagemagick) + screenshot_cmd import -window root /slim.png +@@ -84,7 +95,7 @@ + current_theme default + + # Lock file +-lockfile /var/run/slim.lock ++lockfile /run/slim.lock + + # Log file + logfile /var/log/slim.log diff --git a/slim/patches/slim-1.3.6-envcpy-bad-pointer-arithmetic.patch b/slim/patches/slim-1.3.6-envcpy-bad-pointer-arithmetic.patch new file mode 100644 index 0000000..b3787dd --- /dev/null +++ b/slim/patches/slim-1.3.6-envcpy-bad-pointer-arithmetic.patch @@ -0,0 +1,15 @@ +--- a/app.cpp 2015-09-14 12:00:00.460481656 -0400 ++++ b/app.cpp 2015-09-14 14:41:10.970536588 -0400 +@@ -606,9 +606,9 @@ + + n++; + +- child_env = static_cast(malloc(sizeof(char*)*n)); +- memcpy(child_env, old_env, sizeof(char*)*n+1); +- child_env[n - 1] = StrConcat("XDG_SESSION_COOKIE=", ck.get_xdg_session_cookie()); ++ child_env = static_cast(malloc(sizeof(char*)*(n+1))); ++ memcpy(child_env, old_env, sizeof(char*)*n); ++ child_env[n-1] = StrConcat("XDG_SESSION_COOKIE=", ck.get_xdg_session_cookie()); + child_env[n] = NULL; + } + # endif /* USE_CONSOLEKIT */ diff --git a/slim/patches/slim-1.3.6-gcc11.patch b/slim/patches/slim-1.3.6-gcc11.patch new file mode 100644 index 0000000..a6b07c6 --- /dev/null +++ b/slim/patches/slim-1.3.6-gcc11.patch @@ -0,0 +1,12 @@ +https://bugs.gentoo.org/786498 +--- a/panel.cpp ++++ b/panel.cpp +@@ -48,7 +48,7 @@ + gcm = GCGraphicsExposures; + gcv.graphics_exposures = False; + WinGC = XCreateGC(Dpy, Win, gcm, &gcv); +- if (WinGC < 0) { ++ if (WinGC == 0) { + cerr << APPNAME + << ": failed to create pixmap\n."; + exit(ERR_EXIT); diff --git a/slim/patches/slim-1.3.6-honour-cflags.patch b/slim/patches/slim-1.3.6-honour-cflags.patch new file mode 100644 index 0000000..2a43be7 --- /dev/null +++ b/slim/patches/slim-1.3.6-honour-cflags.patch @@ -0,0 +1,14 @@ +--- a/CMakeLists.txt 2013-10-01 18:38:05.000000000 -0400 ++++ b/CMakeLists.txt.new 2013-10-15 11:33:18.975741094 -0400 +@@ -42,11 +42,6 @@ + set(SLIM_DEFINITIONS ${SLIM_DEFINITIONS} "-DPKGDATADIR=\"${PKGDATADIR}\"") + set(SLIM_DEFINITIONS ${SLIM_DEFINITIONS} "-DSYSCONFDIR=\"${SYSCONFDIR}\"") + +-# Flags +-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -g -O2") +-set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} -Wall -g -O2") +-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -O2") +- + # source + set(slim_srcs + main.cpp diff --git a/slim/patches/slim-1.3.6-libslim-cmake-fixes.patch b/slim/patches/slim-1.3.6-libslim-cmake-fixes.patch new file mode 100644 index 0000000..ecd4039 --- /dev/null +++ b/slim/patches/slim-1.3.6-libslim-cmake-fixes.patch @@ -0,0 +1,33 @@ +--- a/CMakeLists.txt 2013-10-15 11:35:16.688739802 -0400 ++++ b/CMakeLists.txt 2013-10-15 11:53:46.185727620 -0400 +@@ -115,6 +115,7 @@ + message("\tPAM Found") + set(SLIM_DEFINITIONS ${SLIM_DEFINITIONS} "-DUSE_PAM") + target_link_libraries(${PROJECT_NAME} ${PAM_LIBRARY}) ++ target_link_libraries(libslim ${PAM_LIBRARY}) + target_link_libraries(slimlock ${PAM_LIBRARY}) + include_directories(${PAM_INCLUDE_DIR}) + else(PAM_FOUND) +@@ -173,7 +174,10 @@ + ) + + target_link_libraries(libslim +- ${JPEG_LIBRARIES} ++ ${RT_LIB} ++ ${X11_Xft_LIB} ++ ${X11_Xrandr_LIB} ++ ${JPEG_LIBRARIES} + ${PNG_LIBRARIES} + ) + +@@ -228,8 +228,8 @@ + SOVERSION ${SLIM_VERSION}) + + install(TARGETS libslim +- LIBRARY DESTINATION lib +- ARCHIVE DESTINATION lib ++ LIBRARY DESTINATION lib${LIB_SUFFIX} ++ ARCHIVE DESTINATION lib${LIB_SUFFIX} + ) + endif (BUILD_SHARED_LIBS) + diff --git a/slim/patches/slim-1.3.6-session-chooser.patch b/slim/patches/slim-1.3.6-session-chooser.patch new file mode 100644 index 0000000..b43c9a3 --- /dev/null +++ b/slim/patches/slim-1.3.6-session-chooser.patch @@ -0,0 +1,115 @@ +--- a/cfg.cpp 2013-10-01 18:38:05.000000000 -0400 ++++ b/cfg.cpp 2013-10-24 12:12:20.584103253 -0400 +@@ -274,14 +274,14 @@ + while (true) { + string::const_iterator begin = s; + while (*s != c && s != str.end()) { ++s; } +- tmp = string(begin, s); +- if (useEmpty || tmp.size() > 0) ++ tmp = string(begin, s); ++ if (useEmpty || tmp.size() > 0) + v.push_back(tmp); + if (s == str.end()) { + break; + } + if (++s == str.end()) { +- if (useEmpty) ++ if (useEmpty) + v.push_back(""); + break; + } +@@ -289,6 +289,7 @@ + } + + void Cfg::fillSessionList(){ ++ string strSessionList = getOption("sessions"); + string strSessionDir = getOption("sessiondir"); + + sessions.clear(); +@@ -307,29 +308,29 @@ + struct stat oFileStat; + + if (stat(strFile.c_str(), &oFileStat) == 0) { +- if (S_ISREG(oFileStat.st_mode) && +- access(strFile.c_str(), R_OK) == 0){ +- ifstream desktop_file( strFile.c_str() ); +- if (desktop_file){ +- string line, session_name = "", session_exec = ""; +- while (getline( desktop_file, line )) { +- if (line.substr(0, 5) == "Name=") { +- session_name = line.substr(5); +- if (!session_exec.empty()) +- break; +- } else +- if (line.substr(0, 5) == "Exec=") { +- session_exec = line.substr(5); +- if (!session_name.empty()) +- break; +- } +- } +- desktop_file.close(); +- pair session(session_name,session_exec); +- sessions.push_back(session); +- cout << session_exec << " - " << session_name << endl; +- } +- ++ if (S_ISREG(oFileStat.st_mode) && ++ access(strFile.c_str(), R_OK) == 0){ ++ ifstream desktop_file( strFile.c_str() ); ++ if (desktop_file){ ++ string line, session_name = "", session_exec = ""; ++ while (getline( desktop_file, line )) { ++ if (line.substr(0, 5) == "Name=") { ++ session_name = line.substr(5); ++ if (!session_exec.empty()) break; ++ } else if (line.substr(0, 5) == "Exec=") { ++ session_exec = line.substr(5); ++ if (!session_name.empty()) break; ++ } ++ } ++ desktop_file.close(); ++ if (!session_name.empty() && !session_exec.empty()) { ++ pair session(session_name,session_exec); ++ sessions.push_back(session); ++ } else if (access(strFile.c_str(), X_OK) == 0) { ++ pair session(string(pDirent->d_name),strFile); ++ sessions.push_back(session); ++ } ++ } + } + } + } +@@ -338,8 +339,18 @@ + } + + if (sessions.empty()){ +- pair session("",""); +- sessions.push_back(session); ++ if (strSessionList.empty()) { ++ pair session("",""); ++ sessions.push_back(session); ++ } else { ++ // iterate through the split of the session list ++ vector sessit; ++ split(sessit,strSessionList,',',false); ++ for (vector::iterator it = sessit.begin(); it != sessit.end(); ++it) { ++ pair session(*it,*it); ++ sessions.push_back(session); ++ } ++ } + } + } + +--- a/app.cpp 2013-10-24 12:16:59.870111072 -0400 ++++ b/app.cpp 2013-10-24 12:29:59.899132910 -0400 +@@ -377,10 +377,6 @@ + LoginPanel->SetName(cfg->getOption("default_user") ); + } + +- if (firstloop) { +- LoginPanel->SwitchSession(); +- } +- + if (!AuthenticateUser(focuspass && firstloop)){ + panelclosed = 0; + firstloop = false; diff --git a/slim/patches/slim-1.3.6_freetype-2.5.1.diff b/slim/patches/slim-1.3.6_freetype-2.5.1.diff new file mode 100644 index 0000000..7f4f48a --- /dev/null +++ b/slim/patches/slim-1.3.6_freetype-2.5.1.diff @@ -0,0 +1,22 @@ +From 98822d549689f09bd454b1cf462aae231931f64d Mon Sep 17 00:00:00 2001 +From: mancha +Date: Sat, 14 Feb 2015 +Subject: Fix compile with FreeType 2.5.1+ + +FREETYPE_INCLUDE_DIR_freetype2 & FREETYPE_INCLUDE_DIR_ft2build +might differ. Include both. + +--- + CMakeLists.txt | 1 + + 1 file changed, 1 insertion(+) + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -171,6 +171,7 @@ include_directories( + ${X11_Xrender_INCLUDE_PATH} + ${X11_Xrandr_INCLUDE_PATH} + ${FREETYPE_INCLUDE_DIR_freetype2} ++ ${FREETYPE_INCLUDE_DIR_ft2build} + ${X11_Xmu_INCLUDE_PATH} + ${ZLIB_INCLUDE_DIR} + ${JPEG_INCLUDE_DIR} diff --git a/slim/slack-desc b/slim/slack-desc new file mode 100644 index 0000000..db14c40 --- /dev/null +++ b/slim/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +slim: slim (graphical login manager similar to xdm/kdm/gdm) +slim: +slim: SLiM is a lightweight login manager based on GNUstep's Login.app. It +slim: makes a great replacement for XDM for those who want something that +slim: looks good, but still do not want Gnome or KDE. +slim: +slim: Homepage: https://sourceforge.net/projects/slim.berlios/ +slim: +slim: +slim: +slim: diff --git a/slim/slim.SlackBuild b/slim/slim.SlackBuild new file mode 100755 index 0000000..37c4014 --- /dev/null +++ b/slim/slim.SlackBuild @@ -0,0 +1,156 @@ +#!/bin/bash + +# Slackware build script for SLiM + +# Copyright 2006 Martin Lefebvre +# Copyright 2007-2009 Frank Caraballo +# Copyright 2010,2013 Niels Horn, Rio de Janeiro, Brazil +# Copyright 2014 Ryan P.C. McQuen | Everett, WA | ryanpcmcquen@member.fsf.org +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. +# +# Maintained by David Spencer + +cd $(dirname $0) ; CWD=$(pwd) + +PRGNAM=slim +VERSION=${VERSION:-1.3.6} +BUILD=${BUILD:-3} +TAG=${TAG:-_EXs} +PKGTYPE=${PKGTYPE:-tgz} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +# Correct the path used for suspend and a few things about sessions +patch -p1 < $CWD/patches/slim-1.3.6-config.diff +# Fix for freetype-2.5.5 headers +patch -p1 < $CWD/patches/slim-1.3.6_freetype-2.5.1.diff +# Fixes for slim libraries +patch -p1 < $CWD/patches/slim-1.3.6-libslim-cmake-fixes.patch +# Honour our FLAGS +patch -p1 < $CWD/patches/slim-1.3.6-honour-cflags.patch +# Fix for the latest gcc +patch -p1 < $CWD/patches/slim-1.3.6-gcc11.patch +# Fix a bug +patch -p1 < $CWD/patches/slim-1.3.6-envcpy-bad-pointer-arithmetic.patch + +# Fix location of man-pages +sed "s/share\/man/man/" -i CMakeLists.txt + +mkdir -p build +cd build + cmake \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLIB_SUFFIX=$LIBDIRSUFFIX \ + -DUSE_PAM=yes \ + -DUSE_CONSOLEKIT=no \ + -DCMAKE_BUILD_TYPE=Release .. + make -j$(nproc) + make install DESTDIR=$PKG +cd .. + +# Don't overwrite existing config file: +mv $PKG/etc/slim.conf $PKG/etc/slim.conf.new + +# Add the slackware-black theme to the package: +tar xvf $CWD/slackware-black.tar.bz2 -C $PKG/usr/share/slim/themes + +# Add a logrotate file +mkdir -p $PKG/etc/logrotate.d +cat $CWD/files/slim.logrotate > $PKG/etc/logrotate.d/slim.new + +# Kill the incorrectly-placed (and useless anyway) systemd stuff +rm -rf $PKG/usr/usr + +# Kill systemd stuff +rm -rf $PKG/lib + +install -m 0644 -D $CWD/files/Xsession $PKG/usr/share/slim/Xsession +install -m 0644 -D $CWD/files/slim.pam $PKG/etc/pam.d/slim/slim.pam +install -m 0644 -D $CWD/files/slimlock.pam $PKG/etc/pam.d/slimlock/slimlock.pam +install -m 0644 -D slimlock.conf $PKG/etc/slimlock.conf + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a ChangeLog COPYING INSTALL README THEMES TODO xinitrc.sample $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +cat $CWD/README.SLACKWARE > $PKG/usr/doc/$PRGNAM-$VERSION/README.SLACKWARE + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE diff --git a/slim/slim.info b/slim/slim.info new file mode 100644 index 0000000..3eebaa3 --- /dev/null +++ b/slim/slim.info @@ -0,0 +1,10 @@ +PRGNAM="slim" +VERSION="1.3.6" +HOMEPAGE="https://sourceforge.net/projects/slim.berlios/" +DOWNLOAD="https://sourceforge.net/projects/slim.berlios/files/slim-1.3.6.tar.gz" +MD5SUM="d40d256394f9ef34cef34d2aa9cb52e6" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/tini/README b/tini/README new file mode 100644 index 0000000..b29f69a --- /dev/null +++ b/tini/README @@ -0,0 +1,15 @@ +Tini is a tiny but valid init for containers. All Tini does is spawn a +single child (Tini is meant to be run in a container), and wait for it +to exit all the while reaping zombies and performing signal forwarding. + +Using Tini has several benefits: + +- It protects you from software that accidentally creates zombie + processes, which can (over time!) starve your entire system for PIDs + (and make it unusable). +- It ensures that the default signal handlers work for the software you + run in your Docker image. For example, with Tini, SIGTERM properly + terminates your process even if you didn't explicitly install a signal + handler for it. +- It does so completely transparently! Docker images that work without + Tini will work with Tini without any changes. diff --git a/tini/slack-desc b/tini/slack-desc new file mode 100644 index 0000000..5628a55 --- /dev/null +++ b/tini/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +tini: tini (a tiny but valid init for containers) +tini: +tini: All Tini does is spawn a single child (Tini is meant to be run in a +tini: container), and wait for it to exit all the while reaping zombies and +tini: performing signal forwarding. +tini: +tini: Homepage: https://github.com/krallin/tini +tini: +tini: +tini: +tini: diff --git a/tini/tini.SlackBuild b/tini/tini.SlackBuild new file mode 100755 index 0000000..590d17c --- /dev/null +++ b/tini/tini.SlackBuild @@ -0,0 +1,103 @@ +#!/bin/sh + +# Slackware build script for tini + +# Copyright 2017-2021 Audrius Kažukauskas +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=tini +GITHASH=${GITHASH:-de40ad0} +VERSION=${VERSION:-0.19.0} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-g -O2 -fPIC -flto -rdynamic" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +# Patch git hash to be displayed in version output. +sed -i "s/@tini_VERSION_GIT@/ - git.${GITHASH}/" src/tiniConfig.h.in + +mkdir -p build +cd build + cmake \ + -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \ + -DCMAKE_EXE_LINKER_FLAGS:STRING="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DPR_SET_CHILD_SUBREAPER=36 \ + -DPR_GET_CHILD_SUBREAPER=37 \ + -DCMAKE_BUILD_TYPE=Release .. + make -j$(nproc) + make install DESTDIR=$PKG +cd .. + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE README.md $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/tini/tini.info b/tini/tini.info new file mode 100644 index 0000000..35c3aa0 --- /dev/null +++ b/tini/tini.info @@ -0,0 +1,10 @@ +PRGNAM="tini" +VERSION="0.19.0" +HOMEPAGE="https://github.com/krallin/tini" +DOWNLOAD="https://github.com/krallin/tini/archive/v0.19.0/tini-0.19.0.tar.gz" +MD5SUM="72935bca9232313409a052833068fb1d" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/tor/README b/tor/README new file mode 100644 index 0000000..149d5c9 --- /dev/null +++ b/tor/README @@ -0,0 +1,37 @@ +Tor is a toolset for a wide range of organizations and people that want +to improve their safety and security on the Internet. Using Tor can help +you anonymize web browsing and publishing, instant messaging, IRC, +SSH, and other applications that use the TCP protocol. Tor also +provides a platform on which software developers can build new +applications with built-in anonymity, safety, and privacy features. + +This script requires a 'tor' user/group to exist before running. +The recommended UID/GID is 220. You can create these like so: + groupadd -g 220 tor + useradd -u 220 -g 220 -c "The Onion Router" -d /dev/null -s /bin/false tor + +You can pass another user/group to the script; this is however, less safe: + TOR_USER=nobody TOR_GROUP=nogroup sh tor.SlackBuild + +The following can be used to start/stop tor automatically: +In file /etc/rc.d/rc.local, add following + if [ -x /etc/rc.d/rc.tor ]; then + /etc/rc.d/rc.tor start + fi + +In /etc/rc.d/rc.local_shutdown, add following + if [ -x /etc/rc.d/rc.tor ]; then + /etc/rc.d/rc.tor stop + fi + +torsocks is an optional dependency. See README.SLACKWARE for more +information. + +optional dependencies: +- zstd for better compression ratios. +- nacl may provide faster performance on 32-bit systems. + +Take a look at README.SLACKWARE for important notes and read also very +carefully the essential hints that tor developers give you + +https://www.torproject.org/download/download-easy.html.en#warning diff --git a/tor/README.SLACKWARE b/tor/README.SLACKWARE new file mode 100644 index 0000000..cc45175 --- /dev/null +++ b/tor/README.SLACKWARE @@ -0,0 +1,18 @@ +The tor-tsocks.conf is no longer distributed or installed. +The tor project recommends that tsocks users use torsocks instead. +As of tor-0.2.1.30-2 and later, rc.tor init script has been updated to get rid +of hardcoded values present inside torctl command script. To successfully use +the newer script be sure to check changes to both /etc/rc.d/rc.tor.new and +/etc/tor/torrc.new as some configurations values are now required and no +longer passed on the command line. The original TorProject.org torrc +configuration is always available as /etc/tor/torrc.sample. + +Since Tor 0.3.4.1-alpha the directory authority subsystem has been +modularized and can be disabled by passing --disable-module-dirauth to the +./configure script. This means that Tor compiled that way cannot run as a +directory authority or bridge authority. + +Starting from Tor 0.4.2.5 this is the default for the tor.SlackBuild. + +Also, since Tor 0.4.2.5 contrib/dist/torctl has been removed by upstream. +Have a look at https://bugs.torproject.org/30550 diff --git a/tor/doinst.sh b/tor/doinst.sh new file mode 100644 index 0000000..06cbc45 --- /dev/null +++ b/tor/doinst.sh @@ -0,0 +1,28 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +preserve_perms etc/rc.d/rc.tor.new +config etc/tor/torrc.new +config etc/logrotate.d/tor.new + diff --git a/tor/logrotate.tor b/tor/logrotate.tor new file mode 100644 index 0000000..31012e8 --- /dev/null +++ b/tor/logrotate.tor @@ -0,0 +1,15 @@ +/var/log/tor/*log { + su nobody nogroup + daily + rotate 5 + compress + delaycompress + missingok + notifempty + create 0644 nobody nogroup + sharedscripts + postrotate + /etc/rc.d/rc.tor reload > /dev/null + endscript +} + diff --git a/tor/rc.tor b/tor/rc.tor new file mode 100644 index 0000000..41b7ac8 --- /dev/null +++ b/tor/rc.tor @@ -0,0 +1,124 @@ +#!/bin/sh +# +# tor - The Onion Router +# +# Startup/shutdown script for Tor. +# +# Written by Marco Bonetti , heavily based on +# contrib/tor.sh, contrib/torctl and Debian init script. + +# Check available file descriptors +if [ -r /proc/sys/fs/file-max ]; then + SYSTEM_MAX=`cat /proc/sys/fs/file-max` + if [ "$SYSTEM_MAX" -gt "80000" ]; then + MAX_FILEDESCRIPTORS=32768 + elif [ "$SYSTEM_MAX" -gt "40000" ]; then + MAX_FILEDESCRIPTORS=16384 + elif [ "$SYSTEM_MAX" -gt "10000" ]; then + MAX_FILEDESCRIPTORS=8192 + else + MAX_FILEDESCRIPTORS=1024 + cat << EOF + +Warning: Your system has very few filedescriptors available in total. + +Maybe you should try raising that by adding 'fs.file-max=100000' to your +/etc/sysctl.conf file. Feel free to pick any number that you deem appropriate. +Then run 'sysctl -p'. See /proc/sys/fs/file-max for the current value, and +file-nr in the same directory for how many of those are used at the moment. + +EOF + fi +else + MAX_FILEDESCRIPTORS=8192 +fi + +tor_start() { + if [ -n "$MAX_FILEDESCRIPTORS" ]; then + echo -n "Raising maximum number of filedescriptors (ulimit -n) to $MAX_FILEDESCRIPTORS" + if ulimit -n "$MAX_FILEDESCRIPTORS" ; then + echo "..." + else + echo ": FAILED." + fi + fi + echo "Starting Tor..." + /usr/bin/install -dm 0755 -o nobody -g nogroup /run/tor || : + /usr/bin/tor +} + +tor_stop() { + echo -n "Stopping Tor..." + PID=`cat /var/run/tor/tor.pid 2>/dev/null` + if [ -z "$PID" ]; then + echo " not running." + exit 0 + fi + if kill -15 $PID; then + echo " stopped." + else + sleep 1 + if kill -9 $PID; then + echo " killed." + else + echo " error!" + exit 1 + fi + fi +} + +tor_reload() { + echo -n "Reloading Tor..." + PID=`cat /run/tor/tor.pid 2>/dev/null` + if [ -z "$PID" ]; then + echo " not running." + exit 0 + fi + if kill -1 $PID; then + echo " reloaded." + else + echo " error!" + exit 1 + fi +} + +tor_status() { + PID=`cat /run/tor/tor.pid 2>/dev/null` + if [ -z "$PID" ]; then + echo "Not running." + exit 1 + elif kill -0 $PID; then + echo "Running." + exit 0 + else + echo "PID file /run/tor/tor.pid present but PID $PID is not running." + exit 1 + fi +} + +case "$1" in + start) + tor_start + ;; + + stop) + tor_stop + ;; + + restart) + tor_stop + sleep 3 + tor_start + ;; + + reload) + tor_reload + ;; + + status) + tor_status + ;; + + *) + echo "Usage: $0 (start|stop|restart|reload|status)" +esac diff --git a/tor/slack-desc b/tor/slack-desc new file mode 100644 index 0000000..caffdc2 --- /dev/null +++ b/tor/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +tor: tor (The second-generation onion router) +tor: +tor: Tor is a toolset for a wide range of organizations and people that +tor: want to improve their safety and security on the Internet. Using Tor +tor: can help you anonymize web browsing and publishing, instant messaging, +tor: IRC, SSH, and other applications that use the TCP protocol. Tor also +tor: provides a platform on which software developers can build new +tor: applications with built-in anonymity, safety, and privacy features. +tor: +tor: https://www.torproject.org/ +tor: diff --git a/tor/slack-required b/tor/slack-required new file mode 100644 index 0000000..8484dc6 --- /dev/null +++ b/tor/slack-required @@ -0,0 +1,2 @@ +libseccomp +zstd diff --git a/tor/tor.SlackBuild b/tor/tor.SlackBuild new file mode 100755 index 0000000..9be5e96 --- /dev/null +++ b/tor/tor.SlackBuild @@ -0,0 +1,119 @@ +#!/bin/sh +# +# Slackware build script for tor +# +# Copyright 2011-2012 Marco Bonetti +# Copyright Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +# Updated by Donald Cooley dfc@warpmail.net +# Updated by Fernando Lopez Jr. fernando.lopezjr@gmail.com +# Updated by Markus Reichelt slackbuilds@mareichelt.de + +PRGNAM=tor +VERSION=${VERSION:-0.4.7.13} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-g3 -O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -eu + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed" \ +./configure \ + --disable-module-dirauth \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --with-tor-user=nobody \ + --with-tor-group=nogroup \ + --enable-zstd \ + --build=$ARCH-slackware-linux + +make -j$(nproc) +make install-strip DESTDIR=$PKG + +# Create/install stuff that makes tor work (better) +mkdir -p $PKG/var/{run,log,lib}/tor +chown nobody:nogroup $PKG/var/{run,log,lib}/tor +chmod 0700 $PKG/var/lib/tor +install -Dpm 0644 $CWD/rc.tor $PKG/etc/rc.d/rc.tor.new +install -Dpm 0644 $CWD/torrc $PKG/etc/tor/torrc.new +install -Dpm 0644 $CWD/logrotate.tor $PKG/etc/logrotate.d/tor.new + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $(find $PKG/usr/man -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/spec +cp -a ChangeLog INSTALL LICENSE README.md ReleaseNotes \ + $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild +cat $CWD/README.SLACKWARE > $PKG/usr/doc/$PRGNAM-$VERSION/README.SLACKWARE + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/tor/tor.info b/tor/tor.info new file mode 100644 index 0000000..5911f03 --- /dev/null +++ b/tor/tor.info @@ -0,0 +1,10 @@ +PRGNAM="tor" +VERSION="0.4.7.13" +HOMEPAGE="https://www.torproject.org/" +DOWNLOAD="https://dist.torproject.org/tor-0.4.7.13.tar.gz" +MD5SUM="ea6d90d25337638392ce9346164af1f2" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/tor/torrc b/tor/torrc new file mode 100644 index 0000000..d1ada46 --- /dev/null +++ b/tor/torrc @@ -0,0 +1,217 @@ +## Configuration file for a typical Tor user +## Last updated 22 September 2015 for Tor 0.2.7.3-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 +## +## This is a custom Slackware torrc. The original Tor Project torrc file is +## still available as /etc/tor/torrc.sample + +## 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 127.0.0.1:9050 # what port to open for local application connections +#SOCKSPort 192.168.0.1:9100 # Bind to this address: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 accept6 FC00::/7 +#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/tor.log +Log notice file /var/log/tor/tor.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 + +## 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 + +## On startup, setuid to this user and setgid to their primary group. +User tor + +## On startup, write our PID to /var/run/tor/tor.pid. +## On clean shutdown, remove /var/run/tor/tor.pid. +PidFile /var/run/tor/tor.pid + +## 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. +## Nicknames must be between 1 and 19 characters inclusive, and must +## contain only the characters [a-zA-Z0-9]. +#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 75 kilobytes per second. +## 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 KBytes # Throttle traffic to 100KB/s (800Kbps) +#RelayBandwidthBurst 200 KBytes # But allow bursts up to 200KB (1600Kb) + +## 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 "40 GB" may allow up to 80 GB total before +## hibernating. +## +## Set a maximum of 40 gigabytes each way per period. +#AccountingMax 40 GBytes +## 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 + +## Administrative contact information for this relay or bridge. This line +## can be used to contact you if your relay or bridge is misconfigured or +## something else goes wrong. Note that we archive and publish all +## descriptors containing these lines and that Google indexes them, so +## spammers might also collect them. You may want to obscure the fact that +## it's an email address and/or generate a new address for this purpose. +#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 potentially 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 allow the same ports on IPv4 and IPv6, write your rules +## using accept/reject *. If you want to allow different ports on IPv4 and +## IPv6, write your IPv6 rules using accept6/reject6 *6, and your IPv4 rules +## using accept/reject *4. +## +## 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 the configured primary public IPv4 and IPv6 addresses, +## and any public IPv4 and IPv6 addresses on any interface on the relay. +## See the man page entry for ExitPolicyRejectPrivate if you want to allow +## "exit enclaving". +## +#ExitPolicy accept *:6660-6667,reject *:* # allow irc ports on IPv4 and IPv6 but no more +#ExitPolicy accept *:119 # accept nntp ports on IPv4 and IPv6 as well as default exit policy +#ExitPolicy accept *4:119 # accept nntp ports on IPv4 only as well as default exit policy +#ExitPolicy accept6 *6:119 # accept nntp ports on IPv6 only 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/unbound/README b/unbound/README new file mode 100644 index 0000000..96200ae --- /dev/null +++ b/unbound/README @@ -0,0 +1,21 @@ +Unbound is a validating, recursive, and caching DNS resolver. +The C implementation of Unbound is developed and maintained by +NLnet Labs. It is based on ideas and algorithms taken from a java +prototype developed by Verisign labs, Nominet, Kirei and ep.net. + +Unbound is designed as a set of modular components, so that also DNSSEC +(secure DNS) validation and stub-resolvers (that do not run as a server, +but are linked into an application) are easily possible. + +A user and group are recommended to run Unbound. The following should +not conflict with anything else on SlackBuilds: + + groupadd -g 304 unbound + useradd -r -u 304 -g unbound -d /etc/unbound/ -s /sbin/nologin -c \ + 'Unbound DNS resolver' unbound + +Optional DNSCrypt support is provided. To enable: + + DNSCRYPT=yes ./unbound.SlackBuild + +This will require libsodium which is available at SlackBuilds diff --git a/unbound/auth-zones.conf b/unbound/auth-zones.conf new file mode 100644 index 0000000..3f305cb --- /dev/null +++ b/unbound/auth-zones.conf @@ -0,0 +1,5 @@ +auth-zone: + name: "localhost" + for-downstream: yes + for-upstream: no + zonefile: "/var/lib/unbound/zones/localhost.zone" diff --git a/unbound/doinst.sh b/unbound/doinst.sh new file mode 100644 index 0000000..97a2669 --- /dev/null +++ b/unbound/doinst.sh @@ -0,0 +1,46 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + if [ -e $OLD ]; then + cp -a $OLD ${NEW}.incoming + cat $NEW > ${NEW}.incoming + mv ${NEW}.incoming $NEW + fi + config $NEW +} + +getent group unbound >/dev/null 2>&1 +if [ $? -ne 0 ]; then + groupadd -g 304 unbound + chown :unbound /var/lib/unbound +fi + +getent passwd unbound >/dev/null 2>&1 +if [ $? -ne 0 ]; then + useradd -r -u 304 -g unbound -d /var/lib/unbound/ -s /sbin/nologin -c 'Unbound DNS resolver' unbound + chown unbound: /var/lib/unbound +fi + +preserve_perms etc/rc.d/rc.unbound.new +config etc/unbound/unbound.conf.new +config var/lib/unbound/unbound.conf.d/forward.conf.new +config var/lib/unbound/unbound.conf.d/forward-default.conf.new +config var/lib/unbound/unbound.conf.d/local-data.conf.new +config var/lib/unbound/unbound.conf.d/stub-zones.conf.new +config var/lib/unbound/unbound.conf.d/auth-zones.conf.new +config var/lib/unbound/zones/localhost.zone.new +config var/lib/unbound/named.root.new +config etc/cron.monthly/unbound.new diff --git a/unbound/localhost.zone b/unbound/localhost.zone new file mode 100644 index 0000000..c47baf5 --- /dev/null +++ b/unbound/localhost.zone @@ -0,0 +1,11 @@ +$TTL 86400 +$ORIGIN localhost. +@ 1D IN SOA @ root ( + 42 ; serial (d. adams) + 3H ; refresh + 15M ; retry + 1W ; expiry + 1D ) ; minimum + + 1D IN NS @ + 1D IN A 127.0.0.1 diff --git a/unbound/named.root b/unbound/named.root new file mode 100644 index 0000000..ba64d70 --- /dev/null +++ b/unbound/named.root @@ -0,0 +1,92 @@ +; This file holds the information on root name servers needed to +; initialize cache of Internet domain name servers +; (e.g. reference this file in the "cache . " +; configuration file of BIND domain name servers). +; +; This file is made available by InterNIC +; under anonymous FTP as +; file /domain/named.cache +; on server FTP.INTERNIC.NET +; -OR- RS.INTERNIC.NET +; +; last update: May 27, 2021 +; related version of root zone: 2021052701 +; +; FORMERLY NS.INTERNIC.NET +; +. 3600000 NS A.ROOT-SERVERS.NET. +A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 +A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:ba3e::2:30 +; +; FORMERLY NS1.ISI.EDU +; +. 3600000 NS B.ROOT-SERVERS.NET. +B.ROOT-SERVERS.NET. 3600000 A 199.9.14.201 +B.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:200::b +; +; FORMERLY C.PSI.NET +; +. 3600000 NS C.ROOT-SERVERS.NET. +C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 +C.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2::c +; +; FORMERLY TERP.UMD.EDU +; +. 3600000 NS D.ROOT-SERVERS.NET. +D.ROOT-SERVERS.NET. 3600000 A 199.7.91.13 +D.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2d::d +; +; FORMERLY NS.NASA.GOV +; +. 3600000 NS E.ROOT-SERVERS.NET. +E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 +E.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:a8::e +; +; FORMERLY NS.ISC.ORG +; +. 3600000 NS F.ROOT-SERVERS.NET. +F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 +F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2f::f +; +; FORMERLY NS.NIC.DDN.MIL +; +. 3600000 NS G.ROOT-SERVERS.NET. +G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 +G.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:12::d0d +; +; FORMERLY AOS.ARL.ARMY.MIL +; +. 3600000 NS H.ROOT-SERVERS.NET. +H.ROOT-SERVERS.NET. 3600000 A 198.97.190.53 +H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::53 +; +; FORMERLY NIC.NORDU.NET +; +. 3600000 NS I.ROOT-SERVERS.NET. +I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 +I.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fe::53 +; +; OPERATED BY VERISIGN, INC. +; +. 3600000 NS J.ROOT-SERVERS.NET. +J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30 +J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:c27::2:30 +; +; OPERATED BY RIPE NCC +; +. 3600000 NS K.ROOT-SERVERS.NET. +K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129 +K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fd::1 +; +; OPERATED BY ICANN +; +. 3600000 NS L.ROOT-SERVERS.NET. +L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42 +L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:9f::42 +; +; OPERATED BY WIDE +; +. 3600000 NS M.ROOT-SERVERS.NET. +M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 +M.ROOT-SERVERS.NET. 3600000 AAAA 2001:dc3::35 +; End of file \ No newline at end of file diff --git a/unbound/rc.unbound b/unbound/rc.unbound new file mode 100644 index 0000000..00e2c90 --- /dev/null +++ b/unbound/rc.unbound @@ -0,0 +1,133 @@ +#!/bin/sh -e +# Start/stop/restart/status unbound. + +PIDFILE=/run/unbound/unbound.pid +VARDIR=/var/lib/unbound +RUNDIR=/run/unbound +DAEMON=/usr/sbin/unbound +USER=unbound +GROUP=unbound +CONFDIR=/etc/unbound +CONFIG=${CONFDIR}/unbound.conf + +# Start unbound: +_start() { + echo "Starting Unbound" + + # dunno dafuq, but let's repeat it as pointed in redhat script + if [ -f ${VARDIR}/root.anchor -a -f ${DAEMON}-anchor ]; then + sudo -u $USER ${DAEMON}-anchor -a ${VARDIR}/root.anchor -c ${CONFDIR}/icannbundle.pem + fi + + # generate new control keys if they're missing + if [ ! -f ${VARDIR}/unbound_control.key ]; then + echo -n "Generating unbound control key and certificate: " + ${DAEMON}-control-setup -d ${VARDIR}/ >/dev/null 2>&1 + chown ${USER}:${GROUP} ${VARDIR}/unbound_*.{key,pem} + echo + fi + + set +o errexit + ${DAEMON}-checkconf $CONFIG >/dev/null 2>&1 + + if [ $? -ne 0 ]; then + set -e + $DAEMON-checkconf $CONFIG + fi + + set -e + + if [ ! -d $RUNDIR ]; then + install -dpm 0750 -o $USER -g $GROUP $RUNDIR + fi + + if [ -f $PIDFILE ]; then + if [ $(stat --printf=%s $PIDFILE) != "0" ]; then + # try to guess if process noted in pidfile still alive + PID=$(cat $PIDFILE) + + # Eh, file contains something -try to guess if its unbound or not + set +o errexit + PROCNAME="$(ps -p ${PID} -o comm= 2>/dev/null)" + set -e + + if [ -z $PROCNAME ]; then + # looks like no such process + echo "Removing stall PID-file found at $PIDFILE" + rm -f $PIDFILE + elif [ $PROCNAME == "unbound" ]; then + echo "Unbound already running" + exit 1 + else + # process exist, but have different name + echo "Removing stall PID-file found at $PIDFILE" + rm -f $PIDFILE + fi + fi + fi + + set +o errexit + ${DAEMON}-control start + + if [ $? -ne 0 ]; then + $DAEMON -c $CONFIG + RET=$? + + if [ $RET -ne 0 ]; then + echo "Something went wrong, unbound unable to start." + exit $RET + fi + fi +} + +# Stop unbound: +_stop() { + echo "Stopping Unbound" + set +o errexit + ${DAEMON}-control stop >/dev/null 2>&1 + RET=$? + set -e + + if [ $RET -ne 0 ]; then + if [ -f $PIDFILE ]; then + if [ $(stat --printf=%s $PIDFILE) != "0" ]; then + kill $(cat $PIDFILE) + + if [ -f $PIDFILE ]; then + rm -rf $PIDFILE + fi + else + echo "Unable to stop unbound" + exit 1 + fi + fi + fi +} + +# Restart unbound: +_restart() { + _stop + sleep 1 + _start +} + +_status() { + ${DAEMON}-control status +} + +case "$1" in +'start') + _start + ;; +'stop') + _stop + ;; +'restart') + _restart + ;; +'status') + _status + ;; +*) + echo "usage $0 start|stop|restart|status" +esac diff --git a/unbound/slack-desc b/unbound/slack-desc new file mode 100644 index 0000000..7265663 --- /dev/null +++ b/unbound/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +unbound: unbound (a validating, recursive, and caching DNSSEC resolver) +unbound: +unbound: Unbound is a validating, recursive, and caching DNS resolver. +unbound: The C implementation of Unbound is developed and maintained by +unbound: NLnet Labs. It is based on ideas and algorithms taken from a java +unbound: prototype developed by Verisign labs, Nominet, Kirei and ep.net. +unbound: +unbound: It is designed as a set of modular components, so that also DNSSEC +unbound: validation and stub-resolvers are easily possible. +unbound: +unbound: Homepage: https://nlnetlabs.nl/projects/unbound/about/ diff --git a/unbound/unbound.SlackBuild b/unbound/unbound.SlackBuild new file mode 100755 index 0000000..107b4b9 --- /dev/null +++ b/unbound/unbound.SlackBuild @@ -0,0 +1,161 @@ +#!/bin/sh + +# Slackware build script for unbound + +# Copyright 2020 Gerardo Zamudio Mexico City, Mexico +# Copyright 2023 Sergei Fedosoff +# +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 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. + +PRGNAM=unbound +VERSION=${VERSION:-1.19.0} +BUILD=${BUILD:-1} +TAG=${TAG:-_EXs} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/EXs} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +UB_USER=${UB_USER:-unbound} +UB_GROUP=${UB_GROUP:-unbound} + +# Check the system user and group for unbound: +if ! grep -q ^"$UB_GROUP": /etc/group ; then + echo " You will need a dedicated group to run unbound" + echo " # groupadd -g 304 $UB_GROUP" + echo " should do the job." + exit 1 +fi + +if ! grep -q ^"$UB_USER": /etc/passwd ; then + echo " You will need a dedicated user to run unbound, something like" + echo " # useradd -r -u 304 -g $UB_GROUP -d /var/lib/unbound/ -s /sbin/nologin -c 'Unbound DNS resolver' $UB_USER" + exit 1 +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xf $CWD/$PRGNAM-$VERSION.tar.gz +cd $PRGNAM-$VERSION +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \+ -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+ + +if [ "${DNSCRYPT:-no}" == "yes" ]; then + DNSCRYPT="--enable-dnscrypt" +else + DNSCRYPT="" +fi + +CFLAGS="-g $SLKCFLAGS -flto -rdynamic" \ +CXXFLAGS="-g $SLKCFLAGS -flto -rdynamic" \ +LDFLAGS="-flto -rdynamic -Wl,--export-dynamic -Wl,-E -Wl,--no-as-needed -Wl,-O2" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PRGNAM-$VERSION \ + --with-libevent \ + --with-ssl \ + --with-username=$UB_USER \ + --with-pidfile=/var/run/unbound/unbound.pid \ + --build=$ARCH-slackware-linux \ + $DNSCRYPT + +make -j$(nproc) +make install DESTDIR=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \+ +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a doc/CREDITS doc/FEATURES doc/LICENSE doc/README* $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/var/run/unbound +chown $USER:$GROUP $PKG/var/run/unbound/ +# replace original config +cat $CWD/unbound.conf >$PKG/etc/unbound/unbound.conf +mv $PKG/etc/unbound/unbound.conf $PKG/etc/unbound/unbound.conf.new + +# additional config bits +# to serve some records from standard bind zone files +install -Dpm 0644 $CWD/auth-zones.conf $PKG/var/lib/unbound/unbound.conf.d/auth-zones.conf.new +# sample zone - localhost, working example +install -Dpm 0644 $CWD/localhost.zone $PKG/var/lib/unbound/zones/localhost.zone.new +# "proxy" query for record to specified servers +touch $PKG/var/lib/unbound/unbound.conf.d/forward.conf.new +# for default upstream if this server acts as caching recursor +touch $PKG/var/lib/unbound/unbound.conf.d/forward-default.conf.new +# to override (or add) some "incorrect" records for domain, but not rewrite whole domain record set +touch $PKG/var/lib/unbound/unbound.conf.d/local-data.conf.new +# to redirect client to another dns for this record query +touch $PKG/var/lib/unbound/unbound.conf.d/stub-zones.conf.new + +# rc-script +install -Dpm 0644 $CWD/rc.unbound $PKG/etc/rc.d/rc.unbound.new + +# sample root hints +install -Dpm 0644 $CWD/named.root $PKG/var/lib/unbound/named.root.new + +# cron job to update root hints, monthly +install -Dpm 0755 $CWD/unbound.cron $PKG/etc/cron.monthly/unbound.new + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +cat $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/unbound/unbound.conf b/unbound/unbound.conf new file mode 100644 index 0000000..f65d68f --- /dev/null +++ b/unbound/unbound.conf @@ -0,0 +1,1151 @@ +# +# Example configuration file. +# +# See unbound.conf(5) man page, version 1.13.1. +# +# this is a comment. + +# Use this anywhere in the file to include other text into this file. +#include: "otherfile.conf" + +# Use this anywhere in the file to include other text, that explicitly starts a +# clause, into this file. Text after this directive needs to start a clause. +#include-toplevel: "otherfile.conf" + +# The server clause sets the main parameters. +server: + # whitespace is not necessary, but looks cleaner. + + # verbosity number, 0 is least verbose. 1 is default. + verbosity: 1 + + # print statistics to the log (for every thread) every N seconds. + # Set to "" or 0 to disable. Default is disabled. + # statistics-interval: 0 + + # enable shm for stats, default no. if you enable also enable + # statistics-interval, every time it also writes stats to the + # shared memory segment keyed with shm-key. + # shm-enable: no + + # shm for stats uses this key, and key+1 for the shared mem segment. + # shm-key: 11777 + + # enable cumulative statistics, without clearing them after printing. + # statistics-cumulative: no + + # enable extended statistics (query types, answer codes, status) + # printed from unbound-control. default off, because of speed. + # extended-statistics: no + + # number of threads to create. 1 disables threading. + # num-threads: 1 + + # specify the interfaces to answer queries from by ip-address. + # The default is to listen to localhost (127.0.0.1 and ::1). + # specify 0.0.0.0 and ::0 to bind to all available interfaces. + # specify every interface[@port] on a new 'interface:' labelled line. + # The listen interfaces are not changed on reload, only on restart. + # interface: 192.0.2.153 + # interface: 192.0.2.154 + # interface: 192.0.2.154@5003 + # interface: 2001:DB8::5 + interface: 127.0.0.1 + + # enable this feature to copy the source address of queries to reply. + # Socket options are not supported on all platforms. experimental. + # interface-automatic: no + + # port to answer queries from + port: 53 + + # specify the interfaces to send outgoing queries to authoritative + # server from by ip-address. If none, the default (all) interface + # is used. Specify every interface on a 'outgoing-interface:' line. + # outgoing-interface: 192.0.2.153 + # outgoing-interface: 2001:DB8::5 + # outgoing-interface: 2001:DB8::6 + + # Specify a netblock to use remainder 64 bits as random bits for + # upstream queries. Uses freebind option (Linux). + # outgoing-interface: 2001:DB8::/64 + # Also (Linux:) ip -6 addr add 2001:db8::/64 dev lo + # And: ip -6 route add local 2001:db8::/64 dev lo + # And set prefer-ip6: yes to use the ip6 randomness from a netblock. + # Set this to yes to prefer ipv6 upstream servers over ipv4. + # prefer-ip6: no + + # Prefer ipv4 upstream servers, even if ipv6 is available. + # prefer-ip4: no + + # number of ports to allocate per thread, determines the size of the + # port range that can be open simultaneously. About double the + # num-queries-per-thread, or, use as many as the OS will allow you. + # outgoing-range: 4096 + + # permit unbound to use this port number or port range for + # making outgoing queries, using an outgoing interface. + # outgoing-port-permit: 32768 + + # deny unbound the use this of port number or port range for + # making outgoing queries, using an outgoing interface. + # Use this to make sure unbound does not grab a UDP port that some + # other server on this computer needs. The default is to avoid + # IANA-assigned port numbers. + # If multiple outgoing-port-permit and outgoing-port-avoid options + # are present, they are processed in order. + # outgoing-port-avoid: "3200-3208" + + # number of outgoing simultaneous tcp buffers to hold per thread. + # outgoing-num-tcp: 10 + + # number of incoming simultaneous tcp buffers to hold per thread. + # incoming-num-tcp: 10 + + # buffer size for UDP port 53 incoming (SO_RCVBUF socket option). + # 0 is system default. Use 4m to catch query spikes for busy servers. + # so-rcvbuf: 0 + + # buffer size for UDP port 53 outgoing (SO_SNDBUF socket option). + # 0 is system default. Use 4m to handle spikes on very busy servers. + # so-sndbuf: 0 + + # use SO_REUSEPORT to distribute queries over threads. + # at extreme load it could be better to turn it off to distribute even. + so-reuseport: yes + + # use IP_TRANSPARENT so the interface: addresses can be non-local + # and you can config non-existing IPs that are going to work later on + # (uses IP_BINDANY on FreeBSD). + ip-transparent: yes + + # use IP_FREEBIND so the interface: addresses can be non-local + # and you can bind to nonexisting IPs and interfaces that are down. + # Linux only. On Linux you also have ip-transparent that is similar. + # ip-freebind: no + + # the value of the Differentiated Services Codepoint (DSCP) + # in the differentiated services field (DS) of the outgoing + # IP packets + # ip-dscp: 0 + + # EDNS reassembly buffer to advertise to UDP peers (the actual buffer + # is set with msg-buffer-size). + # edns-buffer-size: 1232 + + # Maximum UDP response size (not applied to TCP response). + # Suggested values are 512 to 4096. Default is 4096. 65536 disables it. + # max-udp-size: 4096 + + # max memory to use for stream(tcp and tls) waiting result buffers. + # stream-wait-size: 4m + + # buffer size for handling DNS data. No messages larger than this + # size can be sent or received, by UDP or TCP. In bytes. + # msg-buffer-size: 65552 + + # the amount of memory to use for the message cache. + # plain value in bytes or you can append k, m or G. default is "4Mb". + # msg-cache-size: 4m + + # the number of slabs to use for the message cache. + # the number of slabs must be a power of 2. + # more slabs reduce lock contention, but fragment memory usage. + # msg-cache-slabs: 4 + + # the number of queries that a thread gets to service. + # num-queries-per-thread: 1024 + + # if very busy, 50% queries run to completion, 50% get timeout in msec + # jostle-timeout: 200 + + # msec to wait before close of port on timeout UDP. 0 disables. + # delay-close: 0 + + # perform connect for UDP sockets to mitigate ICMP side channel. + # udp-connect: yes + + # msec for waiting for an unknown server to reply. Increase if you + # are behind a slow satellite link, to eg. 1128. + # unknown-server-time-limit: 376 + + # the amount of memory to use for the RRset cache. + # plain value in bytes or you can append k, m or G. default is "4Mb". + # rrset-cache-size: 4m + + # the number of slabs to use for the RRset cache. + # the number of slabs must be a power of 2. + # more slabs reduce lock contention, but fragment memory usage. + # rrset-cache-slabs: 4 + + # the time to live (TTL) value lower bound, in seconds. Default 0. + # If more than an hour could easily give trouble due to stale data. + # cache-min-ttl: 0 + + # the time to live (TTL) value cap for RRsets and messages in the + # cache. Items are not cached for longer. In seconds. + # cache-max-ttl: 86400 + + # the time to live (TTL) value cap for negative responses in the cache + # cache-max-negative-ttl: 3600 + + # the time to live (TTL) value for cached roundtrip times, lameness and + # EDNS version information for hosts. In seconds. + # infra-host-ttl: 900 + + # minimum wait time for responses, increase if uplink is long. In msec. + # infra-cache-min-rtt: 50 + + # enable to make server probe down hosts more frequently. + # infra-keep-probing: no + + # the number of slabs to use for the Infrastructure cache. + # the number of slabs must be a power of 2. + # more slabs reduce lock contention, but fragment memory usage. + # infra-cache-slabs: 4 + + # the maximum number of hosts that are cached (roundtrip, EDNS, lame). + infra-cache-numhosts: 100000 + + # define a number of tags here, use with local-zone, access-control. + # repeat the define-tag statement to add additional tags. + # define-tag: "tag1 tag2 tag3" + + # Enable IPv4, "yes" or "no". + # do-ip4: yes + + # Enable IPv6, "yes" or "no". + # do-ip6: yes + + # Enable UDP, "yes" or "no". + # do-udp: yes + + # Enable TCP, "yes" or "no". + # do-tcp: yes + + # upstream connections use TCP only (and no UDP), "yes" or "no" + # useful for tunneling scenarios, default no. + # tcp-upstream: no + + # upstream connections also use UDP (even if do-udp is no). + # useful if if you want UDP upstream, but don't provide UDP downstream. + # udp-upstream-without-downstream: no + + # Maximum segment size (MSS) of TCP socket on which the server + # responds to queries. Default is 0, system default MSS. + # tcp-mss: 0 + + # Maximum segment size (MSS) of TCP socket for outgoing queries. + # Default is 0, system default MSS. + # outgoing-tcp-mss: 0 + + # Idle TCP timeout, connection closed in milliseconds + # tcp-idle-timeout: 30000 + + # Enable EDNS TCP keepalive option. + # edns-tcp-keepalive: no + + # Timeout for EDNS TCP keepalive, in msec. + # edns-tcp-keepalive-timeout: 120000 + + # Use systemd socket activation for UDP, TCP, and control sockets. + # use-systemd: no + + # Detach from the terminal, run in background, "yes" or "no". + # Set the value to "no" when unbound runs as systemd service. + do-daemonize: yes + + # control which clients are allowed to make (recursive) queries + # to this server. Specify classless netblocks with /size and action. + # By default everything is refused, except for localhost. + # Choose deny (drop message), refuse (polite error reply), + # allow (recursive ok), allow_setrd (recursive ok, rd bit is forced on), + # allow_snoop (recursive and nonrecursive ok) + # deny_non_local (drop queries unless can be answered from local-data) + # refuse_non_local (like deny_non_local but polite error reply). + # access-control: 0.0.0.0/0 refuse + access-control: 127.0.0.0/8 allow_snoop + # access-control: ::0/0 refuse + access-control: ::1 allow_snoop + # access-control: ::ffff:127.0.0.1 allow + + # tag access-control with list of tags (in "" with spaces between) + # Clients using this access control element use localzones that + # are tagged with one of these tags. + # access-control-tag: 192.0.2.0/24 "tag2 tag3" + + # set action for particular tag for given access control element + # if you have multiple tag values, the tag used to lookup the action + # is the first tag match between access-control-tag and local-zone-tag + # where "first" comes from the order of the define-tag values. + # access-control-tag-action: 192.0.2.0/24 tag3 refuse + + # set redirect data for particular tag for access control element + # access-control-tag-data: 192.0.2.0/24 tag2 "A 127.0.0.1" + + # Set view for access control element + # access-control-view: 192.0.2.0/24 viewname + + # if given, a chroot(2) is done to the given directory. + # i.e. you can chroot to the working directory, for example, + # for extra security, but make sure all files are in that directory. + # + # If chroot is enabled, you should pass the configfile (from the + # commandline) as a full path from the original root. After the + # chroot has been performed the now defunct portion of the config + # file path is removed to be able to reread the config after a reload. + # + # All other file paths (working dir, logfile, roothints, and + # key files) can be specified in several ways: + # o as an absolute path relative to the new root. + # o as a relative path to the working directory. + # o as an absolute path relative to the original root. + # In the last case the path is adjusted to remove the unused portion. + # + # The pid file can be absolute and outside of the chroot, it is + # written just prior to performing the chroot and dropping permissions. + # + # Additionally, unbound may need to access /dev/urandom (for entropy). + # How to do this is specific to your OS. + # + # If you give "" no chroot is performed. The path must not end in a /. + chroot: "" + + # if given, user privileges are dropped (after binding port), + # and the given username is assumed. Default is user "unbound". + # If you give "" no privileges are dropped. + username: "unbound" + + # the working directory. The relative files in this config are + # relative to this directory. If you give "" the working directory + # is not changed. + # If you give a server: directory: dir before include: file statements + # then those includes can be relative to the working directory. + directory: "/var/lib/unbound" + + # the log file, "" means log to stderr. + # Use of this option sets use-syslog to "no". + # logfile: "" + + # Log to syslog(3) if yes. The log facility LOG_DAEMON is used to + # log to. If yes, it overrides the logfile. + # use-syslog: yes + + # Log identity to report. if empty, defaults to the name of argv[0] + # (usually "unbound"). + # log-identity: "" + + # print UTC timestamp in ascii to logfile, default is epoch in seconds. + # log-time-ascii: no + + # print one line with time, IP, name, type, class for every query. + # log-queries: no + + # print one line per reply, with time, IP, name, type, class, rcode, + # timetoresolve, fromcache and responsesize. + # log-replies: no + + # log with tag 'query' and 'reply' instead of 'info' for + # filtering log-queries and log-replies from the log. + # log-tag-queryreply: no + + # log the local-zone actions, like local-zone type inform is enabled + # also for the other local zone types. + # log-local-actions: no + + # print log lines that say why queries return SERVFAIL to clients. + # log-servfail: no + + # the pid file. Can be an absolute path outside of chroot/work dir. + pidfile: "/var/run/unbound/unbound.pid" + + # file to read root hints from. + # get one from https://www.internic.net/domain/named.cache + root-hints: "/var/lib/unbound/named.root" + + # enable to not answer id.server and hostname.bind queries. + hide-identity: no + + # enable to not answer version.server and version.bind queries. + hide-version: no + + # enable to not answer trustanchor.unbound queries. + hide-trustanchor: no + + # the identity to report. Leave "" or default to return hostname. + # identity: "" + + # the version to report. Leave "" or default to return package version. + # version: "" + + # NSID identity (hex string, or "ascii_somestring"). default disabled. + nsid: "ascii_slackware" + + # the target fetch policy. + # series of integers describing the policy per dependency depth. + # The number of values in the list determines the maximum dependency + # depth the recursor will pursue before giving up. Each integer means: + # -1 : fetch all targets opportunistically, + # 0: fetch on demand, + # positive value: fetch that many targets opportunistically. + # Enclose the list of numbers between quotes (""). + # target-fetch-policy: "3 2 1 0 0" + + # Harden against very small EDNS buffer sizes. + # harden-short-bufsize: yes + + # Harden against unseemly large queries. + harden-large-queries: no + + # Harden against out of zone rrsets, to avoid spoofing attempts. + harden-glue: yes + + # Harden against receiving dnssec-stripped data. If you turn it + # off, failing to validate dnskey data for a trustanchor will + # trigger insecure mode for that zone (like without a trustanchor). + # Default on, which insists on dnssec data for trust-anchored zones. + # harden-dnssec-stripped: yes + + # Harden against queries that fall under dnssec-signed nxdomain names. + # harden-below-nxdomain: yes + + # Harden the referral path by performing additional queries for + # infrastructure data. Validates the replies (if possible). + # Default off, because the lookups burden the server. Experimental + # implementation of draft-wijngaards-dnsext-resolver-side-mitigation. + harden-referral-path: no + + # Harden against algorithm downgrade when multiple algorithms are + # advertised in the DS record. If no, allows the weakest algorithm + # to validate the zone. + # harden-algo-downgrade: no + + # Sent minimum amount of information to upstream servers to enhance + # privacy. Only sent minimum required labels of the QNAME and set QTYPE + # to A when possible. + qname-minimisation: no + + # QNAME minimisation in strict mode. Do not fall-back to sending full + # QNAME to potentially broken nameservers. A lot of domains will not be + # resolvable when this option in enabled. + # This option only has effect when qname-minimisation is enabled. + # qname-minimisation-strict: no + + # Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN + # and other denials, using information from previous NXDOMAINs answers. + aggressive-nsec: no + + # Use 0x20-encoded random bits in the query to foil spoof attempts. + # This feature is an experimental implementation of draft dns-0x20. + use-caps-for-id: no + + # Domains (and domains in them) without support for dns-0x20 and + # the fallback fails because they keep sending different answers. + # caps-exempt: "licdn.com" + # caps-exempt: "senderbase.org" + + # Enforce privacy of these addresses. Strips them away from answers. + # It may cause DNSSEC validation to additionally mark it as bogus. + # Protects against 'DNS Rebinding' (uses browser as network proxy). + # Only 'private-domain' and 'local-data' names are allowed to have + # these private addresses. No default. + # private-address: 10.0.0.0/8 + # private-address: 172.16.0.0/12 + # private-address: 192.168.0.0/16 + # private-address: 169.254.0.0/16 + # private-address: fd00::/8 + # private-address: fe80::/10 + # private-address: ::ffff:0:0/96 + + # Allow the domain (and its subdomains) to contain private addresses. + # local-data statements are allowed to contain private addresses too. + # private-domain: "example.com" + + # If nonzero, unwanted replies are not only reported in statistics, + # but also a running total is kept per thread. If it reaches the + # threshold, a warning is printed and a defensive action is taken, + # the cache is cleared to flush potential poison out of it. + # A suggested value is 10000000, the default is 0 (turned off). + # unwanted-reply-threshold: 0 + + # Do not query the following addresses. No DNS queries are sent there. + # List one address per entry. List classless netblocks with /size, + # do-not-query-address: 127.0.0.1/8 + # do-not-query-address: ::1 + + # if yes, the above default do-not-query-address entries are present. + # if no, localhost can be queried (for testing and debugging). + do-not-query-localhost: no + + # if yes, perform prefetching of almost expired message cache entries. + # prefetch: no + + # if yes, perform key lookups adjacent to normal lookups. + # prefetch-key: no + + # deny queries of type ANY with an empty response. + deny-any: no + + # if yes, Unbound rotates RRSet order in response. + rrset-roundrobin: yes + + # if yes, Unbound doesn't insert authority/additional sections + # into response messages when those sections are not required. + minimal-responses: no + + # true to disable DNSSEC lameness check in iterator. + disable-dnssec-lame-check: no + + # module configuration of the server. A string with identifiers + # separated by spaces. Syntax: "[dns64] [validator] iterator" + # most modules have to be listed at the beginning of the line, + # except cachedb(just before iterator), and python (at the beginning, + # or, just before the iterator). + module-config: "iterator" + + # File with trusted keys, kept uptodate using RFC5011 probes, + # initial file like trust-anchor-file, then it stores metadata. + # Use several entries, one per domain name, to track multiple zones. + # + # If you want to perform DNSSEC validation, run unbound-anchor before + # you start unbound (i.e. in the system boot scripts). And enable: + # Please note usage of unbound-anchor root anchor is at your own risk + # and under the terms of our LICENSE (see that file in the source). + # auto-trust-anchor-file: "/etc/unbound/root.key" + + # trust anchor signaling sends a RFC8145 key tag query after priming. + # trust-anchor-signaling: yes + + # Root key trust anchor sentinel (draft-ietf-dnsop-kskroll-sentinel) + # root-key-sentinel: yes + + # File with trusted keys for validation. Specify more than one file + # with several entries, one file per entry. + # Zone file format, with DS and DNSKEY entries. + # Note this gets out of date, use auto-trust-anchor-file please. + # trust-anchor-file: "" + + # Trusted key for validation. DS or DNSKEY. specify the RR on a + # single line, surrounded by "". TTL is ignored. class is IN default. + # Note this gets out of date, use auto-trust-anchor-file please. + # (These examples are from August 2007 and may not be valid anymore). + # trust-anchor: "nlnetlabs.nl. DNSKEY 257 3 5 AQPzzTWMz8qSWIQlfRnPckx2BiVmkVN6LPupO3mbz7FhLSnm26n6iG9N Lby97Ji453aWZY3M5/xJBSOS2vWtco2t8C0+xeO1bc/d6ZTy32DHchpW 6rDH1vp86Ll+ha0tmwyy9QP7y2bVw5zSbFCrefk8qCUBgfHm9bHzMG1U BYtEIQ==" + # trust-anchor: "jelte.nlnetlabs.nl. DS 42860 5 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A" + + # File with trusted keys for validation. Specify more than one file + # with several entries, one file per entry. Like trust-anchor-file + # but has a different file format. Format is BIND-9 style format, + # the trusted-keys { name flag proto algo "key"; }; clauses are read. + # you need external update procedures to track changes in keys. + # trusted-keys-file: "" + + # Ignore chain of trust. Domain is treated as insecure. + # domain-insecure: "example.com" + + # Override the date for validation with a specific fixed date. + # Do not set this unless you are debugging signature inception + # and expiration. "" or "0" turns the feature off. -1 ignores date. + # val-override-date: "" + + # The time to live for bogus data, rrsets and messages. This avoids + # some of the revalidation, until the time interval expires. in secs. + # val-bogus-ttl: 60 + + # The signature inception and expiration dates are allowed to be off + # by 10% of the signature lifetime (expir-incep) from our local clock. + # This leeway is capped with a minimum and a maximum. In seconds. + # val-sig-skew-min: 3600 + # val-sig-skew-max: 86400 + + # Should additional section of secure message also be kept clean of + # unsecure data. Useful to shield the users of this validator from + # potential bogus data in the additional section. All unsigned data + # in the additional section is removed from secure messages. + # val-clean-additional: yes + + # Turn permissive mode on to permit bogus messages. Thus, messages + # for which security checks failed will be returned to clients, + # instead of SERVFAIL. It still performs the security checks, which + # result in interesting log files and possibly the AD bit in + # replies if the message is found secure. The default is off. + # val-permissive-mode: no + + # Ignore the CD flag in incoming queries and refuse them bogus data. + # Enable it if the only clients of unbound are legacy servers (w2008) + # that set CD but cannot validate themselves. + ignore-cd-flag: yes + + # Serve expired responses from cache, with serve-expired-reply-ttl in + # the response, and then attempt to fetch the data afresh. + # serve-expired: no + # + # Limit serving of expired responses to configured seconds after + # expiration. 0 disables the limit. + # serve-expired-ttl: 0 + # + # Set the TTL of expired records to the serve-expired-ttl value after a + # failed attempt to retrieve the record from upstream. This makes sure + # that the expired records will be served as long as there are queries + # for it. + # serve-expired-ttl-reset: no + # + # TTL value to use when replying with expired data. + # serve-expired-reply-ttl: 30 + # + # Time in milliseconds before replying to the client with expired data. + # This essentially enables the serve-stale behavior as specified in + # RFC 8767 that first tries to resolve before + # immediately responding with expired data. 0 disables this behavior. + # A recommended value is 1800. + # serve-expired-client-timeout: 0 + + # Return the original TTL as received from the upstream name server rather + # than the decrementing TTL as stored in the cache. Enabling this feature + # does not impact cache expiry, it only changes the TTL unbound embeds in + # responses to queries. Note that enabling this feature implicitly disables + # enforcement of the configured minimum and maximum TTL. + # serve-original-ttl: no + + # Have the validator log failed validations for your diagnosis. + # 0: off. 1: A line per failed user query. 2: With reason and bad IP. + # val-log-level: 0 + + # It is possible to configure NSEC3 maximum iteration counts per + # keysize. Keep this table very short, as linear search is done. + # A message with an NSEC3 with larger count is marked insecure. + # List in ascending order the keysize and count values. + # val-nsec3-keysize-iterations: "1024 150 2048 500 4096 2500" + + # instruct the auto-trust-anchor-file probing to add anchors after ttl. + # add-holddown: 2592000 # 30 days + + # instruct the auto-trust-anchor-file probing to del anchors after ttl. + # del-holddown: 2592000 # 30 days + + # auto-trust-anchor-file probing removes missing anchors after ttl. + # If the value 0 is given, missing anchors are not removed. + # keep-missing: 31622400 # 366 days + + # debug option that allows very small holddown times for key rollover, + # otherwise the RFC mandates probe intervals must be at least 1 hour. + # permit-small-holddown: no + + # the amount of memory to use for the key cache. + # plain value in bytes or you can append k, m or G. default is "4Mb". + # key-cache-size: 4m + + # the number of slabs to use for the key cache. + # the number of slabs must be a power of 2. + # more slabs reduce lock contention, but fragment memory usage. + # key-cache-slabs: 4 + + # the amount of memory to use for the negative cache. + # plain value in bytes or you can append k, m or G. default is "1Mb". + # neg-cache-size: 1m + + # By default, for a number of zones a small default 'nothing here' + # reply is built-in. Query traffic is thus blocked. If you + # wish to serve such zone you can unblock them by uncommenting one + # of the nodefault statements below. + # You may also have to use domain-insecure: zone to make DNSSEC work, + # unless you have your own trust anchors for this zone. + # local-zone: "localhost." nodefault + # local-zone: "127.in-addr.arpa." nodefault + # local-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." nodefault + # local-zone: "onion." nodefault + # local-zone: "test." nodefault + # local-zone: "invalid." nodefault + # local-zone: "10.in-addr.arpa." nodefault + # local-zone: "16.172.in-addr.arpa." nodefault + # local-zone: "17.172.in-addr.arpa." nodefault + # local-zone: "18.172.in-addr.arpa." nodefault + # local-zone: "19.172.in-addr.arpa." nodefault + # local-zone: "20.172.in-addr.arpa." nodefault + # local-zone: "21.172.in-addr.arpa." nodefault + # local-zone: "22.172.in-addr.arpa." nodefault + # local-zone: "23.172.in-addr.arpa." nodefault + # local-zone: "24.172.in-addr.arpa." nodefault + # local-zone: "25.172.in-addr.arpa." nodefault + # local-zone: "26.172.in-addr.arpa." nodefault + # local-zone: "27.172.in-addr.arpa." nodefault + # local-zone: "28.172.in-addr.arpa." nodefault + # local-zone: "29.172.in-addr.arpa." nodefault + # local-zone: "30.172.in-addr.arpa." nodefault + # local-zone: "31.172.in-addr.arpa." nodefault + # local-zone: "168.192.in-addr.arpa." nodefault + # local-zone: "0.in-addr.arpa." nodefault + # local-zone: "254.169.in-addr.arpa." nodefault + # local-zone: "2.0.192.in-addr.arpa." nodefault + # local-zone: "100.51.198.in-addr.arpa." nodefault + # local-zone: "113.0.203.in-addr.arpa." nodefault + # local-zone: "255.255.255.255.in-addr.arpa." nodefault + # local-zone: "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.0.ip6.arpa." nodefault + # local-zone: "d.f.ip6.arpa." nodefault + # local-zone: "8.e.f.ip6.arpa." nodefault + # local-zone: "9.e.f.ip6.arpa." nodefault + # local-zone: "a.e.f.ip6.arpa." nodefault + # local-zone: "b.e.f.ip6.arpa." nodefault + # local-zone: "8.b.d.0.1.0.0.2.ip6.arpa." nodefault + # And for 64.100.in-addr.arpa. to 127.100.in-addr.arpa. + + # Add example.com into ipset + # local-zone: "example.com" ipset + + # If unbound is running service for the local host then it is useful + # to perform lan-wide lookups to the upstream, and unblock the + # long list of local-zones above. If this unbound is a dns server + # for a network of computers, disabled is better and stops information + # leakage of local lan information. + unblock-lan-zones: yes + + # The insecure-lan-zones option disables validation for + # these zones, as if they were all listed as domain-insecure. + insecure-lan-zones: yes + + # a number of locally served zones can be configured. + # local-zone: + # local-data: "" + # o deny serves local data (if any), else, drops queries. + # o refuse serves local data (if any), else, replies with error. + # o static serves local data, else, nxdomain or nodata answer. + # o transparent gives local data, but resolves normally for other names + # o redirect serves the zone data for any subdomain in the zone. + # o nodefault can be used to normally resolve AS112 zones. + # o typetransparent resolves normally for other types and other names + # o inform acts like transparent, but logs client IP address + # o inform_deny drops queries and logs client IP address + # o inform_redirect redirects queries and logs client IP address + # o always_transparent, always_refuse, always_nxdomain, always_nodata, + # always_deny resolve in that way but ignore local data for + # that name + # o always_null returns 0.0.0.0 or ::0 for any name in the zone. + # o noview breaks out of that view towards global local-zones. + # + # defaults are localhost address, reverse for 127.0.0.1 and ::1 + # and nxdomain for AS112 zones. If you configure one of these zones + # the default content is omitted, or you can omit it with 'nodefault'. + # + # If you configure local-data without specifying local-zone, by + # default a transparent local-zone is created for the data. + # + # You can add locally served data with + # local-zone: "local." static + # local-data: "mycomputer.local. IN A 192.0.2.51" + # local-data: 'mytext.local TXT "content of text record"' + # + # You can override certain queries with + # local-data: "adserver.example.com A 127.0.0.1" + # + # You can redirect a domain to a fixed address with + # (this makes example.com, www.example.com, etc, all go to 192.0.2.3) + # local-zone: "example.com" redirect + # local-data: "example.com A 192.0.2.3" + # + # Shorthand to make PTR records, "IPv4 name" or "IPv6 name". + # You can also add PTR records using local-data directly, but then + # you need to do the reverse notation yourself. + # local-data-ptr: "192.0.2.3 www.example.com" + + # tag a localzone with a list of tag names (in "" with spaces between) + # local-zone-tag: "example.com" "tag2 tag3" + + # add a netblock specific override to a localzone, with zone type + # local-zone-override: "example.com" 192.0.2.0/24 refuse + + # service clients over TLS (on the TCP sockets) with plain DNS inside + # the TLS stream, and over HTTPS using HTTP/2 as specified in RFC8484. + # Give the certificate to use and private key. + # default is "" (disabled). requires restart to take effect. + # tls-service-key: "path/to/privatekeyfile.key" + # tls-service-pem: "path/to/publiccertfile.pem" + # tls-port: 853 + # https-port: 443 + + # cipher setting for TLSv1.2 + # tls-ciphers: "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256" + # cipher setting for TLSv1.3 + # tls-ciphersuites: "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256" + + # Pad responses to padded queries received over TLS + # pad-responses: yes + + # Padded responses will be padded to the closest multiple of this size. + # pad-responses-block-size: 468 + + # Use the SNI extension for TLS connections. Default is yes. + # Changing the value requires a reload. + # tls-use-sni: yes + + # Add the secret file for TLS Session Ticket. + # Secret file must be 80 bytes of random data. + # First key use to encrypt and decrypt TLS session tickets. + # Other keys use to decrypt only. + # requires restart to take effect. + # tls-session-ticket-keys: "path/to/secret_file1" + # tls-session-ticket-keys: "path/to/secret_file2" + + # request upstream over TLS (with plain DNS inside the TLS stream). + # Default is no. Can be turned on and off with unbound-control. + # tls-upstream: no + + # Certificates used to authenticate connections made upstream. + # tls-cert-bundle: "" + + # Add system certs to the cert bundle, from the Windows Cert Store + # tls-win-cert: no + + # Pad queries over TLS upstreams + # pad-queries: yes + + # Padded queries will be padded to the closest multiple of this size. + # pad-queries-block-size: 128 + + # Also serve tls on these port numbers (eg. 443, ...), by listing + # tls-additional-port: portno for each of the port numbers. + + # HTTP endpoint to provide DNS-over-HTTPS service on. + # http-endpoint: "/dns-query" + + # HTTP/2 SETTINGS_MAX_CONCURRENT_STREAMS value to use. + # http-max-streams: 100 + + # Maximum number of bytes used for all HTTP/2 query buffers. + # http-query-buffer-size: 4m + + # Maximum number of bytes used for all HTTP/2 response buffers. + # http-response-buffer-size: 4m + + # Set TCP_NODELAY socket option on sockets used for DNS-over-HTTPS + # service. + # http-nodelay: yes + + # Disable TLS for DNS-over-HTTP downstream service. + # http-notls-downstream: no + + # DNS64 prefix. Must be specified when DNS64 is use. + # Enable dns64 in module-config. Used to synthesize IPv6 from IPv4. + # dns64-prefix: 64:ff9b::0/96 + + # DNS64 ignore AAAA records for these domains and use A instead. + # dns64-ignore-aaaa: "example.com" + + # ratelimit for uncached, new queries, this limits recursion effort. + # ratelimiting is experimental, and may help against randomqueryflood. + # if 0(default) it is disabled, otherwise state qps allowed per zone. + # ratelimit: 0 + + # ratelimits are tracked in a cache, size in bytes of cache (or k,m). + # ratelimit-size: 4m + # ratelimit cache slabs, reduces lock contention if equal to cpucount. + # ratelimit-slabs: 4 + + # 0 blocks when ratelimited, otherwise let 1/xth traffic through + # ratelimit-factor: 10 + + # override the ratelimit for a specific domain name. + # give this setting multiple times to have multiple overrides. + # ratelimit-for-domain: example.com 1000 + # override the ratelimits for all domains below a domain name + # can give this multiple times, the name closest to the zone is used. + # ratelimit-below-domain: com 1000 + + # global query ratelimit for all ip addresses. + # feature is experimental. + # if 0(default) it is disabled, otherwise states qps allowed per ip address + # ip-ratelimit: 0 + + # ip ratelimits are tracked in a cache, size in bytes of cache (or k,m). + # ip-ratelimit-size: 4m + # ip ratelimit cache slabs, reduces lock contention if equal to cpucount. + # ip-ratelimit-slabs: 4 + + # 0 blocks when ip is ratelimited, otherwise let 1/xth traffic through + # ip-ratelimit-factor: 10 + + # Limit the number of connections simultaneous from a netblock + # tcp-connection-limit: 192.0.2.0/24 12 + + # select from the fastest servers this many times out of 1000. 0 means + # the fast server select is disabled. prefetches are not sped up. + # fast-server-permil: 0 + # the number of servers that will be used in the fast server selection. + # fast-server-num: 3 + + # Specific options for ipsecmod. unbound needs to be configured with + # --enable-ipsecmod for these to take effect. + # + # Enable or disable ipsecmod (it still needs to be defined in + # module-config above). Can be used when ipsecmod needs to be + # enabled/disabled via remote-control(below). + # ipsecmod-enabled: yes + # + # Path to executable external hook. It must be defined when ipsecmod is + # listed in module-config (above). + # ipsecmod-hook: "./my_executable" + # + # When enabled unbound will reply with SERVFAIL if the return value of + # the ipsecmod-hook is not 0. + # ipsecmod-strict: no + # + # Maximum time to live (TTL) for cached A/AAAA records with IPSECKEY. + # ipsecmod-max-ttl: 3600 + # + # Reply with A/AAAA even if the relevant IPSECKEY is bogus. Mainly used for + # testing. + # ipsecmod-ignore-bogus: no + # + # Domains for which ipsecmod will be triggered. If not defined (default) + # all domains are treated as being allowed. + # ipsecmod-allow: "example.com" + # ipsecmod-allow: "nlnetlabs.nl" + + +# Python config section. To enable: +# o use --with-pythonmodule to configure before compiling. +# o list python in the module-config string (above) to enable. +# It can be at the start, it gets validated results, or just before +# the iterator and process before DNSSEC validation. +# o and give a python-script to run. +python: + # Script file to load + # python-script: "/etc/unbound/ubmodule-tst.py" + +# Dynamic library config section. To enable: +# o use --with-dynlibmodule to configure before compiling. +# o list dynlib in the module-config string (above) to enable. +# It can be placed anywhere, the dynlib module is only a very thin wrapper +# to load modules dynamically. +# o and give a dynlib-file to run. If more than one dynlib entry is listed in +# the module-config then you need one dynlib-file per instance. +dynlib: + # Script file to load + # dynlib-file: "/etc/unbound/dynlib.so" + +# Remote control config section. +remote-control: + # Enable remote control with unbound-control(8) here. + # set up the keys and certificates with unbound-control-setup. + control-enable: yes + + # what interfaces are listened to for remote control. + # give 0.0.0.0 and ::0 to listen to all interfaces. + # set to an absolute path to use a unix local name pipe, certificates + # are not used for that, so key and cert files need not be present. + control-interface: 127.0.0.1 + # control-interface: ::1 + + # port number for remote control operations. + # control-port: 8953 + + # for localhost, you can disable use of TLS by setting this to "no" + # For local sockets this option is ignored, and TLS is not used. + control-use-cert: "yes" + + # unbound server key file. + server-key-file: "/var/lib/unbound/unbound_server.key" + + # unbound server certificate file. + server-cert-file: "/var/lib/unbound/unbound_server.pem" + + # unbound-control key file. + control-key-file: "/var/lib/unbound/unbound_control.key" + + # unbound-control certificate file. + control-cert-file: "/var/lib/unbound/unbound_control.pem" + +# Stub zones. +# Create entries like below, to make all queries for 'example.com' and +# 'example.org' go to the given list of nameservers. list zero or more +# nameservers by hostname or by ipaddress. If you set stub-prime to yes, +# the list is treated as priming hints (default is no). +# With stub-first yes, it attempts without the stub if it fails. +# Consider adding domain-insecure: name and local-zone: name nodefault +# to the server: section if the stub is a locally served zone. +# stub-zone: +# name: "example.com" +# stub-addr: 192.0.2.68 +# stub-prime: no +# stub-first: no +# stub-tls-upstream: no +# stub-no-cache: no +# stub-zone: +# name: "example.org" +# stub-host: ns.example.com. + +# Forward zones +# Create entries like below, to make all queries for 'example.com' and +# 'example.org' go to the given list of servers. These servers have to handle +# recursion to other nameservers. List zero or more nameservers by hostname +# or by ipaddress. Use an entry with name "." to forward all queries. +# If you enable forward-first, it attempts without the forward if it fails. +# forward-zone: +# name: "example.com" +# forward-addr: 192.0.2.68 +# forward-addr: 192.0.2.73@5355 # forward to port 5355. +# forward-first: no +# forward-tls-upstream: no +# forward-no-cache: no +# forward-zone: +# name: "example.org" +# forward-host: fwd.example.com + +# Authority zones +# The data for these zones is kept locally, from a file or downloaded. +# The data can be served to downstream clients, or used instead of the +# upstream (which saves a lookup to the upstream). The first example +# has a copy of the root for local usage. The second serves example.org +# authoritatively. zonefile: reads from file (and writes to it if you also +# download it), primary: fetches with AXFR and IXFR, or url to zonefile. +# With allow-notify: you can give additional (apart from primaries) sources of +# notifies. +# auth-zone: +# name: "." +# primary: 199.9.14.201 # b.root-servers.net +# primary: 192.33.4.12 # c.root-servers.net +# primary: 199.7.91.13 # d.root-servers.net +# primary: 192.5.5.241 # f.root-servers.net +# primary: 192.112.36.4 # g.root-servers.net +# primary: 193.0.14.129 # k.root-servers.net +# primary: 192.0.47.132 # xfr.cjr.dns.icann.org +# primary: 192.0.32.132 # xfr.lax.dns.icann.org +# primary: 2001:500:200::b # b.root-servers.net +# primary: 2001:500:2::c # c.root-servers.net +# primary: 2001:500:2d::d # d.root-servers.net +# primary: 2001:500:2f::f # f.root-servers.net +# primary: 2001:500:12::d0d # g.root-servers.net +# primary: 2001:7fd::1 # k.root-servers.net +# primary: 2620:0:2830:202::132 # xfr.cjr.dns.icann.org +# primary: 2620:0:2d0:202::132 # xfr.lax.dns.icann.org +# fallback-enabled: yes +# for-downstream: no +# for-upstream: yes +# auth-zone: +# name: "example.org" +# for-downstream: yes +# for-upstream: yes +# zonefile: "example.org.zone" + +# Views +# Create named views. Name must be unique. Map views to requests using +# the access-control-view option. Views can contain zero or more local-zone +# and local-data options. Options from matching views will override global +# options. Global options will be used if no matching view is found. +# With view-first yes, it will try to answer using the global local-zone and +# local-data elements if there is no view specific match. +# view: +# name: "viewname" +# local-zone: "example.com" redirect +# local-data: "example.com A 192.0.2.3" +# local-data-ptr: "192.0.2.3 www.example.com" +# view-first: no +# view: +# name: "anotherview" +# local-zone: "example.com" refuse + +# DNSCrypt +# Caveats: +# 1. the keys/certs cannot be produced by unbound. You can use dnscrypt-wrapper +# for this: https://github.com/cofyc/dnscrypt-wrapper/blob/master/README.md#usage +# 2. dnscrypt channel attaches to an interface. you MUST set interfaces to +# listen on `dnscrypt-port` with the follo0wing snippet: +# server: +# interface: 0.0.0.0@443 +# interface: ::0@443 +# +# Finally, `dnscrypt` config has its own section. +# dnscrypt: +# dnscrypt-enable: yes +# dnscrypt-port: 443 +# dnscrypt-provider: 2.dnscrypt-cert.example.com. +# dnscrypt-secret-key: /path/unbound-conf/keys1/1.key +# dnscrypt-secret-key: /path/unbound-conf/keys2/1.key +# dnscrypt-provider-cert: /path/unbound-conf/keys1/1.cert +# dnscrypt-provider-cert: /path/unbound-conf/keys2/1.cert + +# CacheDB +# Enable external backend DB as auxiliary cache. Specify the backend name +# (default is "testframe", which has no use other than for debugging and +# testing) and backend-specific options. The 'cachedb' module must be +# included in module-config, just before the iterator module. +# cachedb: +# backend: "testframe" +# # secret seed string to calculate hashed keys +# secret-seed: "default" +# +# # For "redis" backend: +# # redis server's IP address or host name +# redis-server-host: 127.0.0.1 +# # redis server's TCP port +# redis-server-port: 6379 +# # timeout (in ms) for communication with the redis server +# redis-timeout: 100 +# # set timeout on redis records based on DNS response TTL +# redis-expire-records: no + +# IPSet +# Add specify domain into set via ipset. +# Note: To enable ipset unbound needs to run as root user. +# ipset: +# # set name for ip v4 addresses +# name-v4: "list-v4" +# # set name for ip v6 addresses +# name-v6: "list-v6" +# + +# Dnstap logging support, if compiled in. To enable, set the dnstap-enable +# to yes and also some of dnstap-log-..-messages to yes. And select an +# upstream log destination, by socket path, TCP or TLS destination. +# dnstap: +# dnstap-enable: no +# # if set to yes frame streams will be used in bidirectional mode +# dnstap-bidirectional: yes +# dnstap-socket-path: "" +# # if "" use the unix socket in dnstap-socket-path, otherwise, +# # set it to "IPaddress[@port]" of the destination. +# dnstap-ip: "" +# # if set to yes if you want to use TLS to dnstap-ip, no for TCP. +# dnstap-tls: yes +# # name for authenticating the upstream server. or "" disabled. +# dnstap-tls-server-name: "" +# # if "", it uses the cert bundle from the main unbound config. +# dnstap-tls-cert-bundle: "" +# # key file for client authentication, or "" disabled. +# dnstap-tls-client-key-file: "" +# # cert file for client authentication, or "" disabled. +# dnstap-tls-client-cert-file: "" +# dnstap-send-identity: no +# dnstap-send-version: no +# # if "" it uses the hostname. +# dnstap-identity: "" +# # if "" it uses the package version. +# dnstap-version: "" +# dnstap-log-resolver-query-messages: no +# dnstap-log-resolver-response-messages: no +# dnstap-log-client-query-messages: no +# dnstap-log-client-response-messages: no +# dnstap-log-forwarder-query-messages: no +# dnstap-log-forwarder-response-messages: no + +# Response Policy Zones +# RPZ policies. Applied in order of configuration. QNAME and Response IP +# Address trigger are the only supported triggers. Supported actions are: +# NXDOMAIN, NODATA, PASSTHRU, DROP and Local Data. Policies can be loaded from +# file, using zone transfer, or using HTTP. The respip module needs to be added +# to the module-config, e.g.: module-config: "respip validator iterator". +# rpz: +# name: "rpz.example.com" +# zonefile: "rpz.example.com" +# primary: 192.0.2.0 +# allow-notify: 192.0.2.0/32 +# url: http://www.example.com/rpz.example.org.zone +# rpz-action-override: cname +# rpz-cname-override: www.example.org +# rpz-log: yes +# rpz-log-name: "example policy" +# tags: "example" + +include: "/var/lib/unbound/unbound.conf.d/forward.conf" +include: "/var/lib/unbound/unbound.conf.d/forward-default.conf" +include: "/var/lib/unbound/unbound.conf.d/local-data.conf" +include: "/var/lib/unbound/unbound.conf.d/stub-zones.conf" +include: "/var/lib/unbound/unbound.conf.d/auth-zones.conf" diff --git a/unbound/unbound.cron b/unbound/unbound.cron new file mode 100644 index 0000000..83b3f07 --- /dev/null +++ b/unbound/unbound.cron @@ -0,0 +1,4 @@ +#!/bin/bash -e + +wget -q 'https://www.internic.net/domain/named.root' -O /etc/unbound/named.root.tmp +mv --force --update /etc/unbound/named.root.tmp /etc/unbound/named.root diff --git a/unbound/unbound.info b/unbound/unbound.info new file mode 100644 index 0000000..3be041c --- /dev/null +++ b/unbound/unbound.info @@ -0,0 +1,10 @@ +PRGNAM="unbound" +VERSION="1.19.0" +HOMEPAGE="https://nlnetlabs.nl/projects/unbound/about/" +DOWNLOAD="https://nlnetlabs.nl/downloads/unbound/unbound-1.19.0.tar.gz" +MD5SUM="1a8c4a4bca75eadc03e21d43089ef1ee" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="ldns" +MAINTAINER="Sergei Fedosoff" +EMAIL="eleksir@gmail.com" diff --git a/unrar/README b/unrar/README new file mode 100644 index 0000000..2e7ff1d --- /dev/null +++ b/unrar/README @@ -0,0 +1,7 @@ +The UnRAR utility is a freeware program, distributed with source +code and developed for extracting, testing and viewing the contents +of archives created with the RAR archiver version 1.50 and above. +The UnRAR library is a minor part of the RAR archiver and contains +the RAR uncompression algorithm. UnRAR requires very small volume +of memory to operate. The UnRAR library can also be used by other +programs to extract RAR archives. diff --git a/unrar/slack-desc b/unrar/slack-desc new file mode 100644 index 0000000..cbcc0ca --- /dev/null +++ b/unrar/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +unrar: unrar (Extract, test and view RAR archives) +unrar: +unrar: The UnRAR utility is a freeware program, distributed with source +unrar: code and developed for extracting, testing and viewing the contents +unrar: of archives created with the RAR archiver version 1.50 and above. +unrar: The UnRAR library is a minor part of the RAR archiver and contains +unrar: the RAR uncompression algorithm. UnRAR requires very small volume +unrar: of memory to operate. The UnRAR library can also be used by other +unrar: programs to extract RAR archives. +unrar: +unrar: Homepage: https://www.rarlab.com/rar_add.htm diff --git a/unrar/unrar-6.1.4-soname.patch b/unrar/unrar-6.1.4-soname.patch new file mode 100644 index 0000000..ba34d23 --- /dev/null +++ b/unrar/unrar-6.1.4-soname.patch @@ -0,0 +1,12 @@ +diff -ruNp unrar/makefile unrar.new/makefile +--- unrar/makefile 2020-05-21 12:13:21.000000000 +0300 ++++ unrar.new/makefile 2022-02-06 00:13:16.126128359 +0300 +@@ -157,7 +157,7 @@ lib: WHAT=RARDLL + lib: CXXFLAGS+=$(LIBFLAGS) + lib: clean $(OBJECTS) $(LIB_OBJ) + @rm -f libunrar.* +- $(LINK) -shared -o libunrar.so $(LDFLAGS) $(OBJECTS) $(LIB_OBJ) ++ $(LINK) -shared -Wl,-soname,libunrar.so.$(libversion) -o libunrar.so.$(libversion) $(LDFLAGS) $(OBJECTS) $(LIB_OBJ) + $(AR) rcs libunrar.a $(OBJECTS) $(LIB_OBJ) + + install-unrar: diff --git a/unrar/unrar.1 b/unrar/unrar.1 new file mode 100644 index 0000000..359a737 --- /dev/null +++ b/unrar/unrar.1 @@ -0,0 +1,155 @@ +.TH UNRAR "1" "December 2009" "unrar " "User Commands" +.SH NAME +unrar \- manual page for unrar +.SH SYNOPSIS +.B unrar +\fI - - \fR +.SH DESCRIPTION +UNRAR 3.91 freeware Copyright (c) 1993-2009 Alexander Roshal +.IP +<@listfiles...> +.PP + +.TP +.BR e +Extract files to current directory +.TP +.BR l[t,b] +List archive [technical, bare] +.TP +.BR p +Print file to stdout +.TP +.BR t +Test archive files +.TP +.BR v[t,b] +Verbosely list archive [technical,bare] +.TP +.BR x +Extract files with full path +.PP + +.TP +.BR - +Stop switches scanning +.TP +.BR ad +Append archive name to destination path +.TP +.BR ai +Ignore file attributes +.TP +.BR ap +Set path inside archive +.TP +.BR c- +Disable comments show +.TP +.BR cfg- +Disable read configuration +.TP +.BR cl +Convert names to lower case +.TP +.BR cu +Convert names to upper case +.TP +.BR dh +Open shared files +.TP +.BR ep +Exclude paths from names +.TP +.BR ep3 +Expand paths to full including the drive letter +.TP +.BR f +Freshen files +.TP +.BR id[c,d,p,q] +Disable messages +.TP +.BR ierr +Send all messages to stderr +.TP +.BR inul +Disable all messages +.TP +.BR kb +Keep broken extracted files +.TP +.BR n +Include only specified file +.TP +.BR n@ +Read file names to include from stdin +.TP +.BR n@ +Include files in specified list file +.TP +.BR o+ +Overwrite existing files +.TP +.BR o- +Do not overwrite existing files +.TP +.BR or +Rename files automatically +.TP +.BR ow +Save or restore file owner and group +.TP +.BR p[password] +Set password +.TP +.BR p- +Do not query password +.TP +.BR r +Recurse subdirectories +.TP +.BR sl +Process files with size less than specified +.TP +.BR sm +Process files with size more than specified +.TP +.BR ta +Process files modified after in YYYYMMDDHHMMSS format +.TP +.BR tb +Process files modified before in YYYYMMDDHHMMSS format +.TP +.BR tn