Architecture specific change in rpms/ghc9.4.git
by githook-noreply@fedoraproject.org
The package rpms/ghc9.4.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/ghc9.4.git/commit/?id=80785e742c1....
Change:
+%ifarch %{ghc_unregisterized_arches} s390x
Thanks.
Full change:
============
commit ef821a056809c3795ff21bf8454ff9edb397f4ba
Author: Jens Petersen <petersen(a)redhat.com>
Date: Mon Aug 28 13:05:39 2023 +0800
limit hadrian builds to 64 cpus!
One of the aarch64 builders with 224 cpus ran out of open files ;-)
diff --git a/ghc9.4.spec b/ghc9.4.spec
index ed8cdd8..b4afbc7 100644
--- a/ghc9.4.spec
+++ b/ghc9.4.spec
@@ -540,6 +540,9 @@ cd hadrian
%global hadrian_llvm +llvm
%endif
%define hadrian_docs %{!?with_haddock:--docs=no-haddocks} --docs=%[%{?with_manual} ? "no-sphinx-pdfs" : "no-sphinx"]
+# aarch64 with 224 cpus: _build/stage0/bin/ghc: createProcess: pipe: resource exhausted (Too many open files)
+# https://koji.fedoraproject.org/koji/taskinfo?taskID=105428124
+%global _smp_ncpus_max 64
# quickest does not build shared libs
# try release instead of perf
%{hadrian} %{?_smp_mflags} --flavour=%[%{?with_perfbuild} ? "perf" : "quick"]%{!?with_ghc_prof:+no_profiled_libs}%{?hadrian_llvm} %{hadrian_docs} binary-dist-dir
commit 6a739c9f0d70de9c6e5e07f0e8330884978f3a14
Author: Jens Petersen <petersen(a)redhat.com>
Date: Sun Aug 27 23:52:16 2023 +0800
sphinx7 patch from opensuse by mimi.vx
diff --git a/ghc9.4.spec b/ghc9.4.spec
index 16ca4a9..ed8cdd8 100644
--- a/ghc9.4.spec
+++ b/ghc9.4.spec
@@ -117,6 +117,10 @@ Patch24: buildpath-abi-stability.patch
Patch26: no-missing-haddock-file-warning.patch
Patch27: haddock-remove-googleapis-fonts.patch
+Patch30: https://src.opensuse.org/rpm/ghc/raw/branch/factory/sphinx7.patch
+
+# https://gitlab.haskell.org/ghc/ghc/-/wikis/platforms
+
# fedora ghc has been bootstrapped on
# %%{ix86} x86_64 s390x ppc64le aarch64
# and retired arches: alpha sparcv9 armv5tel ppc ppc64 s390 armv7hl
@@ -435,6 +439,11 @@ rm libffi-tarballs/libffi-*.tar.gz
%patch -P26 -p1 -b .orig
%patch -P27 -p1 -b .orig
+#sphinx 7
+%if 0%{?fedora} >= 40
+%patch -P30 -p1 -b .orig
+%endif
+
%if %{with haddock} && %{without hadrian}
%global gen_contents_index gen_contents_index.orig
if [ ! -f "libraries/%{gen_contents_index}" ]; then
@@ -444,7 +453,6 @@ fi
%endif
%if %{without hadrian}
-# https://gitlab.haskell.org/ghc/ghc/-/wikis/platforms
cat > mk/build.mk << EOF
%if %{with perfbuild}
%ifarch %{ghc_llvm_archs}
diff --git a/sphinx7.patch b/sphinx7.patch
new file mode 100644
index 0000000..0eb1dbd
--- /dev/null
+++ b/sphinx7.patch
@@ -0,0 +1,26 @@
+From 52d701b31dc4427b7e321a04be3f5f13a5fc271e Mon Sep 17 00:00:00 2001
+From: "mimi.vx" <mimi.vx(a)gmail.com>
+Date: Wed, 24 May 2023 12:42:15 +0000
+Subject: [PATCH] Fix for Sphinx 7 removed style key
+
+Fixes https://gitlab.haskell.org/ghc/ghc/-/issues/23444
+---
+ docs/users_guide/rtd-theme/layout.html | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/docs/users_guide/rtd-theme/layout.html b/docs/users_guide/rtd-theme/layout.html
+index 2a61142514a..7ffeff7befc 100644
+--- a/docs/users_guide/rtd-theme/layout.html
++++ b/docs/users_guide/rtd-theme/layout.html
+@@ -64,7 +64,7 @@
+ {%- endif %}
+
+ {# CSS #}
+- <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
++ <link rel="stylesheet" href="{{ pathto('_static/' + styles[-1], 1) }}" type="text/css" />
+ <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
+ {%- for css in css_files %}
+ {%- if css|attr("rel") %}
+--
+GitLab
+
commit 7f2cf1e41354e0e8205fe8d38246488e02ea4944
Author: Jens Petersen <petersen(a)redhat.com>
Date: Sun Aug 27 21:50:41 2023 +0800
update to 9.4.7
diff --git a/.gitignore b/.gitignore
index 52bbb23..6d4a4e2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
/ghc-9.4.4-src.tar.lz
/ghc-9.4.5-src.tar.lz
/ghc-9.4.6-src.tar.lz
+/ghc-9.4.7-src.tar.lz
diff --git a/10922.patch b/10922.patch
deleted file mode 100644
index ca7da4a..0000000
--- a/10922.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 2e6447e073144b9b1352d5167f67ccd07460444a Mon Sep 17 00:00:00 2001
-From: Jens Petersen <petersen(a)redhat.com>
-Date: Thu, 20 Jul 2023 13:16:03 +0800
-Subject: [PATCH] user_guide/flags.py: python-3.12 no longer includes distutils
-
-packaging.version seems able to handle this fine
----
- docs/users_guide/flags.py | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/docs/users_guide/flags.py b/docs/users_guide/flags.py
-index f6927d59817..474d1b65d4b 100644
---- a/docs/users_guide/flags.py
-+++ b/docs/users_guide/flags.py
-@@ -50,7 +50,7 @@ import sphinx
- from sphinx import addnodes
- from sphinx.domains.std import GenericObject
- from sphinx.errors import SphinxError
--from distutils.version import LooseVersion
-+from packaging.version import parse
- from utils import build_table_from_list
-
- import os.path
-@@ -628,8 +628,8 @@ def purge_flags(app, env, docname):
-
- def setup(app):
- # The override argument to add_directive_to_domain is only supported by >= 1.8
-- sphinx_version = LooseVersion(sphinx.__version__)
-- override_arg = {'override': True} if sphinx_version >= LooseVersion('1.8') else {}
-+ sphinx_version = parse(sphinx.__version__)
-+ override_arg = {'override': True} if sphinx_version >= parse('1.8') else {}
-
- # Add ghc-flag directive, and override the class with our own
- app.add_object_type('ghc-flag', 'ghc-flag')
---
-GitLab
-
diff --git a/10928.patch b/10928.patch
deleted file mode 100644
index 1e16603..0000000
--- a/10928.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 5ce7496dba3368faa5088c88168f0f4d69cff32b Mon Sep 17 00:00:00 2001
-From: Jens Petersen <petersen(a)redhat.com>
-Date: Fri, 21 Jul 2023 15:26:16 +0800
-Subject: [PATCH] make hadrian buildable with Cabal-3.8
-
----
- hadrian/hadrian.cabal | 2 +-
- hadrian/src/Hadrian/Haskell/Cabal/Parse.hs | 4 ++++
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/hadrian/hadrian.cabal b/hadrian/hadrian.cabal
-index c37974914a9..eb5690bbd1a 100644
---- a/hadrian/hadrian.cabal
-+++ b/hadrian/hadrian.cabal
-@@ -147,7 +147,7 @@ executable hadrian
- , BangPatterns
- other-extensions: MultiParamTypeClasses
- , TypeFamilies
-- build-depends: Cabal >= 3.2 && < 3.7
-+ build-depends: Cabal >= 3.2 && < 3.9
- , base >= 4.8 && < 5
- , bytestring >= 0.10 && < 0.12
- , containers >= 0.5 && < 0.7
-diff --git a/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs b/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs
-index 079f675b6ea..2d262a36445 100644
---- a/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs
-+++ b/hadrian/src/Hadrian/Haskell/Cabal/Parse.hs
-@@ -23,7 +23,11 @@ import qualified Distribution.ModuleName as C
- import qualified Distribution.Package as C
- import qualified Distribution.PackageDescription as C
- import qualified Distribution.PackageDescription.Configuration as C
-+#if MIN_VERSION_Cabal(3,8,0)
-+import qualified Distribution.Simple.PackageDescription as C
-+#else
- import qualified Distribution.PackageDescription.Parsec as C
-+#endif
- import qualified Distribution.Simple.Compiler as C
- import qualified Distribution.Simple.Program.Db as C
- import qualified Distribution.Simple as C
---
-GitLab
-
diff --git a/ghc-9.4.6-bytestring-Rts.h.patch b/ghc-9.4.6-bytestring-Rts.h.patch
deleted file mode 100644
index 1ecfdb4..0000000
--- a/ghc-9.4.6-bytestring-Rts.h.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- ghc-9.4.6/libraries/bytestring/cbits/is-valid-utf8.c~ 2023-08-06 01:19:50.000000000 +0800
-+++ ghc-9.4.6/libraries/bytestring/cbits/is-valid-utf8.c 2023-08-08 18:24:52.459249192 +0800
-@@ -50,7 +50,7 @@
- #endif
-
- #include <MachDeps.h>
--#include "Rts.h"
-+#include "ghcplatform.h"
-
- #ifdef WORDS_BIGENDIAN
- #define to_little_endian(x) __builtin_bswap64(x)
diff --git a/ghc9.4.spec b/ghc9.4.spec
index b7be221..16ca4a9 100644
--- a/ghc9.4.spec
+++ b/ghc9.4.spec
@@ -70,12 +70,12 @@
%endif
Name: %{ghc_name}
-Version: 9.4.6
+Version: 9.4.7
# Since library subpackages are versioned:
# - release can only be reset if *all* library versions get bumped simultaneously
# (sometimes after a major release)
# - minor release numbers for a branch should be incremented monotonically
-Release: 22%{?dist}
+Release: 23%{?dist}
Summary: Glasgow Haskell Compiler
License: BSD-3-Clause AND HaskellReport
@@ -100,12 +100,6 @@ Patch3: ghc-gen_contents_index-nodocs.patch
Patch5: https://gitlab.haskell.org/ghc/ghc/-/commit/6e12e3c178fe9ad16131eb3c089bd...
Patch7: ghc-compiler-enable-build-id.patch
Patch8: ghc-configure-c99.patch
-# distutils gone in python 3.12
-# https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10922
-Patch10: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10922.patch
-# https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10928
-# allow building hadrian with Cabal-3.8
-Patch11: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10928.patch
# arm patches
Patch12: ghc-armv7-VFPv3D16--NEON.patch
@@ -113,9 +107,6 @@ Patch12: ghc-armv7-VFPv3D16--NEON.patch
# reverts https://github.com/haskell/text/pull/405
Patch13: text2-allow-ghc8-arm.patch
-# workaround https://github.com/haskell/bytestring/pull/604
-Patch14: ghc-9.4.6-bytestring-Rts.h.patch
-
# for unregisterized
# https://gitlab.haskell.org/ghc/ghc/-/issues/15689
Patch15: ghc-warnings.mk-CC-Wall.patch
@@ -341,7 +332,7 @@ This provides the hadrian tool which can be used to build ghc.
%ghc_lib_subpackage -d -l %BSDHaskellReport array-0.5.4.0
%ghc_lib_subpackage -d -l %BSDHaskellReport -c gmp-devel%{?_isa},libffi-devel%{?_isa} base-%{base_ver}
%ghc_lib_subpackage -d -l BSD-3-Clause binary-0.8.9.1
-%ghc_lib_subpackage -d -l BSD-3-Clause bytestring-0.11.5.1
+%ghc_lib_subpackage -d -l BSD-3-Clause bytestring-0.11.5.2
%ghc_lib_subpackage -d -l %BSDHaskellReport containers-0.6.7
%ghc_lib_subpackage -d -l %BSDHaskellReport deepseq-1.4.8.0
%ghc_lib_subpackage -d -l %BSDHaskellReport directory-1.3.7.1
@@ -417,9 +408,6 @@ Installing this package causes %{name}-*-prof packages corresponding to
%patch -P7 -p1 -b .orig
%endif
%patch -P8 -p1 -b .orig
-%patch -P10 -p1 -b .orig
-%patch -P11 -p1 -b .orig
-%patch -P14 -p1 -b .orig
rm libffi-tarballs/libffi-*.tar.gz
@@ -997,6 +985,9 @@ env -C %{ghc_html_libraries_dir} ./gen_contents_index
%changelog
+* Sun Aug 27 2023 Jens Petersen <petersen(a)redhat.com> - 9.4.7-23
+- https://downloads.haskell.org/~ghc/9.4.7/docs/users_guide/9.4.7-notes.html
+
* Tue Aug 8 2023 Jens Petersen <petersen(a)redhat.com> - 9.4.6-22
- https://downloads.haskell.org/~ghc/9.4.6/docs/users_guide/9.4.6-notes.html
- update license tags to SPDX
diff --git a/libraries-versions.sh b/libraries-versions.sh
index 8e5fcbd..de881ac 100755
--- a/libraries-versions.sh
+++ b/libraries-versions.sh
@@ -7,5 +7,4 @@ fi
cd libraries
-# should handle ../rts/rts.cabal.in
-grep -i ^version: $(find * -name "*.cabal*" | LANG=C.utf8 sort) | grep -v -e "\(Win32\|cabal-\|gmp.old\|gmp2\|integer-simple\|tests\|bench\)" -e "@ProjectVersionMunged@" | grep -e '[0-9]\.' | sed -e "s!.*/\([^/]*\).cabal:[Vv]ersion: \+!\1-!"
+grep -i ^version: ../rts/rts.cabal.in $(find * -name "*.cabal*") | sed -e 's/.in:/:/' -e 's%^../%%' | LANG=C.utf8 sort | grep -v -e "\(Cabal-\(QuickCheck\|described\|tree-diff\)\|Win32\|cabal-\|gmp.old\|gmp2\|integer-simple\|tests\|bench\)" -e "@ProjectVersionMunged@" | grep -e '[0-9]\.' | sed -e "s!.*/\([^/]*\).cabal:[Vv]ersion: \+!\1-!"
diff --git a/sources b/sources
index bcb89e2..db46850 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (ghc-9.4.6-src.tar.lz) = 624b64428cfd7e69690fed4f4dbba9913bbc6905db548e401bf04d28b90224a708e1f1baf62beb3d9a23d48d603a8265e259869d23f063e89be404ec8ad76472
+SHA512 (ghc-9.4.7-src.tar.lz) = fe4f1affcd3ea1b31e45ce46c9a378c890227d372d7104c54a97cb72ff46252776faf783188d08cc1be55403f6373888fe2983129f6449affbcde29aec1ea798
commit 80785e742c107553828e234280acec3d7c6e64a1
Author: Jens Petersen <petersen(a)redhat.com>
Date: Fri Aug 11 13:37:47 2023 +0800
s390x: still need to patch hadrian.cabal for ghc < 9.2
diff --git a/ghc9.4.spec b/ghc9.4.spec
index a6f7364..b7be221 100644
--- a/ghc9.4.spec
+++ b/ghc9.4.spec
@@ -430,11 +430,17 @@ rm libffi-tarballs/libffi-*.tar.gz
%patch -P13 -p1 -b .orig
%endif
-# remove s390x after complete switching to llvm
%ifarch %{ghc_unregisterized_arches}
%patch -P15 -p1 -b .orig
+%endif
+
+%if %{with hadrian}
+# remove s390x if all ghc using llvm
+%ifarch %{ghc_unregisterized_arches} s390x
%patch -P16 -p1 -b .orig
%endif
+%endif
+
#debian
#%%patch -P24 -p1 -b .orig
8 months, 3 weeks
[Report] Packages Restricting Arches
by root
List of packages currently excluding arches (1153)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- 90-Second-Portraits
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- BareBonesBrowserLaunch
ExclusiveArch: %{java_arches} noarch
- CFR
ExclusiveArch: %{java_arches} noarch
- CardManager
ExclusiveArch: %{java_arches} noarch
- GAPDoc
ExclusiveArch: %{gap_arches} noarch
- GoldenCheetah
ExclusiveArch: %{qt5_qtwebengine_arches}
- GtkAda
ExclusiveArch: %{GPRbuild_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- IPAddress
ExclusiveArch: %{java_arches} noarch
- Mars
ExclusiveArch: %{java_arches} noarch
- OpenColorIO
ExclusiveArch: x86_64 ppc64le
- OpenImageIO
ExclusiveArch: x86_64 ppc64le
- OpenMolcas
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- OpenStego
ExclusiveArch: %{java_arches} noarch
- PragmARC
ExclusiveArch: %{GPRbuild_arches}
- R-V8
ExclusiveArch: %{nodejs_arches}
- R-rJava
ExclusiveArch: %{java_arches}
- RdRand
ExclusiveArch: %{ix86} x86_64
- RediSearch
ExclusiveArch: x86_64
- SLOF
ExclusiveArch: ppc64le
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aardvark-dns
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- accel-config
ExclusiveArch: %{ix86} x86_64
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GPRbuild_arches}
- algobox
ExclusiveArch: %{qt5_qtwebengine_arches}
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64 s390x
- anet
ExclusiveArch: %{GPRbuild_arches}
- ant
ExclusiveArch: %{java_arches} noarch
- ant-antunit
ExclusiveArch: %{java_arches} noarch
- ant-contrib
ExclusiveArch: %{java_arches} noarch
- antlr
ExclusiveArch: %{java_arches}
- antlr-maven-plugin
ExclusiveArch: %{java_arches} noarch
- antlr3
ExclusiveArch: %{java_arches}
- antlr4-project
ExclusiveArch: %{java_arches}
- antlrworks
ExclusiveArch: %{java_arches} noarch
- aopalliance
ExclusiveArch: %{java_arches} noarch
- apache-commons-beanutils
ExclusiveArch: %{java_arches} noarch
- apache-commons-cli
ExclusiveArch: %{java_arches} noarch
- apache-commons-codec
ExclusiveArch: %{java_arches} noarch
- apache-commons-collections
ExclusiveArch: %{java_arches} noarch
- apache-commons-collections4
ExclusiveArch: %{java_arches} noarch
- apache-commons-compress
ExclusiveArch: %{java_arches} noarch
- apache-commons-configuration
ExclusiveArch: %{java_arches} noarch
- apache-commons-digester
ExclusiveArch: %{java_arches} noarch
- apache-commons-exec
ExclusiveArch: %{java_arches} noarch
- apache-commons-io
ExclusiveArch: %{java_arches} noarch
- apache-commons-jexl
ExclusiveArch: %{java_arches} noarch
- apache-commons-jxpath
ExclusiveArch: %{java_arches} noarch
- apache-commons-lang3
ExclusiveArch: %{java_arches} noarch
- apache-commons-logging
ExclusiveArch: %{java_arches} noarch
- apache-commons-math
ExclusiveArch: %{java_arches} noarch
- apache-commons-modeler
ExclusiveArch: %{java_arches} noarch
- apache-commons-net
ExclusiveArch: %{java_arches} noarch
- apache-commons-parent
ExclusiveArch: %{java_arches} noarch
- apache-commons-pool
ExclusiveArch: %{java_arches} noarch
- apache-commons-vfs
ExclusiveArch: %{java_arches} noarch
- apache-ivy
ExclusiveArch: %{java_arches} noarch
- apache-parent
ExclusiveArch: %{java_arches} noarch
- apache-resource-bundles
ExclusiveArch: %{java_arches} noarch
- apache-sshd
ExclusiveArch: %{java_arches} noarch
- apiguardian
ExclusiveArch: %{java_arches} noarch
- apmd
ExclusiveArch: %{ix86}
- appstream-generator
ExclusiveArch: %{ldc_arches}
- aqute-bnd
ExclusiveArch: %{java_arches} noarch
- args4j
ExclusiveArch: %{java_arches} noarch
- arianna
ExclusiveArch: %{qt5_qtwebengine_arches}
- arm-trusted-firmware
ExclusiveArch: aarch64
- assertj-core
ExclusiveArch: %{java_arches} noarch
- atinject
ExclusiveArch: %{java_arches} noarch
- aunit
ExclusiveArch: %GPRbuild_arches
- auto
ExclusiveArch: %{java_arches} noarch
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- azure-cli
ExclusiveArch: %{java_arches} noarch
- batik
ExclusiveArch: %{java_arches} noarch
- bcal
ExclusiveArch: x86_64 aarch64 ia64 ppc64 ppc64le s390x
- bcc
ExclusiveArch: x86_64 %{power64} aarch64 s390x armv7hl
- bcel
ExclusiveArch: %{java_arches} noarch
- bcm283x-firmware
ExclusiveArch: aarch64
- beansbinding
ExclusiveArch: %{java_arches} noarch
- belle-sip
ExclusiveArch: %{java_arches}
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- beust-jcommander
ExclusiveArch: %{java_arches} noarch
- bibletime
ExclusiveArch: %{java_arches}
- biosdevname
ExclusiveArch: %{ix86} x86_64
- bless
ExclusiveArch: %mono_arches
- bodhi-server
ExclusiveArch: %{golang_arches_future}
- bolzplatz2006
ExclusiveArch: %{java_arches}
- bouncycastle
ExclusiveArch: %{java_arches} noarch
- box64
ExclusiveArch: aarch64 ppc64le x86_64
- bpftrace
ExclusiveArch: x86_64 %{power64} aarch64 s390x
- brazil
ExclusiveArch: %{java_arches} noarch
- bsf
ExclusiveArch: %{java_arches} noarch
- bsh
ExclusiveArch: %{java_arches} noarch
- build-helper-maven-plugin
ExclusiveArch: %{java_arches} noarch
- buildah
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- byte-buddy
ExclusiveArch: %{java_arches} noarch
- byteman
ExclusiveArch: %{java_arches} noarch
- cachelib
ExclusiveArch: x86_64 aarch64 ppc64le
- caddy
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: %{golang_arches}
- calamares
ExclusiveArch: %{ix86} x86_64 aarch64
- calibre
ExclusiveArch: aarch64 x86_64
- cambozola
ExclusiveArch: %{java_arches} noarch
- canl-java
ExclusiveArch: %{java_arches} noarch
- catatonit
ExclusiveArch: aarch64 ppc64le s390x x86_64
ExclusiveArch: %{golang_arches_future}
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- cdi-api
ExclusiveArch: %{java_arches} noarch
- ceph
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- cglib
ExclusiveArch: %{java_arches} noarch
- chromium
ExclusiveArch: x86_64
ExclusiveArch: x86_64 aarch64
ExclusiveArch: x86_64 aarch64
- cjdns
ExclusiveArch: %{nodejs_arches}
- classloader-leak-test-framework
ExclusiveArch: %{java_arches} noarch
- classpathless-compiler
ExclusiveArch: %{java_arches} noarch
- clevis-pin-tpm2
ExclusiveArch: %{rust_arches}
- clojure
ExclusiveArch: %{java_arches} noarch
- clojure-core-specs-alpha
ExclusiveArch: %{java_arches} noarch
- clojure-maven-plugin
ExclusiveArch: %{java_arches} noarch
- clojure-spec-alpha
ExclusiveArch: %{java_arches} noarch
- cmospwd
ExclusiveArch: %{ix86} x86_64
- cmrt
ExclusiveArch: %{ix86} x86_64 ia64
- codehaus-parent
ExclusiveArch: %{java_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- colossus
ExclusiveArch: %{java_arches} noarch
- conmon
ExclusiveArch: %{golang_arches_future}
- console-image-viewer
ExclusiveArch: %{java_arches} noarch
- containernetworking-plugins
ExclusiveArch: %{golang_arches}
- coq
ExclusiveArch: %{ocaml_native_compiler}
- cortado
ExclusiveArch: %{java_arches} noarch
- cpu-x
ExclusiveArch: i686 x86_64
- cpufetch
ExclusiveArch: %{arm} aarch64 x86_64 ppc ppc64 ppc64le
- cpuid
ExclusiveArch: %{ix86} x86_64
- cpuinfo
ExclusiveArch: x86_64 aarch64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- crash-gcore-command
ExclusiveArch: aarch64 ppc64le x86_64
- crash-trace-command
ExclusiveArch: aarch64 ppc64le s390x x86_64
- credentials-fetcher
ExclusiveArch: x86_64 aarch64 s390x
- cri-o
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- cri-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- crun
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le riscv64 s390x x86_64
- cryptlib
ExclusiveArch: x86_64 aarch64 ppc64le
- crypto-policies
ExclusiveArch: %{java_arches} noarch
- cryptobone
ExclusiveArch: x86_64 ppc64le aarch64
- csslint
ExclusiveArch: %{nodejs_arches} noarch
- cvc5
ExclusiveArch: %{java_arches}
- daq
ExclusiveArch: x86_64 aarch64
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- decentxml
ExclusiveArch: %{java_arches} noarch
- deepin-daemon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- deepin-desktop-schemas
ExclusiveArch: %{go_arches}
- directory-maven-plugin
ExclusiveArch: %{java_arches} noarch
- dirgra
ExclusiveArch: %{java_arches} noarch
- disruptor
ExclusiveArch: %{java_arches} noarch
- ditaa
ExclusiveArch: %{java_arches} noarch
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- dmtcp
ExclusiveArch: x86_64
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dogtag-pki
ExclusiveArch: %{java_arches}
- dolphin-emu
ExclusiveArch: x86_64 aarch64
- dom4j
ExclusiveArch: %{java_arches} noarch
- dotnet6.0
ExclusiveArch: aarch64 x86_64 s390x
ExclusiveArch: x86_64
- dotnet7.0
ExclusiveArch: aarch64 ppc64le s390x x86_64
ExclusiveArch: x86_64
- doublecmd
ExclusiveArch: %{ix86} x86_64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dub
ExclusiveArch: %{ldc_arches}
- dxvk-native
ExclusiveArch: %{ix86} x86_64
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
- e3
ExclusiveArch: %{ix86} x86_64
- easymock
ExclusiveArch: %{java_arches} noarch
- ecj
ExclusiveArch: %{java_arches} noarch
- eclipse-swt
ExclusiveArch: %{java_arches}
- ed25519-java
ExclusiveArch: %{java_arches} noarch
- edk2
ExclusiveArch: x86_64 aarch64
- efibootmgr
ExclusiveArch: %{efi}
- efifs
ExclusiveArch: %{efi}
- efitools
ExclusiveArch: %{efi}
- efivar
ExclusiveArch: %{efi}
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- emacs-slime
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- embree
ExclusiveArch: aarch64 x86_64
- embree3
ExclusiveArch: aarch64 x86_64
- enjarify
ExclusiveArch: %{java_arches} noarch
- enki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- eric
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- erlang-corba
ExclusiveArch: %{java_arches}
- esmi_ib_library
ExclusiveArch: x86_64
- eth-tools
ExclusiveArch: x86_64
- exec-maven-plugin
ExclusiveArch: %{java_arches} noarch
- external-editor-revived
ExclusiveArch: %{rust_arches}
- extra-enforcer-rules
ExclusiveArch: %{java_arches} noarch
- fasterxml-oss-parent
ExclusiveArch: %{java_arches} noarch
- fb303
ExclusiveArch: x86_64 aarch64 ppc64le
- fbthrift
ExclusiveArch: x86_64 aarch64 ppc64le
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- felix-parent
ExclusiveArch: %{java_arches} noarch
- felix-utils
ExclusiveArch: %{java_arches} noarch
- fernflower
ExclusiveArch: %{java_arches} noarch
- fes
ExclusiveArch: %{ix86} x86_64
- filedrop
ExclusiveArch: %{java_arches} noarch
- firecracker
ExclusiveArch: aarch64 x86_64
- fishbowl
ExclusiveArch: %{java_arches} noarch
- fizz
ExclusiveArch: x86_64 aarch64 ppc64le
- flocq
ExclusiveArch: %{ocaml_native_compiler}
- florist
ExclusiveArch: %{GPRbuild_arches}
- fluent-bit
ExclusiveArch: x86_64 aarch64
- flute
ExclusiveArch: %{java_arches} noarch
- folly
ExclusiveArch: x86_64 aarch64 ppc64le
- fop
ExclusiveArch: %{java_arches} noarch
- forge-parent
ExclusiveArch: %{java_arches} noarch
- fpc
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64 ppc64le
- frama-c
ExclusiveArch: %{ocaml_native_compiler}
- freecol
ExclusiveArch: %{java_arches} noarch
- freemarker
ExclusiveArch: %{java_arches} noarch
- freerouting
ExclusiveArch: %{java_arches} noarch
- frescobaldi
ExclusiveArch: %{qt5_qtwebengine_arches}
- frysk
ExclusiveArch: x86_64 ppc64
- fuse-overlayfs
ExclusiveArch: %{arm64} ppc64le s390x x86_64
- fusesource-pom
ExclusiveArch: %{java_arches} noarch
- fwts
ExclusiveArch: x86_64 %{arm} aarch64 s390x riscv64 %{power64}
- fwupd-efi
ExclusiveArch: x86_64 aarch64
- ga
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- gap
ExclusiveArch: %{gap_arches}
- gap-pkg-ace
ExclusiveArch: %{gap_arches}
- gap-pkg-aclib
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-alnuth
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-atlasrep
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-autodoc
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-automata
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-autpgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-browse
ExclusiveArch: %{gap_arches}
- gap-pkg-caratinterface
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-circle
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-cohomolo
ExclusiveArch: %{gap_arches}
- gap-pkg-congruence
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-corelg
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crime
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crisp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crypting
ExclusiveArch: %{gap_arches}
- gap-pkg-cryst
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crystcat
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-ctbllib
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-curlinterface
ExclusiveArch: %{gap_arches}
- gap-pkg-cvec
ExclusiveArch: %{gap_arches}
- gap-pkg-datastructures
ExclusiveArch: %{gap_arches}
- gap-pkg-design
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-digraphs
ExclusiveArch: %{gap_arches}
- gap-pkg-edim
ExclusiveArch: %{gap_arches}
- gap-pkg-factint
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-ferret
ExclusiveArch: %{gap_arches}
- gap-pkg-fga
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-fining
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-float
ExclusiveArch: %{gap_arches}
- gap-pkg-format
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-forms
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-fr
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-francy
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-gbnp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-genss
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-grape
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-groupoids
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-grpconst
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-guava
ExclusiveArch: %{gap_arches}
- gap-pkg-hap
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-hapcryst
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-hecke
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-images
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-io
ExclusiveArch: %{gap_arches}
- gap-pkg-irredsol
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-json
ExclusiveArch: %{gap_arches}
- gap-pkg-jupyterkernel
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-jupyterviz
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-laguna
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-liealgdb
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-liepring
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-liering
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-loops
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-lpres
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-mapclass
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-nautytracesinterface
ExclusiveArch: %{gap_arches}
- gap-pkg-nq
ExclusiveArch: %{gap_arches}
- gap-pkg-openmath
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-orb
ExclusiveArch: %{gap_arches}
- gap-pkg-polenta
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-polycyclic
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-polymaking
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-primgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-profiling
ExclusiveArch: %{gap_arches}
- gap-pkg-qpa
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-quagroup
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-radiroot
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-recog
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-repsn
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-resclasses
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-scscp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-semigroups
ExclusiveArch: %{gap_arches}
- gap-pkg-singular
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-sla
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-smallgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-smallsemi
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-sonata
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-sophus
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-spinsym
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-standardff
ExclusiveArch: %{gap_arches}
- gap-pkg-tomlib
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-toric
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-transgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-utils
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-uuid
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-xmod
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-zeromqinterface
ExclusiveArch: %{gap_arches}
- gappalib-coq
ExclusiveArch: %{ocaml_native_compiler}
- gbrainy
ExclusiveArch: %mono_arches
- gdb
ExclusiveArch: %{ix86} x86_64
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gearhead1
ExclusiveArch: %{fpc_arches}
- gearhead2
ExclusiveArch: %{fpc_arches}
- ghdl
ExclusiveArch: %{GNAT_arches}
- ghostwriter
ExclusiveArch: %{qt5_qtwebengine_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- gitqlient
ExclusiveArch: %{qt5_qtwebengine_arches}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- glibc32
ExclusiveArch: x86_64
- glibd
ExclusiveArch: %{ldc_arches}
- gnatcoll
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-bindings
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-db
ExclusiveArch: %{GPRbuild_arches}
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: %{efi}
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang
ExclusiveArch: %{golang_arches}
- google-gson
ExclusiveArch: %{java_arches} noarch
- google-guice
ExclusiveArch: %{java_arches} noarch
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- goverlay
ExclusiveArch: %{fpc_arches}
- gprbuild
ExclusiveArch: %{GPRbuild_arches}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha aarch64
- grafana
ExclusiveArch: %{grafana_arches}
- grafana-pcp
ExclusiveArch: %{grafanapcp_arches}
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- guava
ExclusiveArch: %{java_arches} noarch
- gudev-sharp
ExclusiveArch: %mono_arches
- guestfs-tools
ExclusiveArch: %{kernel_arches}
- gvisor-tap-vsock
ExclusiveArch: %{golang_arches_future}
- hamcrest
ExclusiveArch: %{java_arches} noarch
- harec
ExclusiveArch: x86_64 aarch64
- hawtjni
ExclusiveArch: %{java_arches} noarch
- hedgewars
ExclusiveArch: %{fpc_arches}
- hibernate-jpa-2.0-api
ExclusiveArch: %{java_arches} noarch
- hid4java
ExclusiveArch: %{java_arches} noarch
- hipcub
ExclusiveArch: x86_64
- hsakmt
ExclusiveArch: x86_64 aarch64 ppc64le
- httpcomponents-client
ExclusiveArch: %{java_arches} noarch
- httpcomponents-core
ExclusiveArch: %{java_arches} noarch
- httpcomponents-project
ExclusiveArch: %{java_arches} noarch
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64 aarch64
- icaro
ExclusiveArch: %{ix86} x86_64 noarch
- icedtea-web
ExclusiveArch: %{java_arches}
- icu4j
ExclusiveArch: %{java_arches} noarch
- imagej
ExclusiveArch: %{java_arches} noarch
- imhex
ExclusiveArch: x86_64 %{arm64}
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cm-compiler
ExclusiveArch: i686 x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- intel-compute-runtime
ExclusiveArch: x86_64
- intel-gmmlib
ExclusiveArch: x86_64 i686
- intel-igc
ExclusiveArch: x86_64
- intel-ipp-crypto-mb
ExclusiveArch: x86_64
- intel-ipsec-mb
ExclusiveArch: x86_64
- intel-mediasdk
ExclusiveArch: x86_64
- intel-undervolt
ExclusiveArch: i386 x86_64
- ioport
ExclusiveArch: %{ix86} x86_64
- ipmctl
ExclusiveArch: x86_64
- ispc
ExclusiveArch: x86_64 aarch64
- iucode-tool
ExclusiveArch: %{ix86} x86_64
- iyfct
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- jFormatString
ExclusiveArch: %{java_arches} noarch
- jackson-annotations
ExclusiveArch: %{java_arches} noarch
- jackson-bom
ExclusiveArch: %{java_arches} noarch
- jackson-core
ExclusiveArch: %{java_arches} noarch
- jackson-databind
ExclusiveArch: %{java_arches} noarch
- jackson-dataformats-binary
ExclusiveArch: %{java_arches} noarch
- jackson-dataformats-text
ExclusiveArch: %{java_arches} noarch
- jackson-jaxrs-providers
ExclusiveArch: %{java_arches} noarch
- jackson-modules-base
ExclusiveArch: %{java_arches} noarch
- jackson-parent
ExclusiveArch: %{java_arches} noarch
- jacoco
ExclusiveArch: %{java_arches} noarch
- jacop
ExclusiveArch: %{java_arches} noarch
- jakarta-activation
ExclusiveArch: %{java_arches} noarch
- jakarta-activation1
ExclusiveArch: %{java_arches} noarch
- jakarta-annotations
ExclusiveArch: %{java_arches} noarch
- jakarta-el
ExclusiveArch: %{java_arches} noarch
- jakarta-interceptors
ExclusiveArch: %{java_arches} noarch
- jakarta-json
ExclusiveArch: %{java_arches} noarch
- jakarta-mail
ExclusiveArch: %{java_arches} noarch
- jakarta-oro
ExclusiveArch: %{java_arches} noarch
- jakarta-saaj
ExclusiveArch: %{java_arches} noarch
- jakarta-server-pages
ExclusiveArch: %{java_arches} noarch
- jakarta-servlet
ExclusiveArch: %{java_arches} noarch
- jakarta-xml-ws
ExclusiveArch: %{java_arches} noarch
- janino
ExclusiveArch: %{java_arches} noarch
- jansi
ExclusiveArch: %{java_arches}
- jansi-native
ExclusiveArch: %{java_arches}
- jansi1
ExclusiveArch: %{java_arches} noarch
- java-1.8.0-openjdk
ExclusiveArch: %{java_arches}
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- java-1.8.0-openjdk-portable
ExclusiveArch: %{java_arches}
- java-11-openjdk
ExclusiveArch: %{java_arches}
- java-11-openjdk-portable
ExclusiveArch: %{java_arches}
- java-17-openjdk
ExclusiveArch: %{java_arches}
- java-17-openjdk-portable
ExclusiveArch: %{java_arches}
- java-diff-utils
ExclusiveArch: %{java_arches} noarch
- java-dirq
ExclusiveArch: %{java_arches} noarch
- java-jd-decompiler
ExclusiveArch: %{java_arches} noarch
- java-latest-openjdk
ExclusiveArch: %{java_arches}
- java-latest-openjdk-portable
ExclusiveArch: %{java_arches}
- java-runtime-decompiler
ExclusiveArch: %{java_arches} noarch
- java-scrypt
ExclusiveArch: %{java_arches} noarch
- java_cup
ExclusiveArch: %{java_arches} noarch
- javacc
ExclusiveArch: %{java_arches} noarch
- javacc-maven-plugin
ExclusiveArch: %{java_arches} noarch
- javaewah
ExclusiveArch: %{java_arches} noarch
- javapackages-bootstrap
ExclusiveArch: %{java_arches}
- javaparser
ExclusiveArch: %{java_arches} noarch
- javapoet
ExclusiveArch: %{java_arches} noarch
- javassist
ExclusiveArch: %{java_arches} noarch
- jaxb
ExclusiveArch: %{java_arches} noarch
- jaxb-api
ExclusiveArch: %{java_arches} noarch
- jaxb-api2
ExclusiveArch: %{java_arches} noarch
- jaxb-dtd-parser
ExclusiveArch: %{java_arches} noarch
- jaxb-fi
ExclusiveArch: %{java_arches} noarch
- jaxb-istack-commons
ExclusiveArch: %{java_arches} noarch
- jaxb-stax-ex
ExclusiveArch: %{java_arches} noarch
- jaxen
ExclusiveArch: %{java_arches} noarch
- jboss-jaxrs-2.0-api
ExclusiveArch: %{java_arches} noarch
- jboss-logging
ExclusiveArch: %{java_arches} noarch
- jboss-logging-tools
ExclusiveArch: %{java_arches} noarch
- jboss-parent
ExclusiveArch: %{java_arches} noarch
- jchardet
ExclusiveArch: %{java_arches} noarch
- jcip-annotations
ExclusiveArch: %{java_arches} noarch
- jctools
ExclusiveArch: %{java_arches} noarch
- jcuber
ExclusiveArch: %{java_arches} noarch
- jdeparser
ExclusiveArch: %{java_arches} noarch
- jdepend
ExclusiveArch: %{java_arches} noarch
- jdependency
ExclusiveArch: %{java_arches} noarch
- jdom
ExclusiveArch: %{java_arches} noarch
- jdom2
ExclusiveArch: %{java_arches} noarch
- jedit
ExclusiveArch: %{java_arches} noarch
- jericho-html
ExclusiveArch: %{java_arches} noarch
- jetty
ExclusiveArch: %{java_arches} noarch
- jflex
ExclusiveArch: %{java_arches} noarch
- jfreechart
ExclusiveArch: %{java_arches} noarch
- jgit
ExclusiveArch: %{java_arches} noarch
- jglobus
ExclusiveArch: %{java_arches} noarch
- jgoodies-common
ExclusiveArch: %{java_arches} noarch
- jgoodies-forms
ExclusiveArch: %{java_arches} noarch
- jgoodies-looks
ExclusiveArch: %{java_arches} noarch
- jigawatts
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- jline
ExclusiveArch: %{java_arches}
- jline2
ExclusiveArch: %{java_arches} noarch
- jmock
ExclusiveArch: %{java_arches} noarch
- jmol
ExclusiveArch: %{java_arches} noarch
- jna
ExclusiveArch: %{java_arches}
- jneuroml-core
ExclusiveArch: %{java_arches} noarch
- jni-inchi
ExclusiveArch: %{java_arches}
- jol
ExclusiveArch: %{java_arches} noarch
- jolokia-jvm-agent
ExclusiveArch: %{java_arches} noarch
- jopt-simple
ExclusiveArch: %{java_arches} noarch
- jorbis
ExclusiveArch: %{java_arches} noarch
- jowl
ExclusiveArch: %{nodejs_arches} noarch
- jpanoramamaker
ExclusiveArch: %{java_arches} noarch
- jsch
ExclusiveArch: %{java_arches} noarch
- jsch-agent-proxy
ExclusiveArch: %{java_arches} noarch
- json_simple
ExclusiveArch: %{java_arches} noarch
- jsoup
ExclusiveArch: %{java_arches} noarch
- jsr-305
ExclusiveArch: %{java_arches} noarch
- jss
ExclusiveArch: %{java_arches}
- jssc
ExclusiveArch: %{java_arches}
- jtidy
ExclusiveArch: %{java_arches} noarch
- julia
ExclusiveArch: x86_64
- junit
ExclusiveArch: %{java_arches} noarch
- junit5
ExclusiveArch: %{java_arches} noarch
- juniversalchardet
ExclusiveArch: %{java_arches} noarch
- jzlib
ExclusiveArch: %{java_arches} noarch
- kaidan
ExclusiveArch: %{qt5_qtwebengine_arches}
- kchmviewer
ExclusiveArch: %{qt5_qtwebengine_arches}
- kernel
ExclusiveArch: noarch x86_64 s390x aarch64 ppc64le
ExclusiveArch: noarch i386 i686 x86_64 s390x aarch64 ppc64le
- keylime-agent-rust
ExclusiveArch: %{rust_arches}
- keyring-ima-signer
ExclusiveArch: %{rust_arches}
- kf5-akonadi-search
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-audiocd-kio
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kblog
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarcore
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarutils
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kitinerary
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-ktnef
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-libkdcraw
ExclusiveArch: x86_64 ppc64le %{arm}
- kicad
ExclusiveArch: x86_64 aarch64 ppc64le
- kiwix-desktop
ExclusiveArch: %{qt5_qtwebengine_arches}
- knot-resolver
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- knotes
ExclusiveArch: x86_64 %{arm}
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x %{arm}
- laf-plugin
ExclusiveArch: %{java_arches} noarch
- lazarus
ExclusiveArch: %{fpc_arches}
- lazpaint
ExclusiveArch: %{fpc_arches}
- ldapjdk
ExclusiveArch: %{java_arches} noarch
- ldc
ExclusiveArch: %{ldc_arches} ppc64le
- ldc1.30
ExclusiveArch: %{ldc_arches} ppc64le
- ldc1.32
ExclusiveArch: %{ldc_arches} ppc64le
- libbase
ExclusiveArch: %{java_arches} noarch
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libdfp
ExclusiveArch: ppc ppc64 ppc64le s390 s390x x86_64
- libdispatch
ExclusiveArch: x86_64 aarch64 ppc64le
- libfonts
ExclusiveArch: %{java_arches} noarch
- libformula
ExclusiveArch: %{java_arches} noarch
- libguestfs
ExclusiveArch: %{kernel_arches}
- libica
ExclusiveArch: s390 s390x
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libkgapi
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- libkrun
ExclusiveArch: x86_64 aarch64
- libkrunfw
ExclusiveArch: x86_64 aarch64
- liblayout
ExclusiveArch: %{java_arches} noarch
- libloader
ExclusiveArch: %{java_arches} noarch
- libnxz
ExclusiveArch: ppc64le
- libocxl
ExclusiveArch: ppc64le
- libpsm2
ExclusiveArch: x86_64
- libquentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- libreoffice-TexMaths
ExclusiveArch: %{java_arches}
- librepository
ExclusiveArch: %{java_arches} noarch
- libretro-desmume2015
ExclusiveArch: i686 x86_64
- librtas
ExclusiveArch: %{power64}
- libserializer
ExclusiveArch: %{java_arches} noarch
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 %{ix86}
- libunicode
ExclusiveArch: x86_64 aarch64
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} s390x %{ix86} x86_64
- libva-nvidia-driver
ExclusiveArch: %{x86_64} %{ix86} %{arm64} ppc64le
- libvirt-java
ExclusiveArch: %{java_arches} noarch
- libvma
ExclusiveArch: x86_64 ppc64le ppc64 aarch64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzdnn
ExclusiveArch: s390x
- libzfcphbaapi
ExclusiveArch: s390 s390x
- libzpc
ExclusiveArch: s390x
- llhttp
ExclusiveArch: %{nodejs_arches}
- log4j
ExclusiveArch: %{java_arches} noarch
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- lucene
ExclusiveArch: %{java_arches} noarch
- lujavrite
ExclusiveArch: %{java_arches}
- luxcorerender
ExclusiveArch: x86_64
- mactel-boot
ExclusiveArch: x86_64
- magicmirror
ExclusiveArch: %{nodejs_arches} noarch
- magicmirror-module-airnow
ExclusiveArch: %{nodejs_arches} noarch
- magicmirror-module-onthisday
ExclusiveArch: %{nodejs_arches} noarch
- magicmirror-module-singlestock
ExclusiveArch: %{nodejs_arches} noarch
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- mariadb-java-client
ExclusiveArch: %{java_arches} noarch
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matrix-synapse
ExclusiveArch: %{rust_arches}
- maui-mauikit
ExclusiveArch: %{ix86} s390x aarch64 x86_64
- maven
ExclusiveArch: %{java_arches} noarch
- maven-antrun-plugin
ExclusiveArch: %{java_arches} noarch
- maven-archetype
ExclusiveArch: %{java_arches} noarch
- maven-archiver
ExclusiveArch: %{java_arches} noarch
- maven-artifact-transfer
ExclusiveArch: %{java_arches} noarch
- maven-assembly-plugin
ExclusiveArch: %{java_arches} noarch
- maven-bundle-plugin
ExclusiveArch: %{java_arches} noarch
- maven-clean-plugin
ExclusiveArch: %{java_arches} noarch
- maven-common-artifact-filters
ExclusiveArch: %{java_arches} noarch
- maven-compiler-plugin
ExclusiveArch: %{java_arches} noarch
- maven-dependency-analyzer
ExclusiveArch: %{java_arches} noarch
- maven-dependency-plugin
ExclusiveArch: %{java_arches} noarch
- maven-dependency-tree
ExclusiveArch: %{java_arches} noarch
- maven-doxia
ExclusiveArch: %{java_arches} noarch
- maven-doxia-sitetools
ExclusiveArch: %{java_arches} noarch
- maven-enforcer
ExclusiveArch: %{java_arches} noarch
- maven-file-management
ExclusiveArch: %{java_arches} noarch
- maven-filtering
ExclusiveArch: %{java_arches} noarch
- maven-invoker
ExclusiveArch: %{java_arches} noarch
- maven-invoker-plugin
ExclusiveArch: %{java_arches} noarch
- maven-jar-plugin
ExclusiveArch: %{java_arches} noarch
- maven-mapping
ExclusiveArch: %{java_arches} noarch
- maven-native
ExclusiveArch: %{java_arches} noarch
- maven-parent
ExclusiveArch: %{java_arches} noarch
- maven-patch-plugin
ExclusiveArch: %{java_arches} noarch
- maven-plugin-testing
ExclusiveArch: %{java_arches} noarch
- maven-plugin-tools
ExclusiveArch: %{java_arches} noarch
- maven-remote-resources-plugin
ExclusiveArch: %{java_arches} noarch
- maven-reporting-api
ExclusiveArch: %{java_arches} noarch
- maven-reporting-impl
ExclusiveArch: %{java_arches} noarch
- maven-resolver
ExclusiveArch: %{java_arches} noarch
- maven-resources-plugin
ExclusiveArch: %{java_arches} noarch
- maven-script-interpreter
ExclusiveArch: %{java_arches} noarch
- maven-shade-plugin
ExclusiveArch: %{java_arches} noarch
- maven-shared-incremental
ExclusiveArch: %{java_arches} noarch
- maven-shared-io
ExclusiveArch: %{java_arches} noarch
- maven-shared-utils
ExclusiveArch: %{java_arches} noarch
- maven-source-plugin
ExclusiveArch: %{java_arches} noarch
- maven-surefire
ExclusiveArch: %{java_arches} noarch
- maven-verifier
ExclusiveArch: %{java_arches} noarch
- maven-verifier-plugin
ExclusiveArch: %{java_arches} noarch
- maven-wagon
ExclusiveArch: %{java_arches} noarch
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mbpfan
ExclusiveArch: x86_64
- mcelog
ExclusiveArch: i686 x86_64
- mcrouter
ExclusiveArch: x86_64 aarch64 ppc64le
- mecab-java
ExclusiveArch: %java_arches
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- mellowplayer
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64 ppc64 ppc64le s390x aarch64
- memtest86+
ExclusiveArch: x86_64 %{ix86}
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} x86_64 riscv64
- miglayout
ExclusiveArch: %{java_arches} noarch
- mine_detector
ExclusiveArch: %{GPRbuild_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-libidn2
ExclusiveArch: %{ix86} x86_64 %{arm}
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- moby-engine
ExclusiveArch: %{golang_arches}
- mockito
ExclusiveArch: %{java_arches} noarch
- mod_mono
ExclusiveArch: %mono_arches
- modello
ExclusiveArch: %{java_arches} noarch
- moditect
ExclusiveArch: %{java_arches} noarch
- module-build-service
ExclusiveArch: %{ix86} x86_64 noarch
- modulemaker-maven-plugin
ExclusiveArch: %{java_arches} noarch
- mojo-executor
ExclusiveArch: %{java_arches} noarch
- mojo-parent
ExclusiveArch: %{java_arches} noarch
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64 %{arm}
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- msr-tools
ExclusiveArch: %{ix86} x86_64
- munge-maven-plugin
ExclusiveArch: %{java_arches} noarch
- mxparser
ExclusiveArch: %{java_arches} noarch
- mysql-connector-java
ExclusiveArch: %{java_arches} noarch
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- naev
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- naga
ExclusiveArch: %{java_arches} noarch
- nant
ExclusiveArch: %mono_arches
- nativejit
ExclusiveArch: x86_64
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- nekohtml
ExclusiveArch: %{java_arches} noarch
- netavark
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nodejs-acorn-object-spread
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bash-language-server
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buble
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-less
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-linefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nodemon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs18
ExclusiveArch: %{nodejs_arches}
- nodejs20
ExclusiveArch: %{nodejs_arches}
- nom-tam-fits
ExclusiveArch: %{java_arches} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: x86_64 ppc64le
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64 ppc64le
- objectweb-asm
ExclusiveArch: %{java_arches} noarch
- objenesis
ExclusiveArch: %{java_arches} noarch
- obs-service-rust2rpm
ExclusiveArch: %{rust_arches} noarch
- oci-seccomp-bpf-hook
ExclusiveArch: x86_64 %{power64} aarch64 s390x armv7hl
ExclusiveArch: %{golang_arches_future}
- oidn
ExclusiveArch: x86_64
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- oneVPL
ExclusiveArch: x86_64
- oneVPL-intel-gpu
ExclusiveArch: x86_64
- oneapi-level-zero
ExclusiveArch: x86_64
- onednn
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- onedrive
ExclusiveArch: %{ldc_arches}
- ongres-scram
ExclusiveArch: %{java_arches} noarch
- ongres-stringprep
ExclusiveArch: %{java_arches} noarch
- opae
ExclusiveArch: x86_64
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64 aarch64
ExclusiveArch: %{ix86} x86_64 aarch64
ExclusiveArch: x86_64
- openblas
ExclusiveArch: %{openblas_arches}
- openjdk-asmtools
ExclusiveArch: %{java_arches} noarch
- openjdk-asmtools7
ExclusiveArch: %{java_arches} noarch
- openjfx
ExclusiveArch: %{java_arches}
- openjfx8
ExclusiveArch: x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openms
ExclusiveArch: %{qt5_qtwebengine_arches}
- openni
ExclusiveArch: x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openoffice.org-diafilter
ExclusiveArch: %{java_arches}
- openpgl
ExclusiveArch: aarch64 x86_64
- openssl-ibmca
ExclusiveArch: s390 s390x
- openstack-java-sdk
ExclusiveArch: %{java_arches} noarch
- opentest4j
ExclusiveArch: %{java_arches} noarch
- openvkl
ExclusiveArch: aarch64 x86_64
- optee_client
ExclusiveArch: aarch64
- options
ExclusiveArch: %{java_arches} noarch
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- osgi-annotation
ExclusiveArch: %{java_arches} noarch
- osgi-compendium
ExclusiveArch: %{java_arches} noarch
- osgi-core
ExclusiveArch: %{java_arches} noarch
- pacemaker
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64 %{arm}
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- pageedit
ExclusiveArch: %{qt5_qtwebengine_arches}
- parserng
ExclusiveArch: %{java_arches} noarch
- pasdoc
ExclusiveArch: %{fpc_arches}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcfi
ExclusiveArch: %{java_arches} noarch
- pcm
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdbg
ExclusiveArch: ppc64le
- pdfbox
ExclusiveArch: %{java_arches} noarch
- pdfmod
ExclusiveArch: %mono_arches
- pdftk-java
ExclusiveArch: %{java_arches} noarch
- pentaho-libxml
ExclusiveArch: %{java_arches} noarch
- pentaho-reporting-flow-engine
ExclusiveArch: %{java_arches} noarch
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 %{arm}
- pesign-test-app
ExclusiveArch: x86_64
- picocli
ExclusiveArch: %{java_arches} noarch
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- plantuml
ExclusiveArch: %{java_arches} noarch
- plasma-dialer
ExclusiveArch: %{java_arches}
- playonlinux
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- plexus-archiver
ExclusiveArch: %{java_arches} noarch
- plexus-build-api
ExclusiveArch: %{java_arches} noarch
- plexus-build-api0
ExclusiveArch: %{java_arches} noarch
- plexus-cipher
ExclusiveArch: %{java_arches} noarch
- plexus-classworlds
ExclusiveArch: %{java_arches} noarch
- plexus-compiler
ExclusiveArch: %{java_arches} noarch
- plexus-component-api
ExclusiveArch: %{java_arches} noarch
- plexus-components-pom
ExclusiveArch: %{java_arches} noarch
- plexus-containers
ExclusiveArch: %{java_arches} noarch
- plexus-i18n
ExclusiveArch: %{java_arches} noarch
- plexus-interpolation
ExclusiveArch: %{java_arches} noarch
- plexus-io
ExclusiveArch: %{java_arches} noarch
- plexus-languages
ExclusiveArch: %{java_arches} noarch
- plexus-pom
ExclusiveArch: %{java_arches} noarch
- plexus-resources
ExclusiveArch: %{java_arches} noarch
- plexus-sec-dispatcher
ExclusiveArch: %{java_arches} noarch
- plexus-utils
ExclusiveArch: %{java_arches} noarch
- plexus-velocity
ExclusiveArch: %{java_arches} noarch
- podman
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- poppler-sharp
ExclusiveArch: %mono_arches
- popub
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- postgresql-jdbc
ExclusiveArch: %{java_arches} noarch
- powerpc-utils
ExclusiveArch: ppc %{power64}
- powerstat
ExclusiveArch: %{ix86} x86_64
- ppc64-diag
ExclusiveArch: ppc %{power64}
- procyon
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
- proguard
ExclusiveArch: %{java_arches} noarch
- prometheus-jmx-exporter
ExclusiveArch: %{java_arches} noarch
- prometheus-simpleclient-java
ExclusiveArch: %{java_arches} noarch
- proxygen
ExclusiveArch: x86_64 aarch64 ppc64le
- pveclib
ExclusiveArch: ppc %{power64}
- pvs-sbcl
ExclusiveArch: x86_64
- pyqtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- python-ast-monitor
ExclusiveArch: %{qt6_qtwebengine_arches} noarch
- python-cryptography
ExclusiveArch: %{rust_arches}
- python-damo
ExclusiveArch: x86_64 aarch64 ppc64le s390x noarch
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-javaobj
ExclusiveArch: %{java_arches} noarch
- python-jep
ExclusiveArch: %{java_arches}
- python-jnius
ExclusiveArch: %{java_arches}
- python-jupyter-polymake
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- python-openoffice
ExclusiveArch: noarch x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-pyqt6-webengine
ExclusiveArch: aarch64 x86_64
- python-setuptools-rust
ExclusiveArch: %{rust_arches}
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qatengine
ExclusiveArch: x86_64
- qatzip
ExclusiveArch: x86_64
- qbe
ExclusiveArch: x86_64 aarch64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qdox
ExclusiveArch: %{java_arches} noarch
- qemu-sanity-check
ExclusiveArch: %{kernel_arches}
- qevercloud
ExclusiveArch: %{qt5_qtwebengine_arches}
- qmapshack
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt6-qtwebengine
ExclusiveArch: aarch64 x86_64
- qt6-qtwebview
ExclusiveArch: aarch64 x86_64
- quantum-espresso
ExclusiveArch: x86_64 %{ix86} aarch64 %{power64}
- quentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- rEFInd
ExclusiveArch: %{efi}
- rachota
ExclusiveArch: %{java_arches} noarch
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- reflections
ExclusiveArch: %{java_arches} noarch
- reg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- regexp
ExclusiveArch: %{java_arches} noarch
- relaxng-datatype-java
ExclusiveArch: %{java_arches} noarch
- replacer
ExclusiveArch: %{java_arches} noarch
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- rescene
ExclusiveArch: %{mono_arches}
- resteasy
ExclusiveArch: %{java_arches} noarch
- restool
ExclusiveArch: aarch64
- restsharp
ExclusiveArch: %{mono_arches}
- retsnoop
ExclusiveArch: %{rust_arches}
- rhino
ExclusiveArch: %{java_arches} noarch
- river
ExclusiveArch: %{zig_arches}
- rkcommon
ExclusiveArch: x86_64 aarch64
- rocclr
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-compilersupport
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-device-libs
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-runtime
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-smi
ExclusiveArch: x86_64 aarch64 ppc64le
- rocminfo
ExclusiveArch: x86_64 aarch64 ppc64le
- rocprim
ExclusiveArch: x86_64
- rocrand
ExclusiveArch: x86_64
- rocthrust
ExclusiveArch: x86_64
- rpm-ostree
ExclusiveArch: %{rust_arches}
- rr
ExclusiveArch: %{ix86} x86_64 aarch64
- rssguard
ExclusiveArch: %{qt5_qtwebengine_arches}
- rstudio
ExclusiveArch: %{java_arches}
- rsyntaxtextarea
ExclusiveArch: %{java_arches} noarch
- rubygem-childprocess
ExclusiveArch: %{ix86} x86_64 noarch
- runc
ExclusiveArch: %{golang_arches_future}
- rundoc
ExclusiveArch: %{java_arches} noarch
- rust
ExclusiveArch: %{rust_arches}
- rust-actix
ExclusiveArch: %{rust_arches}
- rust-actix-router
ExclusiveArch: %{rust_arches}
- rust-argmax
ExclusiveArch: %{rust_arches}
- rust-askalono-cli
ExclusiveArch: %{rust_arches}
- rust-base-x
ExclusiveArch: %{rust_arches}
- rust-bit-set
ExclusiveArch: %{rust_arches}
- rust-bootupd
ExclusiveArch: x86_64 aarch64
- rust-brotli
ExclusiveArch: %{rust_arches}
- rust-capnp-futures
ExclusiveArch: %{rust_arches}
- rust-cascade
ExclusiveArch: %{rust_arches}
- rust-cast
ExclusiveArch: %{rust_arches}
- rust-chrono-tz
ExclusiveArch: %{rust_arches}
- rust-combine
ExclusiveArch: %{rust_arches}
- rust-compress-tools
ExclusiveArch: %{rust_arches}
- rust-const-oid0.6
ExclusiveArch: %{rust_arches}
- rust-coreos-installer
ExclusiveArch: %{rust_arches}
- rust-crossbeam
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-ctr
ExclusiveArch: %{rust_arches}
- rust-dashmap4
ExclusiveArch: %{rust_arches}
- rust-deflate
ExclusiveArch: %{rust_arches}
- rust-deflate0.8
ExclusiveArch: %{rust_arches}
- rust-drg
ExclusiveArch: %{rust_arches}
- rust-event-listener
ExclusiveArch: %{rust_arches}
- rust-fail
ExclusiveArch: %{rust_arches}
- rust-gag
ExclusiveArch: %{rust_arches}
- rust-getch
ExclusiveArch: %{rust_arches}
- rust-gzip-header
ExclusiveArch: %{rust_arches}
- rust-hamming
ExclusiveArch: %{rust_arches}
- rust-headers
ExclusiveArch: %{rust_arches}
- rust-hidapi
ExclusiveArch: %{rust_arches}
- rust-httparse
ExclusiveArch: %{rust_arches}
- rust-humantime-serde
ExclusiveArch: %{rust_arches}
- rust-hyperlocal
ExclusiveArch: %{rust_arches}
- rust-image0.23
ExclusiveArch: %{rust_arches}
- rust-inflate
ExclusiveArch: %{rust_arches}
- rust-jpeg-decoder0.1
ExclusiveArch: %{rust_arches}
- rust-k9
ExclusiveArch: %{rust_arches}
- rust-krunvm
ExclusiveArch: x86_64 aarch64
- rust-kstring
ExclusiveArch: %{rust_arches}
- rust-kvm-ioctls
ExclusiveArch: x86_64 aarch64
- rust-lebe
ExclusiveArch: %{rust_arches}
- rust-libslirp
ExclusiveArch: %{rust_arches}
- rust-libslirp-sys
ExclusiveArch: %{rust_arches}
- rust-msru
ExclusiveArch: x86_64
- rust-nanorand
ExclusiveArch: %{rust_arches}
- rust-netstat2
ExclusiveArch: %{rust_arches}
- rust-onig
ExclusiveArch: %{rust_arches}
- rust-openat-ext
ExclusiveArch: %{rust_arches}
- rust-ordered-float2
ExclusiveArch: %{rust_arches}
- rust-os_type
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-pathsearch
ExclusiveArch: %{rust_arches}
- rust-pq-sys
ExclusiveArch: %{rust_arches}
- rust-pretty-bytes
ExclusiveArch: %{rust_arches}
- rust-pretty-hex
ExclusiveArch: %{rust_arches}
- rust-primal-bit
ExclusiveArch: %{rust_arches}
- rust-primal-check
ExclusiveArch: %{rust_arches}
- rust-primal-estimate
ExclusiveArch: %{rust_arches}
- rust-procfs0.9
ExclusiveArch: %{rust_arches}
- rust-procs
ExclusiveArch: %{rust_arches}
- rust-prost
ExclusiveArch: %{rust_arches}
- rust-prost-derive
ExclusiveArch: %{rust_arches}
- rust-prost-derive0.8
ExclusiveArch: %{rust_arches}
- rust-prost0.8
ExclusiveArch: %{rust_arches}
- rust-psl-types
ExclusiveArch: %{rust_arches}
- rust-psm
ExclusiveArch: %{rust_arches}
- rust-pwd
ExclusiveArch: %{rust_arches}
- rust-rand_core
ExclusiveArch: %{rust_arches}
- rust-schemafy_core
ExclusiveArch: %{rust_arches}
- rust-schemafy_lib
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-serde-big-array
ExclusiveArch: %{rust_arches}
- rust-serde_qs
ExclusiveArch: %{rust_arches}
- rust-serde_yaml0.8
ExclusiveArch: %{rust_arches}
- rust-sev
ExclusiveArch: x86_64
- rust-sevctl
ExclusiveArch: x86_64
- rust-silver
ExclusiveArch: %{rust_arches}
- rust-sinit
ExclusiveArch: %{rust_arches}
- rust-snphost
ExclusiveArch: x86_64
- rust-ssh-key-dir
ExclusiveArch: %{rust_arches}
- rust-stacker
ExclusiveArch: %{rust_arches}
- rust-structopt
ExclusiveArch: %{rust_arches}
- rust-tiff0.6
ExclusiveArch: %{rust_arches}
- rust-totp-lite
ExclusiveArch: %{rust_arches}
- rust-tower-layer
ExclusiveArch: %{rust_arches}
- rust-tpm2-policy
ExclusiveArch: %{rust_arches}
- rust-tree-sitter
ExclusiveArch: %{rust_arches}
- rust-tree-sitter-cli
ExclusiveArch: %{rust_arches}
- rust-tzfile
ExclusiveArch: %{rust_arches}
- rust-ubyte
ExclusiveArch: %{rust_arches}
- rust-unicode-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-width
ExclusiveArch: %{rust_arches}
- rust-unicode-xid
ExclusiveArch: %{rust_arches}
- rust-uriparse
ExclusiveArch: %{rust_arches}
- rust-uucore
ExclusiveArch: %{rust_arches}
- rust-varlink_generator
ExclusiveArch: %{rust_arches}
- rust-varlink_parser
ExclusiveArch: %{rust_arches}
- rust-virtio-bindings
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vmm-sys-util
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vtparse
ExclusiveArch: %{rust_arches}
- rust-web-ext-native-messaging
ExclusiveArch: %{rust_arches}
- rust-wezterm-color-types
ExclusiveArch: %{rust_arches}
- rust-wezterm-dynamic
ExclusiveArch: %{rust_arches}
- rust-wezterm-dynamic-derive
ExclusiveArch: %{rust_arches}
- rust-wild
ExclusiveArch: %{rust_arches}
- rust-xxhash-rust
ExclusiveArch: %{rust_arches}
- rust-zbus1
ExclusiveArch: %{rust_arches}
- rust-zbus_macros1
ExclusiveArch: %{rust_arches}
- rust-zincati
ExclusiveArch: %{rust_arches}
- rust-zvariant2
ExclusiveArch: %{rust_arches}
- rust-zvariant_derive2
ExclusiveArch: %{rust_arches}
- s390utils
ExclusiveArch: s390 s390x
- sac
ExclusiveArch: %{java_arches} noarch
- safetyblanket
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- sagemath
ExclusiveArch: aarch64 x86_64
- sat4j
ExclusiveArch: %{java_arches} noarch
- sbcl
ExclusiveArch: %{ix86} x86_64 aarch64 %{power64}
- sbd
ExclusiveArch: i686 x86_64 s390x aarch64 ppc64le
- sblim-cim-client
ExclusiveArch: %{java_arches} noarch
- sblim-cim-client2
ExclusiveArch: %{java_arches} noarch
- sbsigntools
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- scala
ExclusiveArch: %{java_arches} noarch
- scalacheck
ExclusiveArch: %{java_arches} noarch
- scannotation
ExclusiveArch: %{java_arches} noarch
- sdljava
ExclusiveArch: %{java_arches}
- sdrangel
ExclusiveArch: %{qt5_qtwebengine_arches}
- sdsl-lite
ExclusiveArch: %{power64} x86_64 aarch64
- seabios
ExclusiveArch: x86_64
- seadrive-gui
ExclusiveArch: %{qt5_qtwebengine_arches}
- seafile-client
ExclusiveArch: %{qt5_qtwebengine_arches}
- seamonkey
ExclusiveArch: x86_64
- seqan3
ExclusiveArch: %{power64} x86_64 aarch64
- sequence-library
ExclusiveArch: %{java_arches} noarch
- servicelog
ExclusiveArch: ppc %{power64}
- shaman
ExclusiveArch: %{java_arches} noarch
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: %{efi}
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- shim-unsigned-x64
ExclusiveArch: x86_64
- sigul
ExclusiveArch: x86_64
- singularity-ce
ExclusiveArch: %{go_arches}
- sisu
ExclusiveArch: %{java_arches} noarch
- sisu-mojos
ExclusiveArch: %{java_arches} noarch
- skopeo
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- skychart
ExclusiveArch: %{fpc_arches}
- slf4j
ExclusiveArch: %{java_arches} noarch
- slirp4netns
ExclusiveArch: %{golang_arches_future}
- snakeyaml
ExclusiveArch: %{java_arches} noarch
- snapd
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm} aarch64 ppc64le s390x}
- snip
ExclusiveArch: %{java_arches} noarch
- softnet-stat
ExclusiveArch: %{rust_arches}
- soup-sharp
ExclusiveArch: %{mono_arches}
- spacebar
ExclusiveArch: %{java_arches}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spec-version-maven-plugin
ExclusiveArch: %{java_arches} noarch
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- spice-parent
ExclusiveArch: %{java_arches} noarch
- springlobby
ExclusiveArch: %{ix86} x86_64
- sqljet
ExclusiveArch: %{java_arches} noarch
- squeekboard
ExclusiveArch: %{rust_arches}
- startdde
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- stats-collect
ExclusiveArch: %{ix86} x86_64 noarch
- statsd
ExclusiveArch: %{nodejs_arches} noarch
- stratis-cli
ExclusiveArch: %{rust_arches} noarch
- stratisd
ExclusiveArch: %{rust_arches}
ExclusiveArch: %{rust_arches}
ExclusiveArch: %{rust_arches}
- string-template-maven-plugin
ExclusiveArch: %{java_arches} noarch
- stringtemplate
ExclusiveArch: %{java_arches} noarch
- stringtemplate4
ExclusiveArch: %{java_arches} noarch
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- subscription-manager-cockpit
ExclusiveArch: %{nodejs_arches} noarch
- supercollider
ExclusiveArch: %{qt5_qtwebengine_arches}
- supermin
ExclusiveArch: %{kernel_arches}
- svnkit
ExclusiveArch: %{java_arches} noarch
- svt-vp9
ExclusiveArch: x86_64
- swift-lang
ExclusiveArch: x86_64 aarch64
- swing-layout
ExclusiveArch: %{java_arches} noarch
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64le s390x
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- system-rules
ExclusiveArch: %{java_arches} noarch
- system76-keyboard-configurator
ExclusiveArch: %{rust_arches}
- systemd-boot
ExclusiveArch: %efi
- t-digest
ExclusiveArch: %{java_arches} noarch
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tagsoup
ExclusiveArch: %{java_arches} noarch
- tarantool
ExclusiveArch: %{ix86} x86_64
- tboot
ExclusiveArch: %{ix86} x86_64
- tdlib
ExclusiveArch: x86_64 aarch64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- ternimal
ExclusiveArch: %{rust_arches}
- test-interface
ExclusiveArch: %{java_arches} noarch
- testcloud
ExclusiveArch: %{kernel_arches} noarch
- testng
ExclusiveArch: %{java_arches} noarch
- texlive
ExclusiveArch: %{java_arches} noarch
- thermald
ExclusiveArch: %{ix86} x86_64
- tilix
ExclusiveArch: %{ldc_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- tomcat
ExclusiveArch: %{java_arches} noarch
- tomcat-native
ExclusiveArch: %{java_arches}
- tomcat-taglibs-parent
ExclusiveArch: %{java_arches} noarch
- tomcatjss
ExclusiveArch: %{java_arches} noarch
- torbrowser-launcher
ExclusiveArch: %{ix86} x86_64
- treelayout
ExclusiveArch: %{java_arches} noarch
- trilead-ssh2
ExclusiveArch: %{java_arches} noarch
- truth
ExclusiveArch: %{java_arches} noarch
- tuned-profiles-nfv-host-bin
ExclusiveArch: %{ix86} x86_64
- typescript
ExclusiveArch: %{nodejs_arches} noarch
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ucx
ExclusiveArch: aarch64 ppc64le x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
- umr
ExclusiveArch: x86_64 aarch64 ppc64le
- unetbootin
ExclusiveArch: %{ix86} x86_64
- univocity-parsers
ExclusiveArch: %{java_arches} noarch
- ursa-major
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- usd
ExclusiveArch: aarch64 x86_64
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- vakzination
ExclusiveArch: %{java_arches}
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vecmath1.2
ExclusiveArch: %{java_arches} noarch
- velocity
ExclusiveArch: %{java_arches} noarch
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- vim-syntastic
ExclusiveArch: %{java_arches} noarch
- virt-p2v
ExclusiveArch: x86_64
- virt-v2v
ExclusiveArch: x86_64
- virtiofsd
ExclusiveArch: %{rust_arches}
- virtualbox-guest-additions
ExclusiveArch: i686 x86_64
- vkd3d
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- vmaf
ExclusiveArch: x86_64
- voms-api-java
ExclusiveArch: %{java_arches} noarch
- voms-clients-java
ExclusiveArch: %{java_arches} noarch
- vrq
ExclusiveArch: %{ix86} x86_64
- wangle
ExclusiveArch: x86_64 aarch64 ppc64le
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{ix86} x86_64 %{arm}
- wasmedge
ExclusiveArch: x86_64 aarch64
- watchman
ExclusiveArch: x86_64 aarch64 ppc64le
- wdt
ExclusiveArch: x86_64 aarch64 ppc64le
- webkit2-sharp
ExclusiveArch: %mono_arches
- weld-parent
ExclusiveArch: %{java_arches} noarch
- why3
ExclusiveArch: %{ocaml_native_compiler}
- wine
ExclusiveArch: %{ix86} x86_64 aarch64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86}
- wine-dxvk
ExclusiveArch: %{ix86} x86_64
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- ws-commons-util
ExclusiveArch: %{java_arches} noarch
- wsdl4j
ExclusiveArch: %{java_arches} noarch
- wult
ExclusiveArch: x86_64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x2goclient
ExclusiveArch: x86_64
- x86-simd-sort
ExclusiveArch: x86_64
- xalan-j2
ExclusiveArch: %{java_arches} noarch
- xbean
ExclusiveArch: %{java_arches} noarch
- xbyak
ExclusiveArch: x86_64
- xbyak_aarch64
ExclusiveArch: aarch64
- xe-guest-utilities-latest
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: x86_64 aarch64
- xerces-j2
ExclusiveArch: %{java_arches} noarch
- xgap
ExclusiveArch: %{gap_arches}
- xml-commons-apis
ExclusiveArch: %{java_arches} noarch
- xml-commons-resolver
ExclusiveArch: %{java_arches} noarch
- xml-maven-plugin
ExclusiveArch: %{java_arches} noarch
- xmlada
ExclusiveArch: %{GPRbuild_arches}
- xmlgraphics-commons
ExclusiveArch: %{java_arches} noarch
- xmlpull
ExclusiveArch: %{java_arches} noarch
- xmlstreambuffer
ExclusiveArch: %{java_arches} noarch
- xmlunit
ExclusiveArch: %{java_arches} noarch
- xmvn
ExclusiveArch: %{java_arches} noarch
- xmvn-connector-ivy
ExclusiveArch: %{java_arches} noarch
- xmvn-generator
ExclusiveArch: %{java_arches}
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- xstream
ExclusiveArch: %{java_arches} noarch
- xz-java
ExclusiveArch: %{java_arches} noarch
- yarnpkg
ExclusiveArch: %{nodejs_arches} noarch
- zcfan
ExclusiveArch: x86_64
- zeal
ExclusiveArch: aarch64 x86_64
- zenon
ExclusiveArch: %{ocaml_native_compiler}
- zeromq-ada
ExclusiveArch: %{GPRbuild_arches}
- zig
ExclusiveArch: %{zig_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ng
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- zola
ExclusiveArch: %{rust_arches}
8 months, 3 weeks
Architecture specific change in rpms/racket.git
by githook-noreply@fedoraproject.org
The package rpms/racket.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=d219a714005...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=72f9e792878...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=fb079f8fd8b...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=8a0520b7598...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=524418d78d0...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=a95a85d39de...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=8f064904f24...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=af6d1581024...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=6a0eaba3f29...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=b8569a44d31...
https://src.fedoraproject.org/cgit/rpms/racket.git/commit/?id=f241dafce90....
Change:
+ExcludeArch: %{arm} s390x ppc64le
+%ifarch %{arm} s390x
-%ifarch %{arm} s390x
+%ifarch %{arm} s390x
+ExcludeArch: s390x %{arm} ppc64
+ExclusiveArch: x86_64
+ExcludeArch: s390x %{arm} ppc64
+ExclusiveArch: x86_64
+ExcludeArch: s390x %{arm} ppc64
+%ifarch %{ix86}
+ExcludeArch: s390x armv7hl
Thanks.
Full change:
============
commit dc8b02606595204350286d64e7c1e6f4682e1c45
Author: Jens Petersen <petersen(a)redhat.com>
Date: Sat Aug 26 14:24:31 2023 +0800
drop trailing whitespace
diff --git a/racket.spec b/racket.spec
index 4cfc79f..726dc97 100644
--- a/racket.spec
+++ b/racket.spec
@@ -7,10 +7,10 @@ License: GPLv3 and LGPLv3 and MIT
URL: https://racket-lang.org
Source0: https://mirror.racket-lang.org/installers/%{version}/%{name}-%{version}-s...
-# Remove SRFI library and docs with restrictive licensing.
+# Remove SRFI library and docs with restrictive licensing.
# See: https://github.com/racket/srfi/issues/4 (open)
# Note: Upstream maintainers have confirmed this
-# is safe, since the removed components are
+# is safe, since the removed components are
# extra elements which nothing else in the
# package depends on.
# Note: SRFI 5 was replaced with a FOSS implementation. Only
@@ -33,19 +33,19 @@ BuildRequires: libffi-devel
# For the racket/gui library (via libffi)
# https://github.com/racket/gui/blob/master/gui-lib/mred/private/wx/gtk/gtk...
-BuildRequires: gtk3
+BuildRequires: gtk3
# For the racket/draw library (via libffi)
# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/ca...
-BuildRequires: cairo
+BuildRequires: cairo
# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/pa...
-BuildRequires: pango
+BuildRequires: pango
# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/pn...
-BuildRequires: libpng
+BuildRequires: libpng
# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/jp...
-BuildRequires: libjpeg-turbo
+BuildRequires: libjpeg-turbo
# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/gl...
-BuildRequires: glib2
+BuildRequires: glib2
# To validate desktop file
BuildRequires: desktop-file-utils
@@ -58,9 +58,9 @@ Requires: racket-pkgs = %{version}-%{release}
Recommends: racket-doc = %{version}-%{release}
%description
-Racket is a general-purpose programming language as well as
-the world's first ecosystem for developing and deploying new
-languages. Make your dream language, or use one of the dozens
+Racket is a general-purpose programming language as well as
+the world's first ecosystem for developing and deploying new
+languages. Make your dream language, or use one of the dozens
already available.
%prep
@@ -97,7 +97,7 @@ cd src
%install
cd src
-%make_install
+%make_install
# Delete mred binaries and replace them with links.
rm -vf ${RPM_BUILD_ROOT}%{_bindir}/mred
@@ -135,7 +135,7 @@ for i in $DOCS_TO_FIX; do
${RPM_BUILD_ROOT}/%{_datadir}/doc/racket/$i
done
-# Remove the executable bit on legacy template file
+# Remove the executable bit on legacy template file
chmod -x ${RPM_BUILD_ROOT}%{_libdir}/racket/starter-sh
%ldconfig_scriptlets
@@ -312,8 +312,8 @@ A local installation of the Racket documentation system.
* Wed Sep 5 2018 David Benoit <dbenoit(a)redhat.com> 7.0-2
- Disable SSE math on i686 until issue is fixed upstream
-- Exclude ppc due to issue building Racket v7.0 and
- arch being deprecated in next release
+- Exclude ppc due to issue building Racket v7.0 and
+ arch being deprecated in next release
* Fri Aug 17 2018 David Benoit <dbenoit(a)redhat.com> 7.0-1
- Update sources to Racket v7.0
@@ -340,15 +340,15 @@ A local installation of the Racket documentation system.
- remove update-database post scripts
- move libracket3m.so link into -devel
- add ldconfig_scriptlets after install
-- remove disable debug_package and configure
+- remove disable debug_package and configure
with --disable-strip instead
-- add license to files section and update
+- add license to files section and update
license header field
- validate desktop files
- change ownership of /etc/racket
- update changelog with release info
- use specific man directory man/man1/*
-- refactor racket into subpackages
+- refactor racket into subpackages
racket-minimal, racket-collects, and racket-pkgs
* Wed Apr 4 2018 David Benoit <dbenoit(a)redhat.com> 6.12-4
@@ -379,7 +379,7 @@ A local installation of the Racket documentation system.
- Update to current stable version
- Remove libedit readline patch (fixed upstream)
- Break docs into separate package
-- Add scriptlets to set doc-open-url based on
+- Add scriptlets to set doc-open-url based on
whether docs are installed
- Exclude armv7hl and s390x as target arches
- Update description to match website
commit d219a714005b43692351ab7bbc824129a7a1355d
Author: Jens Petersen <petersen(a)redhat.com>
Date: Sat Aug 26 14:23:59 2023 +0800
disable failing ppc64le
diff --git a/racket.spec b/racket.spec
index 1135c4b..4cfc79f 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 11%{?dist}
+Release: 12%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -18,8 +18,8 @@ Source0: https://mirror.racket-lang.org/installers/%{version}/%{name}-%{v
Patch0: racket-7.4-remove-nonfree.patch
Patch1: racket-configure-c99.patch
-# Issue Building for armv7hl in koji
-ExcludeArch: %{arm} s390x
+# ppc64le: https://bugzilla.redhat.com/show_bug.cgi?id=2226390
+ExcludeArch: %{arm} s390x ppc64le
# To compile the program
BuildRequires: make
@@ -83,7 +83,7 @@ cd src
# do not use generations on architectures
# where it is broken
# (this is currently a no-op, since arm and s390x are not enabled yet.
-# It is art of a fix that will land in a future release)
+# It is part of a fix that will land in a future release)
%configure \
%ifarch %{arm} s390x
--disable-generations \
@@ -250,6 +250,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Sat Aug 26 2023 Jens Petersen <petersen(a)redhat.com> - 7.4-12
+- disable ppc64le (#2226390)
+
* Fri Jul 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
commit 72f9e792878cc750676626f35515a95f2aa35431
Author: Tomas Hrcka <thrcka(a)redhat.com>
Date: Mon Aug 21 12:02:39 2023 +0200
Unretirement request: https://pagure.io/releng/issue/11638
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dd3082f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/racket-7.0-src.tgz
+/racket-7.4-src.tgz
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..dd16930
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# racket
+
+The racket package
\ No newline at end of file
diff --git a/dead.package b/dead.package
deleted file mode 100644
index ab7426e..0000000
--- a/dead.package
+++ /dev/null
@@ -1 +0,0 @@
-Retired: Long term failure to build
diff --git a/racket-7.4-remove-nonfree.patch b/racket-7.4-remove-nonfree.patch
new file mode 100644
index 0000000..b670cbc
--- /dev/null
+++ b/racket-7.4-remove-nonfree.patch
@@ -0,0 +1,967 @@
+diff -urN racket-7.4-orig/share/links.rktd racket-7.4-remove-nonfree/share/links.rktd
+--- racket-7.4-orig/share/links.rktd 2019-08-03 23:31:24.000000000 -0400
++++ racket-7.4-remove-nonfree/share/links.rktd 2019-08-28 09:27:21.416018118 -0400
+@@ -177,7 +177,6 @@
+ (root "pkgs/slideshow-exe")
+ (root "pkgs/slideshow-plugin")
+ (root "pkgs/srfi-doc")
+- (root "pkgs/srfi-doc-nonfree")
+ (root "pkgs/syntax-color-doc")
+ (root "pkgs/web-server-lib")
+ (root "pkgs/unix-socket-lib")
+diff -urN racket-7.4-orig/share/pkgs/pkgs.rktd racket-7.4-remove-nonfree/share/pkgs/pkgs.rktd
+--- racket-7.4-orig/share/pkgs/pkgs.rktd 2019-08-03 23:31:24.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/pkgs.rktd 2019-08-28 09:28:17.804384118 -0400
+@@ -1 +1 @@
+-#hash(("2d" . #s(pkg-info (catalog "2d") "fc82a7bd227d7f3b8852351fc6bf34948a7750b8" #t)) ("2d-doc" . #s((sc-pkg-info pkg-info 3) (catalog "2d-doc") "209614ab3da685f46ece52c2efdf976f1e7697b1" #t "2d")) ("2d-lib" . #s((sc-pkg-info pkg-info 3) (catalog "2d-lib") "8f5dd908df23ee2a698b178971be4e18d1937393" #t "2d")) ("algol60" . #s((sc-pkg-info pkg-info 3) (catalog "algol60") "5a67faec1e3f59e98d5d5c4ee4687a9e9a34962f" #t "algol60")) ("at-exp-lib" . #s(pkg-info (catalog "at-exp-lib") "68787a39b1d862726969eb03e54c6fcbab05d8d4" #t)) ("base" . #s(pkg-info (catalog "base") "249d2a371f12382b1360dd7a77702fb28551133b" #t)) ("cext-lib" . #s(pkg-info (catalog "cext-lib") "1ce5c3f8ef512216a402de1e139a242cf6593999" #t)) ("class-iop-lib" . #s(pkg-info (catalog "class-iop-lib") "29c5747600fa93d2dac540e3381291e45fa09300" #t)) ("compatibility" . #s(pkg-info (catalog "compatibility") "0fd2da43b30b0f27aaafa5d67af21ddf7fe02dd6" #t)) ("compatibility-doc" . #s(pkg-info (catalog "compatibility-doc") "fee62d07a8e143615c24f365c7c48c30e1eebe8c" #t)) ("compatibility-lib" . #s(pkg-info (catalog "compatibility-lib") "8d1011f2f86192a07714e4088ff5e23ca794471a" #t)) ("compiler" . #s(pkg-info (catalog "compiler") "b1a38a648d3cb1adaca66e1d9fb2a3636421f4f8" #t)) ("compiler-lib" . #s(pkg-info (catalog "compiler-lib") "b60403b4873befa5811e5fabb65970a24e0bb950" #t)) ("contract-profile" . #s((sc-pkg-info pkg-info 3) (catalog "contract-profile") "001eec9d842dcd35b6f082934e614ba86a2ab4c0" #t "contract-profile")) ("data" . #s(pkg-info (catalog "data") "98ef519ebf74d40ba645d00933e47fa0a516c96f" #t)) ("data-doc" . #s(pkg-info (catalog "data-doc") "ebfdbebb77721a087efc803f30bec6afe2292097" #t)) ("data-enumerate-lib" . #s(pkg-info (catalog "data-enumerate-lib") "f70dcd6ce6d7b14d1f1cc76b908df7cb2fd61929" #t)) ("data-lib" . #s(pkg-info (catalog "data-lib") "7fb6940020f610c669df432877213bfe79caebc7" #t)) ("datalog" . #s((sc-pkg-info pkg-info 3) (catalog "datalog") "411342493d6022b7d74f7e13955dfdfcf6e62f91" #t "datalog")) ("db" . #s(pkg-info (catalog "db") "13af2037227b04af20e85e2fef78cc9686fc6e3d" #t)) ("db-doc" . #s(pkg-info (catalog "db-doc") "ed6cb9e0f165f5e390347d9a979f994c80e09e6a" #t)) ("db-lib" . #s(pkg-info (catalog "db-lib") "5c97b5ac2a3cf661d85cd7177029ce4686a9391e" #t)) ("deinprogramm" . #s(pkg-info (catalog "deinprogramm") "9e908294790f919de34f67ab3321f57a53f52e36" #t)) ("deinprogramm-signature" . #s(pkg-info (catalog "deinprogramm-signature") "433e0dc1f4f74ef73074ce1c387b06e9e260e212" #t)) ("distributed-places" . #s(pkg-info (catalog "distributed-places") "145c1cedf46768adf061fade24893965840f1643" #t)) ("distributed-places-doc" . #s(pkg-info (catalog "distributed-places-doc") "fda0badbab4441172b33ae31c3b2272ce59bcd3c" #t)) ("distributed-places-lib" . #s(pkg-info (catalog "distributed-places-lib") "db733a858f67c295196d3d5e62d4d1047dbe10c4" #t)) ("draw" . #s(pkg-info (catalog "draw") "1e57984e4a7e93fc30e6f42382b3bdf2d5162759" #t)) ("draw-doc" . #s(pkg-info (catalog "draw-doc") "e7348bde06b88e4261d46eeeb7a1b69cb1c4b5bb" #t)) ("draw-lib" . #s(pkg-info (catalog "draw-lib") "8343a0e4d9c082e2b5da7f36590f3d6f81a90815" #t)) ("drracket" . #s(pkg-info (catalog "drracket") "0233b83af527c6866ce458d5869c02f1c3148569" #t)) ("drracket-plugin-lib" . #s(pkg-info (catalog "drracket-plugin-lib") "c4715aa5984bf8dfe48d44038b4eb81525f7cac7" #t)) ("drracket-tool" . #s(pkg-info (catalog "drracket-tool") "93dcb297ed4ad62cf4605d632da64023bdfc1e69" #t)) ("drracket-tool-doc" . #s(pkg-info (catalog "drracket-tool-doc") "f44fa4ef2a14aaff04d3b26d5b4a701678e42b68" #t)) ("drracket-tool-lib" . #s(pkg-info (catalog "drracket-tool-lib") "f3ca7e15b2592b40c4aaf734cf00126d71e0876d" #t)) ("ds-store" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store") "f3b74900e431d9ca6ee1038fb7dd1e08d759b009" #t "ds-store")) ("ds-store-doc" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-doc") "06b754e0bc7ed6bd6ebf26b8ab4b3ae223ff9e3d" #t "ds-store")) ("ds-store-lib" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-lib") "517b5f727a5df1d7230cfeae5c208433d9717d2a" #t "ds-store")) ("dynext-lib" . #s(pkg-info (catalog "dynext-lib") "6327a91cf80c504524e1de84f2613263e62da80e" #t)) ("eli-tester" . #s(pkg-info (catalog "eli-tester") "0c9bfc31ad180898a7f10af252009084b0de30eb" #t)) ("eopl" . #s((sc-pkg-info pkg-info 3) (catalog "eopl") "b7725c60cac4f51be2fefef5bc393857c07dc0af" #t "eopl")) ("errortrace" . #s(pkg-info (catalog "errortrace") "f8d7f00c7dacc7d1bb2bc99c76129798319881e7" #t)) ("errortrace-doc" . #s(pkg-info (catalog "errortrace-doc") "aea79310a7f250d43325f82467b4c4126338a425" #t)) ("errortrace-lib" . #s(pkg-info (catalog "errortrace-lib") "0b7417f006208d6c8fb5f4fa61e1099a970f1fc2" #t)) ("frtime" . #s((sc-pkg-info pkg-info 3) (catalog "frtime") "83bf86eb4a5f6b1a2f53ac8f7b0c265ca8e27839" #t "frtime")) ("future-visualizer" . #s(pkg-info (catalog "future-visualizer") "76bc592353681f3d673841d65230deecd901ee8f" #t)) ("future-visualizer-typed" . #s(pkg-info (catalog "future-visualizer-typed") "a1698d4264a5267ac49b2451211e3391216a4e82" #t)) ("games" . #s((sc-pkg-info pkg-info 3) (catalog "games") "0ad78fb4ec37b6f19435b7599a566c1bb2e5847c" #t "games")) ("gui" . #s(pkg-info (catalog "gui") "a74759a9030789bdea8a324bd69cad5e162c5937" #t)) ("gui-doc" . #s(pkg-info (catalog "gui-doc") "e79b96b5ded5e81a5beeb33d905d7e7ccd893074" #t)) ("gui-lib" . #s(pkg-info (catalog "gui-lib") "35c5e9a5dd69ba6839210d49e6c967ba418e9cc4" #t)) ("gui-pkg-manager-lib" . #s(pkg-info (catalog "gui-pkg-manager-lib") "1e0d8a3f2a60642e785c0459108f1be6034dbcb1" #t)) ("htdp" . #s(pkg-info (catalog "htdp") "6e222eff85bae1b326f4282d8b82fc5c83202cfe" #t)) ("htdp-doc" . #s(pkg-info (catalog "htdp-doc") "e5892b0ae846f64e997e34ae2afb165b35f290b9" #t)) ("htdp-lib" . #s(pkg-info (catalog "htdp-lib") "1f18bce701e14d76fa2e4f14f8cded185b00a66d" #t)) ("html" . #s(pkg-info (catalog "html") "59ab0bddd4935969e2af0469ad48a9c30f33ef60" #t)) ("html-doc" . #s(pkg-info (catalog "html-doc") "3cd2a18da0b91b209d196f0cf669f2e59829d2bc" #t)) ("html-lib" . #s(pkg-info (catalog "html-lib") "2b17b0447932ee0a5287581269d24b5e3e9dcbb5" #t)) ("icons" . #s((sc-pkg-info pkg-info 3) (catalog "icons") "77e8f436f370ce8d88aa39622c5921664b56845b" #t "icons")) ("images" . #s(pkg-info (catalog "images") "98c6a0e120eb1115db9d376759b245db0591b07b" #t)) ("images-doc" . #s(pkg-info (catalog "images-doc") "99e114a7c7e234b6eaa23f99f863d03986bd62b5" #t)) ("images-gui-lib" . #s(pkg-info (catalog "images-gui-lib") "fef0ec840d82ed975370087fdcb049e0cce8e339" #t)) ("images-lib" . #s(pkg-info (catalog "images-lib") "9dcdc2e2388c63063a4a161e09585119d8d18e88" #t)) ("lazy" . #s((sc-pkg-info pkg-info 3) (catalog "lazy") "8038fc1a353a1618a5c19feecd7de1150719a9fc" #t "lazy")) ("macro-debugger" . #s(pkg-info (catalog "macro-debugger") "448277bb97132d25236deb785dce8c81933235d2" #t)) ("macro-debugger-text-lib" . #s(pkg-info (catalog "macro-debugger-text-lib") "0549dc476d9f071569d59359dbe6e4039f8af250" #t)) ("main-distribution" . #s(pkg-info (catalog "main-distribution") "3d0f4e0314c4b437feb7c3b86ff69cf20ad1e0f0" #f)) ("make" . #s((sc-pkg-info pkg-info 3) (catalog "make") "93e3f1b4144e3a04392b753cedc34c7c49e63fe5" #t "make")) ("math" . #s(pkg-info (catalog "math") "bc288b3ed293e90ef3a4eb05971d388265dc7065" #t)) ("math-doc" . #s(pkg-info (catalog "math-doc") "119b215101c0f1f82b6d28e06f5288812f38f2c3" #t)) ("math-lib" . #s(pkg-info (catalog "math-lib") "4e159abc47c306364ad02549853c1ddf82d6f8a2" #t)) ("mysterx" . #s((sc-pkg-info pkg-info 3) (catalog "mysterx") "23487c08b23cb7d965b97b0c45e6e3553854b869" #t "mysterx")) ("mzcom" . #s((sc-pkg-info pkg-info 3) (catalog "mzcom") "ac97bd1dc80a2f867d17f75254a8bbb9faa24afd" #t "mzcom")) ("mzscheme" . #s(pkg-info (catalog "mzscheme") "2a45b98e73f899324f2c5678d93df74f1792d23c" #t)) ("mzscheme-doc" . #s(pkg-info (catalog "mzscheme-doc") "de48e8b819047025177fac06b6f254e6f939fd23" #t)) ("mzscheme-lib" . #s(pkg-info (catalog "mzscheme-lib") "a6a2ec7fd0946a46c5368dbe1d7602419f8e7b53" #t)) ("net" . #s(pkg-info (catalog "net") "5df16fb466651bbb270a30296b1e8ee5f86af6fe" #t)) ("net-cookies" . #s(pkg-info (catalog "net-cookies") "51f6db09a36adbeb73e6bfc25bcd7d2123cc563e" #t)) ("net-cookies-doc" . #s(pkg-info (catalog "net-cookies-doc") "c1380af8407ce13dc993830db20250d7348117a8" #t)) ("net-cookies-lib" . #s(pkg-info (catalog "net-cookies-lib") "12f95b8fa1d9d562cd2bc7b499dd2fdc7111d122" #t)) ("net-doc" . #s(pkg-info (catalog "net-doc") "effd2e00136f037f9c524e25973ffa0b4b5f6ab8" #t)) ("net-lib" . #s(pkg-info (catalog "net-lib") "c0e7e3b3d55d067fa1fa3d13736877f33fe4fe76" #t)) ("optimization-coach" . #s(pkg-info (catalog "optimization-coach") "79ef3e4ec8de133f6f0b1838218b9478ba22d9bc" #t)) ("option-contract" . #s(pkg-info (catalog "option-contract") "14f8553d264972db98ecb25007f0c62f72c88837" #t)) ("option-contract-doc" . #s(pkg-info (catalog "option-contract-doc") "12d4da169785f5af1e8e38357713656385b4a75d" #t)) ("option-contract-lib" . #s(pkg-info (catalog "option-contract-lib") "f01bff6dccd0e6cf8721ac9cf3a819c5a9fd25b7" #t)) ("parser-tools" . #s(pkg-info (catalog "parser-tools") "7c90da6b7e8b13a5faed4d196f29f74d24c308a3" #t)) ("parser-tools-doc" . #s(pkg-info (catalog "parser-tools-doc") "d3d05e4f5f175f790775c835317034e8f6b6394e" #t)) ("parser-tools-lib" . #s(pkg-info (catalog "parser-tools-lib") "22eaaae7d2dc79755eaf96029554ebb48fb7ccaf" #t)) ("pconvert-lib" . #s(pkg-info (catalog "pconvert-lib") "cf75aa36ac881f36c9f845f9b3d5c75bb016caac" #t)) ("pict" . #s(pkg-info (catalog "pict") "b58b1e3ff96f16f62a8ca6e52efcf143d02c2552" #t)) ("pict-doc" . #s(pkg-info (catalog "pict-doc") "8e95db03fae67b105bd6afdce6c4dfcaf587c2c9" #t)) ("pict-lib" . #s(pkg-info (catalog "pict-lib") "2abed1569d91f15fa61d95e11f53d5cbbef610e1" #t)) ("pict-snip" . #s(pkg-info (catalog "pict-snip") "07039265dc698b136044724e4802b64517ba5209" #t)) ("pict-snip-doc" . #s(pkg-info (catalog "pict-snip-doc") "2453a4852fc2987b42f4ad4f6e92a1a448418db5" #t)) ("pict-snip-lib" . #s(pkg-info (catalog "pict-snip-lib") "28f4f45649589e010ab6c6cdc3e82ac9ff1fbe7f" #t)) ("picturing-programs" . #s(pkg-info (catalog "picturing-programs") "325870110f44e006c228f41619b5c77f331b82a1" #t)) ("plai" . #s(pkg-info (catalog "plai") "6ac6f533410efd33f655d51314228c77c83172ac" #t)) ("plai-doc" . #s((sc-pkg-info pkg-info 3) (catalog "plai-doc") "c8363060f66e1bd1ddc72c8271e86cf3fcbeff9e" #t "plai")) ("plai-lib" . #s((sc-pkg-info pkg-info 3) (catalog "plai-lib") "978f240e75c6ad1a4843a010fe250d9977e93339" #t "plai")) ("planet" . #s(pkg-info (catalog "planet") "e1a53854ddae4cf4eef667a91f3c944eb1481371" #t)) ("planet-doc" . #s(pkg-info (catalog "planet-doc") "0356d590361d2b909c717e97dc4f9eb2b567461a" #t)) ("planet-lib" . #s(pkg-info (catalog "planet-lib") "a0993c8b1c3ae0f08f75a6e70d785dfa3e7adf66" #t)) ("plot" . #s(pkg-info (catalog "plot") "898a4c570ed38396d684f260efa240d66accead9" #t)) ("plot-compat" . #s(pkg-info (catalog "plot-compat") "01b129e6ee41080f090c02054d07c7856ae2c06c" #t)) ("plot-doc" . #s(pkg-info (catalog "plot-doc") "70b006d5da401955e00000fcf6a3aacc296cd687" #t)) ("plot-gui-lib" . #s(pkg-info (catalog "plot-gui-lib") "57d49ac10de7a4d2520fe8a3c625eb91e6af8359" #t)) ("plot-lib" . #s(pkg-info (catalog "plot-lib") "84fecbb718ed024176c79f271f30579f5d753339" #t)) ("preprocessor" . #s((sc-pkg-info pkg-info 3) (catalog "preprocessor") "38fc7981a096322c67e4f7d9afac6f1fe664529e" #t "preprocessor")) ("profile" . #s(pkg-info (catalog "profile") "2183f9722eb2efbe2c8feb400b73602ad97fe221" #t)) ("profile-doc" . #s(pkg-info (catalog "profile-doc") "1d7c7dd2ad37e0d6c842cf30c7a01a631b18a39e" #t)) ("profile-lib" . #s((sc-pkg-info pkg-info 3) (catalog "profile-lib") "4eed8ba01f406d199604b3727c405c2bf368a617" #t "profile")) ("quickscript" . #s((sc-pkg-info pkg-info 3) (catalog "quickscript") "0c531a78067442fb5ac2b404f92c92427cff8bec" #t "quickscript")) ("r5rs" . #s(pkg-info (catalog "r5rs") "febae235a352df6df59a2e2c45b8658322793103" #t)) ("r5rs-doc" . #s(pkg-info (catalog "r5rs-doc") "3b842a310c928a0647b0c29cb3eabe215270f8e2" #t)) ("r5rs-lib" . #s(pkg-info (catalog "r5rs-lib") "9fcc4ebda67e44abd34e6c97a1448cd9a3947b77" #t)) ("r6rs" . #s(pkg-info (catalog "r6rs") "2ba0a84b06e7ab0ab49308fb6b58c23b29e39662" #t)) ("r6rs-doc" . #s(pkg-info (catalog "r6rs-doc") "972c5762a28dd773190c7aa46f9b972ac7c4c44e" #t)) ("r6rs-lib" . #s(pkg-info (catalog "r6rs-lib") "0a80a45a9666924b02b7e41002b3122b0b0606e3" #t)) ("racket-cheat" . #s((sc-pkg-info pkg-info 3) (catalog "racket-cheat") "11ef1c76f6459d0039e13cdc04326f5c54c28714" #t "racket-cheat")) ("racket-doc" . #s(pkg-info (catalog "racket-doc") "7c41f0b0ae91a7d77da4d4f15c2e5e2f6ab5c689" #t)) ("racket-index" . #s(pkg-info (catalog "racket-index") "ec294cafcf79f9a7034d02b4b3ff8c2e2a717622" #t)) ("racket-lib" . #s(pkg-info (catalog "racket-lib") "addde48592db0ba3db8686c37951f20c7112d368" #f)) ("racklog" . #s((sc-pkg-info pkg-info 3) (catalog "racklog") "a587b4aa82ff470e0646185cce033900e1bdafa8" #t "racklog")) ("rackunit" . #s(pkg-info (catalog "rackunit") "4b9de5253bfc93a4ba11e527bed3314d48ab0fc8" #t)) ("rackunit-doc" . #s(pkg-info (catalog "rackunit-doc") "26d22124d6eab4c79b73d778deef7b9bc73c2dec" #t)) ("rackunit-gui" . #s(pkg-info (catalog "rackunit-gui") "4cb8bc7487ff6bd55f653708d51f29fb75b490e2" #t)) ("rackunit-lib" . #s(pkg-info (catalog "rackunit-lib") "0069571fffeb268232fab1db7e9c6e8ea124f1ac" #t)) ("rackunit-plugin-lib" . #s(pkg-info (catalog "rackunit-plugin-lib") "a663951f3c13e3a6c0228949d97c6b2eef4a5b6c" #t)) ("rackunit-typed" . #s((sc-pkg-info pkg-info 3) (catalog "rackunit-typed") "d3ea39520e71e1fdcdaee0a4218575592c44a41a" #t "typed")) ("readline" . #s(pkg-info (catalog "readline") "4c7e66cd27cf4408832c87e3ee86df7a6eefa09d" #t)) ("readline-doc" . #s(pkg-info (catalog "readline-doc") "3bded5f74e621afb05b47f4fb05e455d8c2ee3f7" #t)) ("readline-lib" . #s(pkg-info (catalog "readline-lib") "a5182fa3edd32b9d63e6c355ccb372e0310a9d6d" #t)) ("realm" . #s((sc-pkg-info pkg-info 3) (catalog "realm") "f013fc3db6882ece583015d48f0ad8e1e971601d" #t "realm")) ("redex" . #s(pkg-info (catalog "redex") "57c8ddc62fd86b0ede08e92a7e47d35527768e99" #t)) ("redex-benchmark" . #s(pkg-info (catalog "redex-benchmark") "2433d94442a5f32f16d152656b168d1e6218aaa7" #t)) ("redex-doc" . #s(pkg-info (catalog "redex-doc") "6cedd1cfdc891d7ac3b46fcfe7767a4681443515" #t)) ("redex-examples" . #s(pkg-info (catalog "redex-examples") "98a38101bd790fa6bd8ff16ce8e2fb65245cb87c" #t)) ("redex-gui-lib" . #s(pkg-info (catalog "redex-gui-lib") "80083d5cded16afb0d45a59cdd655ddd396b8685" #t)) ("redex-lib" . #s(pkg-info (catalog "redex-lib") "04c6bc3954bf30293e0b5cfe76294a799e2f1aae" #t)) ("redex-pict-lib" . #s(pkg-info (catalog "redex-pict-lib") "9b13a5976edd63728d8914fc20bffb5ad981302f" #t)) ("sandbox-lib" . #s(pkg-info (catalog "sandbox-lib") "5b6080ff4052f881c343f6ccc847f860acb501a9" #t)) ("sasl" . #s((sc-pkg-info pkg-info 3) (catalog "sasl") "8dc49968c1ef11c5dd77f56c5979453a36d2c750" #t "sasl")) ("sasl-doc" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-doc") "02b6cf131a97af9caa622a77592bb851f5d58fa3" #t "sasl")) ("sasl-lib" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-lib") "d4ecdad04e42658a69d70d2f7d5eadae7ed7d16e" #t "sasl")) ("scheme-lib" . #s(pkg-info (catalog "scheme-lib") "22e71c59ac20b09cd156062ce0fb0afb86aaa851" #t)) ("schemeunit" . #s((sc-pkg-info pkg-info 3) (catalog "schemeunit") "03986b499744194a9e06a66dfe988bed9fb8cc40" #t "schemeunit")) ("scribble" . #s(pkg-info (catalog "scribble") "862cac10d6934b0dca35b4ebace9ffa0faa3a381" #t)) ("scribble-doc" . #s(pkg-info (catalog "scribble-doc") "fc38088b2924e7d902ceafc94243fd3ca2a52b45" #t)) ("scribble-html-lib" . #s(pkg-info (catalog "scribble-html-lib") "13105ce2064fa963c535187a657792e1ec95d284" #t)) ("scribble-lib" . #s(pkg-info (catalog "scribble-lib") "9be1c71d1c0f3f0d41031416689f012a16ba535a" #t)) ("scribble-text-lib" . #s(pkg-info (catalog "scribble-text-lib") "1d816dcc95b5f6d77ff6633b82a6dd40f7effe4e" #t)) ("serialize-cstruct-lib" . #s(pkg-info (catalog "serialize-cstruct-lib") "caeab596cb494273bcb84b917205a66bd06d0528" #t)) ("sgl" . #s((sc-pkg-info pkg-info 3) (catalog "sgl") "a2feb4952e01c7e02af068978ade81d0a213e035" #t "sgl")) ("shell-completion" . #s((sc-pkg-info pkg-info 3) (catalog "shell-completion") "900d6f81d7f78d17ac1789436c36a3314f09fcec" #t "shell-completion")) ("slatex" . #s((sc-pkg-info pkg-info 3) (catalog "slatex") "7a36270767b37d0336b4d72c7ca89140f395f9af" #t "slatex")) ("slideshow" . #s(pkg-info (catalog "slideshow") "62d9fa5b5fc8f1b82fb7acae427e474488fb1c2a" #t)) ("slideshow-doc" . #s(pkg-info (catalog "slideshow-doc") "d023178269517583e08ea3afc13bd8e867e86eaa" #t)) ("slideshow-exe" . #s(pkg-info (catalog "slideshow-exe") "4764478f8f62ba0a9d66ef064945af605cac48cc" #t)) ("slideshow-lib" . #s(pkg-info (catalog "slideshow-lib") "b7d301d8496d23dd950606d50a2c9565067f77f5" #t)) ("slideshow-plugin" . #s(pkg-info (catalog "slideshow-plugin") "50fe3549998180cf9391d355fce67c1b95fee846" #t)) ("snip" . #s(pkg-info (catalog "snip") "f6401933decce0674344953461fc80be6b600748" #t)) ("snip-lib" . #s(pkg-info (catalog "snip-lib") "8cf6a919d5d9021f782423b3712a0e73cf93842a" #t)) ("source-syntax" . #s((sc-pkg-info pkg-info 3) (catalog "source-syntax") "b6dde72b228b3e8e7da35fbc25cce395c8dce9cb" #t "syntax")) ("srfi" . #s(pkg-info (catalog "srfi") "810795b1c70213bba3e3f02c29c0ec0be774d551" #t)) ("srfi-doc" . #s(pkg-info (catalog "srfi-doc") "9bcb860c00d8023421c3ab3e2785ab8ee92b8f9d" #t)) ("srfi-doc-nonfree" . #s(pkg-info (catalog "srfi-doc-nonfree") "6ac01197bd6a33c21ff69684704e73739708d92c" #t)) ("srfi-lib" . #s(pkg-info (catalog "srfi-lib") "8dd9d951c94054ec60a4e1d59fa2c1a462e8fff6" #t)) ("srfi-lite-lib" . #s(pkg-info (catalog "srfi-lite-lib") "2a40a8ecf4a2368b6c84d8f0bdd1c72df4f3cc7f" #t)) ("string-constants" . #s(pkg-info (catalog "string-constants") "602234aee270ea040b993f8146548aa0c835ee41" #t)) ("string-constants-doc" . #s(pkg-info (catalog "string-constants-doc") "627c9a564c187d9dbd2a1c6de302e38ed8cd105e" #t)) ("string-constants-lib" . #s(pkg-info (catalog "string-constants-lib") "85764e7ecf8df819142221a84380340c23607e18" #t)) ("swindle" . #s((sc-pkg-info pkg-info 3) (catalog "swindle") "56793a3d43336a0dfc1fb6d4933a6a7d0a6f18a6" #t "swindle")) ("syntax-color" . #s(pkg-info (catalog "syntax-color") "0ab7c010c146aacbc26f81d73050e5dcb1ec44a4" #t)) ("syntax-color-doc" . #s(pkg-info (catalog "syntax-color-doc") "ebc23963c2f235893a2ae998311c439ca5f2de5e" #t)) ("syntax-color-lib" . #s(pkg-info (catalog "syntax-color-lib") "c496941837238109ebf69e6a2a3740136baf077e" #t)) ("testing-util-lib" . #s(pkg-info (catalog "testing-util-lib") "6ad76708f90cc3938a72d556458f92cde3e30578" #t)) ("tex-table" . #s((sc-pkg-info pkg-info 3) (catalog "tex-table") "c6127491120f723f26dbba30d217e4f2aeb12084" #t "mrlib")) ("trace" . #s((sc-pkg-info pkg-info 3) (catalog "trace") "953c7b5e344cfc8859006ffbfce4fdf360647d81" #t "trace")) ("typed-racket" . #s(pkg-info (catalog "typed-racket") "7896fb7492e6230f58d73d202ce9e6f77e3f98b7" #t)) ("typed-racket-compatibility" . #s(pkg-info (catalog "typed-racket-compatibility") "1bf2425d25d54c653d693290f41e9587847357a6" #t)) ("typed-racket-doc" . #s(pkg-info (catalog "typed-racket-doc") "d338099f40c47dbfb62f699206e99cfdfa7e32d6" #t)) ("typed-racket-lib" . #s(pkg-info (catalog "typed-racket-lib") "3eff82ebcceeab467c35cf19044013c83a47bd32" #t)) ("typed-racket-more" . #s(pkg-info (catalog "typed-racket-more") "600a695a0f59fe2740cf9e2080a13e25310a5114" #t)) ("unix-socket" . #s(pkg-info (catalog "unix-socket") "c015b6081883e19b3f1d2343bddca9895499832c" #t)) ("unix-socket-doc" . #s(pkg-info (catalog "unix-socket-doc") "b5d7f058cd0984aef1d8214968e79c202b972636" #t)) ("unix-socket-lib" . #s(pkg-info (catalog "unix-socket-lib") "e8d16e6cf98e03dc141ce410e7fddb83eb420e54" #t)) ("web-server" . #s(pkg-info (catalog "web-server") "9e01035046e279382ab2c1aa5c3f68d7533afd64" #t)) ("web-server-doc" . #s(pkg-info (catalog "web-server-doc") "afb48732580aaf70f2d13dc0f3115f25672a0fb6" #t)) ("web-server-lib" . #s(pkg-info (catalog "web-server-lib") "1fb4a0c9718b0e835d730f92289f9855018dfee3" #t)) ("wxme" . #s(pkg-info (catalog "wxme") "a56f70bd66b595d03baa8fb60046c3826b3abaaa" #t)) ("wxme-lib" . #s(pkg-info (catalog "wxme-lib") "75d7ad58da6d6fe5e3b5d81fe3f1e73b37460ae5" #t)) ("xrepl" . #s(pkg-info (catalog "xrepl") "c577bf792fde613ada8dc08f3b76b9daf3fc6814" #t)) ("xrepl-doc" . #s(pkg-info (catalog "xrepl-doc") "1724207363217dc4e931ac92e017c594a7a2a44b" #t)) ("xrepl-lib" . #s(pkg-info (catalog "xrepl-lib") "829e38b7ffcd0508842871b5aa354a531ddee4fa" #t)) ("zo-lib" . #s(pkg-info (catalog "zo-lib") "0f00c96ccaf933002e5c1e9f6b9e8856cbcd04eb" #t)))
++#hash(("2d" . #s(pkg-info (catalog "2d") "fc82a7bd227d7f3b8852351fc6bf34948a7750b8" #t)) ("2d-doc" . #s((sc-pkg-info pkg-info 3) (catalog "2d-doc") "209614ab3da685f46ece52c2efdf976f1e7697b1" #t "2d")) ("2d-lib" . #s((sc-pkg-info pkg-info 3) (catalog "2d-lib") "8f5dd908df23ee2a698b178971be4e18d1937393" #t "2d")) ("algol60" . #s((sc-pkg-info pkg-info 3) (catalog "algol60") "5a67faec1e3f59e98d5d5c4ee4687a9e9a34962f" #t "algol60")) ("at-exp-lib" . #s(pkg-info (catalog "at-exp-lib") "68787a39b1d862726969eb03e54c6fcbab05d8d4" #t)) ("base" . #s(pkg-info (catalog "base") "249d2a371f12382b1360dd7a77702fb28551133b" #t)) ("cext-lib" . #s(pkg-info (catalog "cext-lib") "1ce5c3f8ef512216a402de1e139a242cf6593999" #t)) ("class-iop-lib" . #s(pkg-info (catalog "class-iop-lib") "29c5747600fa93d2dac540e3381291e45fa09300" #t)) ("compatibility" . #s(pkg-info (catalog "compatibility") "0fd2da43b30b0f27aaafa5d67af21ddf7fe02dd6" #t)) ("compatibility-doc" . #s(pkg-info (catalog "compatibility-doc") "fee62d07a8e143615c24f365c7c48c30e1eebe8c" #t)) ("compatibility-lib" . #s(pkg-info (catalog "compatibility-lib") "8d1011f2f86192a07714e4088ff5e23ca794471a" #t)) ("compiler" . #s(pkg-info (catalog "compiler") "b1a38a648d3cb1adaca66e1d9fb2a3636421f4f8" #t)) ("compiler-lib" . #s(pkg-info (catalog "compiler-lib") "b60403b4873befa5811e5fabb65970a24e0bb950" #t)) ("contract-profile" . #s((sc-pkg-info pkg-info 3) (catalog "contract-profile") "001eec9d842dcd35b6f082934e614ba86a2ab4c0" #t "contract-profile")) ("data" . #s(pkg-info (catalog "data") "98ef519ebf74d40ba645d00933e47fa0a516c96f" #t)) ("data-doc" . #s(pkg-info (catalog "data-doc") "ebfdbebb77721a087efc803f30bec6afe2292097" #t)) ("data-enumerate-lib" . #s(pkg-info (catalog "data-enumerate-lib") "f70dcd6ce6d7b14d1f1cc76b908df7cb2fd61929" #t)) ("data-lib" . #s(pkg-info (catalog "data-lib") "7fb6940020f610c669df432877213bfe79caebc7" #t)) ("datalog" . #s((sc-pkg-info pkg-info 3) (catalog "datalog") "411342493d6022b7d74f7e13955dfdfcf6e62f91" #t "datalog")) ("db" . #s(pkg-info (catalog "db") "13af2037227b04af20e85e2fef78cc9686fc6e3d" #t)) ("db-doc" . #s(pkg-info (catalog "db-doc") "ed6cb9e0f165f5e390347d9a979f994c80e09e6a" #t)) ("db-lib" . #s(pkg-info (catalog "db-lib") "5c97b5ac2a3cf661d85cd7177029ce4686a9391e" #t)) ("deinprogramm" . #s(pkg-info (catalog "deinprogramm") "9e908294790f919de34f67ab3321f57a53f52e36" #t)) ("deinprogramm-signature" . #s(pkg-info (catalog "deinprogramm-signature") "433e0dc1f4f74ef73074ce1c387b06e9e260e212" #t)) ("distributed-places" . #s(pkg-info (catalog "distributed-places") "145c1cedf46768adf061fade24893965840f1643" #t)) ("distributed-places-doc" . #s(pkg-info (catalog "distributed-places-doc") "fda0badbab4441172b33ae31c3b2272ce59bcd3c" #t)) ("distributed-places-lib" . #s(pkg-info (catalog "distributed-places-lib") "db733a858f67c295196d3d5e62d4d1047dbe10c4" #t)) ("draw" . #s(pkg-info (catalog "draw") "1e57984e4a7e93fc30e6f42382b3bdf2d5162759" #t)) ("draw-doc" . #s(pkg-info (catalog "draw-doc") "e7348bde06b88e4261d46eeeb7a1b69cb1c4b5bb" #t)) ("draw-lib" . #s(pkg-info (catalog "draw-lib") "8343a0e4d9c082e2b5da7f36590f3d6f81a90815" #t)) ("drracket" . #s(pkg-info (catalog "drracket") "0233b83af527c6866ce458d5869c02f1c3148569" #t)) ("drracket-plugin-lib" . #s(pkg-info (catalog "drracket-plugin-lib") "c4715aa5984bf8dfe48d44038b4eb81525f7cac7" #t)) ("drracket-tool" . #s(pkg-info (catalog "drracket-tool") "93dcb297ed4ad62cf4605d632da64023bdfc1e69" #t)) ("drracket-tool-doc" . #s(pkg-info (catalog "drracket-tool-doc") "f44fa4ef2a14aaff04d3b26d5b4a701678e42b68" #t)) ("drracket-tool-lib" . #s(pkg-info (catalog "drracket-tool-lib") "f3ca7e15b2592b40c4aaf734cf00126d71e0876d" #t)) ("ds-store" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store") "f3b74900e431d9ca6ee1038fb7dd1e08d759b009" #t "ds-store")) ("ds-store-doc" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-doc") "06b754e0bc7ed6bd6ebf26b8ab4b3ae223ff9e3d" #t "ds-store")) ("ds-store-lib" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-lib") "517b5f727a5df1d7230cfeae5c208433d9717d2a" #t "ds-store")) ("dynext-lib" . #s(pkg-info (catalog "dynext-lib") "6327a91cf80c504524e1de84f2613263e62da80e" #t)) ("eli-tester" . #s(pkg-info (catalog "eli-tester") "0c9bfc31ad180898a7f10af252009084b0de30eb" #t)) ("eopl" . #s((sc-pkg-info pkg-info 3) (catalog "eopl") "b7725c60cac4f51be2fefef5bc393857c07dc0af" #t "eopl")) ("errortrace" . #s(pkg-info (catalog "errortrace") "f8d7f00c7dacc7d1bb2bc99c76129798319881e7" #t)) ("errortrace-doc" . #s(pkg-info (catalog "errortrace-doc") "aea79310a7f250d43325f82467b4c4126338a425" #t)) ("errortrace-lib" . #s(pkg-info (catalog "errortrace-lib") "0b7417f006208d6c8fb5f4fa61e1099a970f1fc2" #t)) ("frtime" . #s((sc-pkg-info pkg-info 3) (catalog "frtime") "83bf86eb4a5f6b1a2f53ac8f7b0c265ca8e27839" #t "frtime")) ("future-visualizer" . #s(pkg-info (catalog "future-visualizer") "76bc592353681f3d673841d65230deecd901ee8f" #t)) ("future-visualizer-typed" . #s(pkg-info (catalog "future-visualizer-typed") "a1698d4264a5267ac49b2451211e3391216a4e82" #t)) ("games" . #s((sc-pkg-info pkg-info 3) (catalog "games") "0ad78fb4ec37b6f19435b7599a566c1bb2e5847c" #t "games")) ("gui" . #s(pkg-info (catalog "gui") "a74759a9030789bdea8a324bd69cad5e162c5937" #t)) ("gui-doc" . #s(pkg-info (catalog "gui-doc") "e79b96b5ded5e81a5beeb33d905d7e7ccd893074" #t)) ("gui-lib" . #s(pkg-info (catalog "gui-lib") "35c5e9a5dd69ba6839210d49e6c967ba418e9cc4" #t)) ("gui-pkg-manager-lib" . #s(pkg-info (catalog "gui-pkg-manager-lib") "1e0d8a3f2a60642e785c0459108f1be6034dbcb1" #t)) ("htdp" . #s(pkg-info (catalog "htdp") "6e222eff85bae1b326f4282d8b82fc5c83202cfe" #t)) ("htdp-doc" . #s(pkg-info (catalog "htdp-doc") "e5892b0ae846f64e997e34ae2afb165b35f290b9" #t)) ("htdp-lib" . #s(pkg-info (catalog "htdp-lib") "1f18bce701e14d76fa2e4f14f8cded185b00a66d" #t)) ("html" . #s(pkg-info (catalog "html") "59ab0bddd4935969e2af0469ad48a9c30f33ef60" #t)) ("html-doc" . #s(pkg-info (catalog "html-doc") "3cd2a18da0b91b209d196f0cf669f2e59829d2bc" #t)) ("html-lib" . #s(pkg-info (catalog "html-lib") "2b17b0447932ee0a5287581269d24b5e3e9dcbb5" #t)) ("icons" . #s((sc-pkg-info pkg-info 3) (catalog "icons") "77e8f436f370ce8d88aa39622c5921664b56845b" #t "icons")) ("images" . #s(pkg-info (catalog "images") "98c6a0e120eb1115db9d376759b245db0591b07b" #t)) ("images-doc" . #s(pkg-info (catalog "images-doc") "99e114a7c7e234b6eaa23f99f863d03986bd62b5" #t)) ("images-gui-lib" . #s(pkg-info (catalog "images-gui-lib") "fef0ec840d82ed975370087fdcb049e0cce8e339" #t)) ("images-lib" . #s(pkg-info (catalog "images-lib") "9dcdc2e2388c63063a4a161e09585119d8d18e88" #t)) ("lazy" . #s((sc-pkg-info pkg-info 3) (catalog "lazy") "8038fc1a353a1618a5c19feecd7de1150719a9fc" #t "lazy")) ("macro-debugger" . #s(pkg-info (catalog "macro-debugger") "448277bb97132d25236deb785dce8c81933235d2" #t)) ("macro-debugger-text-lib" . #s(pkg-info (catalog "macro-debugger-text-lib") "0549dc476d9f071569d59359dbe6e4039f8af250" #t)) ("main-distribution" . #s(pkg-info (catalog "main-distribution") "3d0f4e0314c4b437feb7c3b86ff69cf20ad1e0f0" #f)) ("make" . #s((sc-pkg-info pkg-info 3) (catalog "make") "93e3f1b4144e3a04392b753cedc34c7c49e63fe5" #t "make")) ("math" . #s(pkg-info (catalog "math") "bc288b3ed293e90ef3a4eb05971d388265dc7065" #t)) ("math-doc" . #s(pkg-info (catalog "math-doc") "119b215101c0f1f82b6d28e06f5288812f38f2c3" #t)) ("math-lib" . #s(pkg-info (catalog "math-lib") "4e159abc47c306364ad02549853c1ddf82d6f8a2" #t)) ("mysterx" . #s((sc-pkg-info pkg-info 3) (catalog "mysterx") "23487c08b23cb7d965b97b0c45e6e3553854b869" #t "mysterx")) ("mzcom" . #s((sc-pkg-info pkg-info 3) (catalog "mzcom") "ac97bd1dc80a2f867d17f75254a8bbb9faa24afd" #t "mzcom")) ("mzscheme" . #s(pkg-info (catalog "mzscheme") "2a45b98e73f899324f2c5678d93df74f1792d23c" #t)) ("mzscheme-doc" . #s(pkg-info (catalog "mzscheme-doc") "de48e8b819047025177fac06b6f254e6f939fd23" #t)) ("mzscheme-lib" . #s(pkg-info (catalog "mzscheme-lib") "a6a2ec7fd0946a46c5368dbe1d7602419f8e7b53" #t)) ("net" . #s(pkg-info (catalog "net") "5df16fb466651bbb270a30296b1e8ee5f86af6fe" #t)) ("net-cookies" . #s(pkg-info (catalog "net-cookies") "51f6db09a36adbeb73e6bfc25bcd7d2123cc563e" #t)) ("net-cookies-doc" . #s(pkg-info (catalog "net-cookies-doc") "c1380af8407ce13dc993830db20250d7348117a8" #t)) ("net-cookies-lib" . #s(pkg-info (catalog "net-cookies-lib") "12f95b8fa1d9d562cd2bc7b499dd2fdc7111d122" #t)) ("net-doc" . #s(pkg-info (catalog "net-doc") "effd2e00136f037f9c524e25973ffa0b4b5f6ab8" #t)) ("net-lib" . #s(pkg-info (catalog "net-lib") "c0e7e3b3d55d067fa1fa3d13736877f33fe4fe76" #t)) ("optimization-coach" . #s(pkg-info (catalog "optimization-coach") "79ef3e4ec8de133f6f0b1838218b9478ba22d9bc" #t)) ("option-contract" . #s(pkg-info (catalog "option-contract") "14f8553d264972db98ecb25007f0c62f72c88837" #t)) ("option-contract-doc" . #s(pkg-info (catalog "option-contract-doc") "12d4da169785f5af1e8e38357713656385b4a75d" #t)) ("option-contract-lib" . #s(pkg-info (catalog "option-contract-lib") "f01bff6dccd0e6cf8721ac9cf3a819c5a9fd25b7" #t)) ("parser-tools" . #s(pkg-info (catalog "parser-tools") "7c90da6b7e8b13a5faed4d196f29f74d24c308a3" #t)) ("parser-tools-doc" . #s(pkg-info (catalog "parser-tools-doc") "d3d05e4f5f175f790775c835317034e8f6b6394e" #t)) ("parser-tools-lib" . #s(pkg-info (catalog "parser-tools-lib") "22eaaae7d2dc79755eaf96029554ebb48fb7ccaf" #t)) ("pconvert-lib" . #s(pkg-info (catalog "pconvert-lib") "cf75aa36ac881f36c9f845f9b3d5c75bb016caac" #t)) ("pict" . #s(pkg-info (catalog "pict") "b58b1e3ff96f16f62a8ca6e52efcf143d02c2552" #t)) ("pict-doc" . #s(pkg-info (catalog "pict-doc") "8e95db03fae67b105bd6afdce6c4dfcaf587c2c9" #t)) ("pict-lib" . #s(pkg-info (catalog "pict-lib") "2abed1569d91f15fa61d95e11f53d5cbbef610e1" #t)) ("pict-snip" . #s(pkg-info (catalog "pict-snip") "07039265dc698b136044724e4802b64517ba5209" #t)) ("pict-snip-doc" . #s(pkg-info (catalog "pict-snip-doc") "2453a4852fc2987b42f4ad4f6e92a1a448418db5" #t)) ("pict-snip-lib" . #s(pkg-info (catalog "pict-snip-lib") "28f4f45649589e010ab6c6cdc3e82ac9ff1fbe7f" #t)) ("picturing-programs" . #s(pkg-info (catalog "picturing-programs") "325870110f44e006c228f41619b5c77f331b82a1" #t)) ("plai" . #s(pkg-info (catalog "plai") "6ac6f533410efd33f655d51314228c77c83172ac" #t)) ("plai-doc" . #s((sc-pkg-info pkg-info 3) (catalog "plai-doc") "c8363060f66e1bd1ddc72c8271e86cf3fcbeff9e" #t "plai")) ("plai-lib" . #s((sc-pkg-info pkg-info 3) (catalog "plai-lib") "978f240e75c6ad1a4843a010fe250d9977e93339" #t "plai")) ("planet" . #s(pkg-info (catalog "planet") "e1a53854ddae4cf4eef667a91f3c944eb1481371" #t)) ("planet-doc" . #s(pkg-info (catalog "planet-doc") "0356d590361d2b909c717e97dc4f9eb2b567461a" #t)) ("planet-lib" . #s(pkg-info (catalog "planet-lib") "a0993c8b1c3ae0f08f75a6e70d785dfa3e7adf66" #t)) ("plot" . #s(pkg-info (catalog "plot") "898a4c570ed38396d684f260efa240d66accead9" #t)) ("plot-compat" . #s(pkg-info (catalog "plot-compat") "01b129e6ee41080f090c02054d07c7856ae2c06c" #t)) ("plot-doc" . #s(pkg-info (catalog "plot-doc") "70b006d5da401955e00000fcf6a3aacc296cd687" #t)) ("plot-gui-lib" . #s(pkg-info (catalog "plot-gui-lib") "57d49ac10de7a4d2520fe8a3c625eb91e6af8359" #t)) ("plot-lib" . #s(pkg-info (catalog "plot-lib") "84fecbb718ed024176c79f271f30579f5d753339" #t)) ("preprocessor" . #s((sc-pkg-info pkg-info 3) (catalog "preprocessor") "38fc7981a096322c67e4f7d9afac6f1fe664529e" #t "preprocessor")) ("profile" . #s(pkg-info (catalog "profile") "2183f9722eb2efbe2c8feb400b73602ad97fe221" #t)) ("profile-doc" . #s(pkg-info (catalog "profile-doc") "1d7c7dd2ad37e0d6c842cf30c7a01a631b18a39e" #t)) ("profile-lib" . #s((sc-pkg-info pkg-info 3) (catalog "profile-lib") "4eed8ba01f406d199604b3727c405c2bf368a617" #t "profile")) ("quickscript" . #s((sc-pkg-info pkg-info 3) (catalog "quickscript") "0c531a78067442fb5ac2b404f92c92427cff8bec" #t "quickscript")) ("r5rs" . #s(pkg-info (catalog "r5rs") "febae235a352df6df59a2e2c45b8658322793103" #t)) ("r5rs-doc" . #s(pkg-info (catalog "r5rs-doc") "3b842a310c928a0647b0c29cb3eabe215270f8e2" #t)) ("r5rs-lib" . #s(pkg-info (catalog "r5rs-lib") "9fcc4ebda67e44abd34e6c97a1448cd9a3947b77" #t)) ("r6rs" . #s(pkg-info (catalog "r6rs") "2ba0a84b06e7ab0ab49308fb6b58c23b29e39662" #t)) ("r6rs-doc" . #s(pkg-info (catalog "r6rs-doc") "972c5762a28dd773190c7aa46f9b972ac7c4c44e" #t)) ("r6rs-lib" . #s(pkg-info (catalog "r6rs-lib") "0a80a45a9666924b02b7e41002b3122b0b0606e3" #t)) ("racket-cheat" . #s((sc-pkg-info pkg-info 3) (catalog "racket-cheat") "11ef1c76f6459d0039e13cdc04326f5c54c28714" #t "racket-cheat")) ("racket-doc" . #s(pkg-info (catalog "racket-doc") "7c41f0b0ae91a7d77da4d4f15c2e5e2f6ab5c689" #t)) ("racket-index" . #s(pkg-info (catalog "racket-index") "ec294cafcf79f9a7034d02b4b3ff8c2e2a717622" #t)) ("racket-lib" . #s(pkg-info (catalog "racket-lib") "addde48592db0ba3db8686c37951f20c7112d368" #f)) ("racklog" . #s((sc-pkg-info pkg-info 3) (catalog "racklog") "a587b4aa82ff470e0646185cce033900e1bdafa8" #t "racklog")) ("rackunit" . #s(pkg-info (catalog "rackunit") "4b9de5253bfc93a4ba11e527bed3314d48ab0fc8" #t)) ("rackunit-doc" . #s(pkg-info (catalog "rackunit-doc") "26d22124d6eab4c79b73d778deef7b9bc73c2dec" #t)) ("rackunit-gui" . #s(pkg-info (catalog "rackunit-gui") "4cb8bc7487ff6bd55f653708d51f29fb75b490e2" #t)) ("rackunit-lib" . #s(pkg-info (catalog "rackunit-lib") "0069571fffeb268232fab1db7e9c6e8ea124f1ac" #t)) ("rackunit-plugin-lib" . #s(pkg-info (catalog "rackunit-plugin-lib") "a663951f3c13e3a6c0228949d97c6b2eef4a5b6c" #t)) ("rackunit-typed" . #s((sc-pkg-info pkg-info 3) (catalog "rackunit-typed") "d3ea39520e71e1fdcdaee0a4218575592c44a41a" #t "typed")) ("readline" . #s(pkg-info (catalog "readline") "4c7e66cd27cf4408832c87e3ee86df7a6eefa09d" #t)) ("readline-doc" . #s(pkg-info (catalog "readline-doc") "3bded5f74e621afb05b47f4fb05e455d8c2ee3f7" #t)) ("readline-lib" . #s(pkg-info (catalog "readline-lib") "a5182fa3edd32b9d63e6c355ccb372e0310a9d6d" #t)) ("realm" . #s((sc-pkg-info pkg-info 3) (catalog "realm") "f013fc3db6882ece583015d48f0ad8e1e971601d" #t "realm")) ("redex" . #s(pkg-info (catalog "redex") "57c8ddc62fd86b0ede08e92a7e47d35527768e99" #t)) ("redex-benchmark" . #s(pkg-info (catalog "redex-benchmark") "2433d94442a5f32f16d152656b168d1e6218aaa7" #t)) ("redex-doc" . #s(pkg-info (catalog "redex-doc") "6cedd1cfdc891d7ac3b46fcfe7767a4681443515" #t)) ("redex-examples" . #s(pkg-info (catalog "redex-examples") "98a38101bd790fa6bd8ff16ce8e2fb65245cb87c" #t)) ("redex-gui-lib" . #s(pkg-info (catalog "redex-gui-lib") "80083d5cded16afb0d45a59cdd655ddd396b8685" #t)) ("redex-lib" . #s(pkg-info (catalog "redex-lib") "04c6bc3954bf30293e0b5cfe76294a799e2f1aae" #t)) ("redex-pict-lib" . #s(pkg-info (catalog "redex-pict-lib") "9b13a5976edd63728d8914fc20bffb5ad981302f" #t)) ("sandbox-lib" . #s(pkg-info (catalog "sandbox-lib") "5b6080ff4052f881c343f6ccc847f860acb501a9" #t)) ("sasl" . #s((sc-pkg-info pkg-info 3) (catalog "sasl") "8dc49968c1ef11c5dd77f56c5979453a36d2c750" #t "sasl")) ("sasl-doc" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-doc") "02b6cf131a97af9caa622a77592bb851f5d58fa3" #t "sasl")) ("sasl-lib" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-lib") "d4ecdad04e42658a69d70d2f7d5eadae7ed7d16e" #t "sasl")) ("scheme-lib" . #s(pkg-info (catalog "scheme-lib") "22e71c59ac20b09cd156062ce0fb0afb86aaa851" #t)) ("schemeunit" . #s((sc-pkg-info pkg-info 3) (catalog "schemeunit") "03986b499744194a9e06a66dfe988bed9fb8cc40" #t "schemeunit")) ("scribble" . #s(pkg-info (catalog "scribble") "862cac10d6934b0dca35b4ebace9ffa0faa3a381" #t)) ("scribble-doc" . #s(pkg-info (catalog "scribble-doc") "fc38088b2924e7d902ceafc94243fd3ca2a52b45" #t)) ("scribble-html-lib" . #s(pkg-info (catalog "scribble-html-lib") "13105ce2064fa963c535187a657792e1ec95d284" #t)) ("scribble-lib" . #s(pkg-info (catalog "scribble-lib") "9be1c71d1c0f3f0d41031416689f012a16ba535a" #t)) ("scribble-text-lib" . #s(pkg-info (catalog "scribble-text-lib") "1d816dcc95b5f6d77ff6633b82a6dd40f7effe4e" #t)) ("serialize-cstruct-lib" . #s(pkg-info (catalog "serialize-cstruct-lib") "caeab596cb494273bcb84b917205a66bd06d0528" #t)) ("sgl" . #s((sc-pkg-info pkg-info 3) (catalog "sgl") "a2feb4952e01c7e02af068978ade81d0a213e035" #t "sgl")) ("shell-completion" . #s((sc-pkg-info pkg-info 3) (catalog "shell-completion") "900d6f81d7f78d17ac1789436c36a3314f09fcec" #t "shell-completion")) ("slatex" . #s((sc-pkg-info pkg-info 3) (catalog "slatex") "7a36270767b37d0336b4d72c7ca89140f395f9af" #t "slatex")) ("slideshow" . #s(pkg-info (catalog "slideshow") "62d9fa5b5fc8f1b82fb7acae427e474488fb1c2a" #t)) ("slideshow-doc" . #s(pkg-info (catalog "slideshow-doc") "d023178269517583e08ea3afc13bd8e867e86eaa" #t)) ("slideshow-exe" . #s(pkg-info (catalog "slideshow-exe") "4764478f8f62ba0a9d66ef064945af605cac48cc" #t)) ("slideshow-lib" . #s(pkg-info (catalog "slideshow-lib") "b7d301d8496d23dd950606d50a2c9565067f77f5" #t)) ("slideshow-plugin" . #s(pkg-info (catalog "slideshow-plugin") "50fe3549998180cf9391d355fce67c1b95fee846" #t)) ("snip" . #s(pkg-info (catalog "snip") "f6401933decce0674344953461fc80be6b600748" #t)) ("snip-lib" . #s(pkg-info (catalog "snip-lib") "8cf6a919d5d9021f782423b3712a0e73cf93842a" #t)) ("source-syntax" . #s((sc-pkg-info pkg-info 3) (catalog "source-syntax") "b6dde72b228b3e8e7da35fbc25cce395c8dce9cb" #t "syntax")) ("srfi" . #s(pkg-info (catalog "srfi") "810795b1c70213bba3e3f02c29c0ec0be774d551" #t)) ("srfi-doc" . #s(pkg-info (catalog "srfi-doc") "9bcb860c00d8023421c3ab3e2785ab8ee92b8f9d" #t)) ("srfi-lib" . #s(pkg-info (catalog "srfi-lib") "8dd9d951c94054ec60a4e1d59fa2c1a462e8fff6" #t)) ("srfi-lite-lib" . #s(pkg-info (catalog "srfi-lite-lib") "2a40a8ecf4a2368b6c84d8f0bdd1c72df4f3cc7f" #t)) ("string-constants" . #s(pkg-info (catalog "string-constants") "602234aee270ea040b993f8146548aa0c835ee41" #t)) ("string-constants-doc" . #s(pkg-info (catalog "string-constants-doc") "627c9a564c187d9dbd2a1c6de302e38ed8cd105e" #t)) ("string-constants-lib" . #s(pkg-info (catalog "string-constants-lib") "85764e7ecf8df819142221a84380340c23607e18" #t)) ("swindle" . #s((sc-pkg-info pkg-info 3) (catalog "swindle") "56793a3d43336a0dfc1fb6d4933a6a7d0a6f18a6" #t "swindle")) ("syntax-color" . #s(pkg-info (catalog "syntax-color") "0ab7c010c146aacbc26f81d73050e5dcb1ec44a4" #t)) ("syntax-color-doc" . #s(pkg-info (catalog "syntax-color-doc") "ebc23963c2f235893a2ae998311c439ca5f2de5e" #t)) ("syntax-color-lib" . #s(pkg-info (catalog "syntax-color-lib") "c496941837238109ebf69e6a2a3740136baf077e" #t)) ("testing-util-lib" . #s(pkg-info (catalog "testing-util-lib") "6ad76708f90cc3938a72d556458f92cde3e30578" #t)) ("tex-table" . #s((sc-pkg-info pkg-info 3) (catalog "tex-table") "c6127491120f723f26dbba30d217e4f2aeb12084" #t "mrlib")) ("trace" . #s((sc-pkg-info pkg-info 3) (catalog "trace") "953c7b5e344cfc8859006ffbfce4fdf360647d81" #t "trace")) ("typed-racket" . #s(pkg-info (catalog "typed-racket") "7896fb7492e6230f58d73d202ce9e6f77e3f98b7" #t)) ("typed-racket-compatibility" . #s(pkg-info (catalog "typed-racket-compatibility") "1bf2425d25d54c653d693290f41e9587847357a6" #t)) ("typed-racket-doc" . #s(pkg-info (catalog "typed-racket-doc") "d338099f40c47dbfb62f699206e99cfdfa7e32d6" #t)) ("typed-racket-lib" . #s(pkg-info (catalog "typed-racket-lib") "3eff82ebcceeab467c35cf19044013c83a47bd32" #t)) ("typed-racket-more" . #s(pkg-info (catalog "typed-racket-more") "600a695a0f59fe2740cf9e2080a13e25310a5114" #t)) ("unix-socket" . #s(pkg-info (catalog "unix-socket") "c015b6081883e19b3f1d2343bddca9895499832c" #t)) ("unix-socket-doc" . #s(pkg-info (catalog "unix-socket-doc") "b5d7f058cd0984aef1d8214968e79c202b972636" #t)) ("unix-socket-lib" . #s(pkg-info (catalog "unix-socket-lib") "e8d16e6cf98e03dc141ce410e7fddb83eb420e54" #t)) ("web-server" . #s(pkg-info (catalog "web-server") "9e01035046e279382ab2c1aa5c3f68d7533afd64" #t)) ("web-server-doc" . #s(pkg-info (catalog "web-server-doc") "afb48732580aaf70f2d13dc0f3115f25672a0fb6" #t)) ("web-server-lib" . #s(pkg-info (catalog "web-server-lib") "1fb4a0c9718b0e835d730f92289f9855018dfee3" #t)) ("wxme" . #s(pkg-info (catalog "wxme") "a56f70bd66b595d03baa8fb60046c3826b3abaaa" #t)) ("wxme-lib" . #s(pkg-info (catalog "wxme-lib") "75d7ad58da6d6fe5e3b5d81fe3f1e73b37460ae5" #t)) ("xrepl" . #s(pkg-info (catalog "xrepl") "c577bf792fde613ada8dc08f3b76b9daf3fc6814" #t)) ("xrepl-doc" . #s(pkg-info (catalog "xrepl-doc") "1724207363217dc4e931ac92e017c594a7a2a44b" #t)) ("xrepl-lib" . #s(pkg-info (catalog "xrepl-lib") "829e38b7ffcd0508842871b5aa354a531ddee4fa" #t)) ("zo-lib" . #s(pkg-info (catalog "zo-lib") "0f00c96ccaf933002e5c1e9f6b9e8856cbcd04eb" #t)))
+diff -urN racket-7.4-orig/share/pkgs/srfi/info.rkt racket-7.4-remove-nonfree/share/pkgs/srfi/info.rkt
+--- racket-7.4-orig/share/pkgs/srfi/info.rkt 2019-08-03 23:24:08.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi/info.rkt 2019-08-28 09:26:35.582382386 -0400
+@@ -1 +1 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.4"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc" "srfi-doc-nonfree"))) (define implies (quote ("srfi-lib" "srfi-doc" "srfi-doc-nonfree"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
++(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.4"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc"))) (define implies (quote ("srfi-lib" "srfi-doc"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/info.rkt racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/info.rkt
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/info.rkt 2019-08-03 23:24:10.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1 +0,0 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.4"))) (define collection (quote multi)) (define build-deps (quote ("mzscheme-doc" "scheme-lib" "base" "scribble-lib" "srfi-doc" "racket-doc" "r5rs-doc" "r6rs-doc" "compatibility-lib"))) (define pkg-desc "non-free documentation for \"srfi-lib\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 2019-08-03 21:32:26.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,3 +0,0 @@
+-#lang info
+-
+-(define scribblings '(("srfi-nf.scrbl" (multi-page) (library 100))))
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 2019-08-03 21:32:26.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 1969-12-31 19:00:00.000000000 -0500
+@@ -1,68 +0,0 @@
+-#lang scribble/doc
+-@(require srfi/scribblings/util
+- scribble/manual
+- scribble/eval
+- scriblib/render-cond
+- scribble/core
+- scribble/html-properties
+- (for-syntax scheme/base)
+- (for-label scheme/base
+- racket/stream))
+-
+-@; ----------------------------------------------------------------------
+-
+-@title{SRFI Nonfree Libraries and Documentation}
+-
+-The @link[#:style srfi-std "http://srfi.schemers.org/"]{Scheme Requests for
+-Implementation} (a.k.a. @deftech{SRFI}) process allows individual
+-members of the Scheme community to propose libraries and extensions to
+-be supported by multiple Scheme implementations.
+-
+-Racket is distributed with implementations of many SRFIs, most of
+-which can be implemented as libraries. To import the bindings of SRFI
+-@math{n}, use
+-
+-@racketblock[
+-(require @#,elem{@racketidfont{srfi/}@math{n}})
+-]
+-
+-This document lists the SRFIs that are supported by Racket and
+-provides a link to the original SRFI specification (which is also
+-distributed as part of Racket's documentation).
+-
+-The following SRFI specification documents are licensed restrictively.
+-
+-@table-of-contents[]
+-
+-
+-@; ----------------------------------------
+-
+-@srfi[5]{A compatible let form with signatures and rest arguments}
+-
+-@redirect[5 '(
+- (let #t "unnamed")
+-)]
+-
+-Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package.
+-Only the SRFI specification document is nonfree.
+-
+-@; ----------------------------------------
+-
+-@srfi[29]{Localization}
+-
+-@redirect[29 '(
+- (current-language #f "current-language")
+- (current-country #f "current-country")
+- (current-locale-details #f "current-locale-details")
+- (declare-bundle! #f "declare-bundle!")
+- (store-bundle #f "store-bundle")
+- (load-bundle! #f "load-bundle!")
+- (localized-template #f "localized-template")
+-)]
+-
+-Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package.
+-Only the SRFI specification document is nonfree.
+-
+-@; ----------------------------------------
+-
+-@index-section[]
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 2019-08-03 21:32:26.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
+@@ -1,507 +0,0 @@
+-<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
+-<html>
+- <head>
+- <meta name="generator" content="HTML Tidy, see www.w3.org">
+- <title>SRFI 29: Localization</title>
+- <meta name="author" content="Scott G. Miller">
+- <meta name="description" content="Localization">
+- </head>
+- <body>
+- <H1>Title</H1>
+-
+- SRFI 29: Localization
+-
+- <H1>Author</H1>
+-
+- Scott G. Miller
+-
+- <H1>Abstract</H1>
+-
+- This document specifies an interface to retrieving and
+- displaying locale sensitive messages. A Scheme program can
+- register one or more translations of templated messages, and
+- then write Scheme code that can transparently retrieve the
+- appropriate message for the locale under which the Scheme
+- system is running. <br>
+-
+-
+- <H1>Rationale</H1>
+-
+- <p>As any programmer that has ever had to deal with making his
+- or her code readable in more than one locale, the process of
+- sufficiently abstracting program messages from their
+- presentation to the user is non-trivial without help from the
+- programming language. Most modern programming language
+- libraries do provide some mechanism for performing this
+- separation.</p>
+-
+- <p>A portable API that allows a piece of code to run without
+- modification in different countries and under different
+- languages is a must for any non-trivial software project.
+- The interface should separate the logic of a program from
+- the myriad of translations that may be necessary.</p>
+-
+- <p>The interface described in this document provides such
+- functionality. The underlying implementation is also allowed to
+- use whatever datastructures it likes to provide access to the
+- translations in the most efficient manner possible. In
+- addition, the implementation is provided with standardized
+- functions that programs will use for accessing an external,
+- unspecified repository of translations.</p>
+-
+- <p>This interface <i>does not</i> cover all aspects of
+- localization, including support for non-latin characters,
+- number and date formatting, etc. Such functionality is the
+- scope of a future SRFI that may extend this one.</p>
+-
+- <H1>Dependencies</H1>
+-
+- An SRFI-29 conformant implementation must also implement
+- SRFI-28, Basic Format Strings. Message templates are strings
+- that must be processed by the <tt>format</tt> function
+- specified in that SRFI.
+-
+- <H1>Specification</H1>
+-
+- <h3>Message Bundles</h3>
+-
+- <p>A Message Bundle is a set of message templates and their
+- identifying keys. Each bundle contains one or more such
+- key/value pairs. The bundle itself is associated with a
+- <i>bundle specifier</i> which uniquely identifies the
+- bundle.</p>
+-
+- <h3>Bundle Specifiers</h3>
+-
+- <p>A Bundle Specifier is a Scheme list that describes, in order
+- of importance, the package and locale of a message bundle.
+- In most cases, a locale specifier will have between one
+- and three elements. The first element is a symbol denoting the
+- package for which this bundle applies. The second and third
+- elements denote a <i>locale</i>. The second element (first
+- element of the locale) if present, is the two letter, ISO 639-1
+- language code for the bundle. The third element, if present, is
+- a two letter ISO 3166-1 country code. In some cases, a
+- fourth element may be present, specifying the encoding used for
+- the bundle. All bundle specifier elements are Scheme
+- symbols.</p>
+-
+- <p>If only one translation is provided, it should be designated
+- only by a package name, for example <tt>(mathlib)</tt>. This
+- translation is called the <i>default</i> translation.</p>
+-
+- <h3>Bundle Searching</h3>
+-
+- <p>When a message template is retrieved from a bundle, the
+- Scheme implementation will provide the locale under which the
+- system is currently running. When the template is retrieved,
+- the package name will be specified. The Scheme system should
+- construct a Bundle Specifier from the provided package name and
+- the active locale. For example, when retrieving a message
+- template for French Canadian, in the <tt>mathlib</tt> package,
+- the bundle specifier '<tt>(mathlib fr ca)</tt>' is used. A
+- program may also retrieve the elements of the current locale
+- using the no-argument procedures:</p>
+-
+- <p><b><a name="current-language"></a><tt>current-language</tt></b> <tt>->
+- <i>symbol</i></tt><br>
+- <tt><b>current-language</b> <i>symbol</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- When given no arguments, returns the current ISO 639-1
+- language code as a symbol. If provided with an
+- argument, the current language is set to that named by the
+- symbol for the currently executing Scheme thread (or for the
+- entire Scheme system if such a distinction is not possible).
+-
+- </blockquote>
+-
+- <p><b><a name="current-country"></a><tt>current-country</tt></b> <tt>->
+- <i>symbol</i></tt><br>
+- <tt><b>current-country</b> <i>symbol</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- returns the current ISO 3166-1 country code as a symbol.
+- If provided with an argument, the current country is
+- set to that named by the symbol for the currently executing
+- Scheme thread (or for the entire Scheme system if such a
+- distinction is not possible).
+- </blockquote>
+-
+- <p><b><a name="current-locale-details"></a><tt>current-locale-details</tt></b> <tt>-> <i>list of
+- symbol</i></tt>s<br>
+- <tt><b>current-locale-details</b> <i>list-of-symbols</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- Returns a list of additional locale details as a list of
+- symbols. This list may contain information about
+- encodings or other more specific information. If
+- provided with an argument, the current locale details are set
+- to those given in the currently executing Scheme thread (or
+- for the entire Scheme system if such a distinction is not
+- possible).
+- </blockquote>
+-
+- <p>The Scheme System should first check for a bundle with the
+- exact name provided. If no such bundle is found, the last
+- element from the list is removed and a search is tried for a
+- bundle with that name. If no bundle is then found, the list is
+- shortened by removing the last element again. If no message is
+- found and the bundle specifier is now the empty list, an error
+- should be raised.</p>
+-
+- <p>The reason for this search order is to provide the most
+- locale sensitive template possible, but to fall back on more
+- general templates if a translation has not yet been provided
+- for the given locale.</p>
+-
+- <h3>Message Templates</h3>
+-
+- <p>A message template is a localized message that may or may
+- not contain one of a number of formatting codes. A message
+- template is a Scheme string. The string is of a form that can
+- be processed by the <tt>format</tt> procedure found in many
+- Scheme systems and formally specified in SRFI-28 (Basic Format
+- Strings).</p>
+-
+- <p>This SRFI also extends SRFI-28 to provide an additional
+- <tt>format</tt> escape code:</p>
+-
+- <blockquote>
+- <tt>~[n]@*</tt> - Causes a value-requiring escape code that
+- follows this code immediately to reference the [N]'th
+- optional value absolutely, rather than the next unconsumed
+- value. The referenced value is <i>not</i> consumed.
+- </blockquote>
+- This extension allows optional values to be positionally
+- referenced, so that message templates can be constructed that
+- can produce the proper word ordering for a language.
+-
+- <h3>Preparing Bundles</h3>
+- Before a bundle may be used by the Scheme system to retrieve
+- localized template messages, they must be made available to the
+- Scheme system. This SRFI specifies a way to portably
+- define the bundles, as well as store them in and retrieve them
+- from an unspecified system which may be provided by resources
+- outside the Scheme system.<br>
+-
+-
+- <p><b><a name="declare-bundle!"></a><tt>declare-bundle!</tt></b> <tt><i>bundle-specifier
+- association-list</i> -> undefined<br>
+- </tt></p>
+-
+- <blockquote>
+- Declares a new bundle named by the given bundle-specifier.
+- The contents of the bundle are defined by the provided
+- association list. The list contains associations
+- between Scheme symbols and the message templates (Scheme
+- strings) they name. If a bundle already exists with the
+- given name, it is overwritten with the newly declared
+- bundle.<br>
+- </blockquote>
+- <tt><a name="store-bundle"></a><b>store-bundle</b> <i>bundle-specifier</i> ->
+- boolean</tt><br>
+-
+-
+- <blockquote>
+- Attempts to store a bundle named by the given bundle
+- specifier, and previously made available using
+- <tt>declare-bundle!</tt> or <tt>load-bundle!</tt>, in an
+- unspecified mechanism that may be persistent across Scheme
+- system restarts. If successful, a non-false value is
+- returned. If unsuccessful, <tt>#f</tt> is returned.<br>
+- </blockquote>
+- <tt><a name="load-bundle!"></a><b>load-bundle!</b> <i>bundle-specifier</i> ->
+- boolean</tt><br>
+-
+-
+- <blockquote>
+- Attempts to retrieve a bundle from an unspecified mechanism
+- which stores bundles outside the Scheme system. If the
+- bundle was retrieved successfully, the function returns a
+- non-false value, and the bundle is immediately available to
+- the Scheme system. If the bundle could not be found or loaded
+- successfully, the function returns <tt>#f</tt>, and the
+- Scheme system's bundle registry remains unaffected.<br>
+- </blockquote>
+- A compliant Scheme system may choose not to provide any
+- external mechanism to store localized bundles. If it does
+- not, it must still provide implementations for
+- <tt>store-bundle</tt> and <tt>load-bundle!</tt>. In such a
+- case, both functions must return <tt>#f</tt> regardless of the
+- arguments given. Users of this SRFI should recognize that the
+- inability to load or store a localized bundle in an external
+- repository is <i>not</i> a fatal error.<br>
+-
+-
+- <h3>Retrieving Localized Message Templates</h3>
+-
+- <p><a name="localized-template"></a><b><tt>localized-template</tt></b> <i><tt>package-name
+- message-template-name</tt></i> <tt>-> <i>string or #f<br>
+- </i></tt></p>
+-
+- <blockquote>
+- Retrieves a localized message template for the given package
+- name and the given message template name (both symbols).
+- If no such message could be found, false (#f) is
+- returned.<br>
+- <br>
+- </blockquote>
+- After retrieving a template, the calling program can use
+- <tt>format</tt> to produce a string that can be displayed to
+- the user.<br>
+-
+-
+- <h2>Examples</h2>
+- The below example makes use of SRFI-29 to display simple,
+- localized messages. It also defines its bundles in such a
+- way that the Scheme system may store and retrieve the bundles
+- from a more efficient system catalog, if available.<br>
+-
+-<pre>
+-(let ((translations
+- '(((en) . ((time . "Its ~a, ~a.")
+- (goodbye . "Goodbye, ~a.")))
+- ((fr) . ((time . "~1@*~a, c'est ~a.")
+- (goodbye . "Au revoir, ~a."))))))
+- (for-each (lambda (translation)
+- (let ((bundle-name (cons 'hello-program (car translation))))
+- (if (not (load-bundle! bundle-name))
+- (begin
+- (declare-bundle! bundle-name (cdr translation))
+- (store-bundle! bundle-name)))))
+- translations))
+-
+-(define localized-message
+- (lambda (message-name . args)
+- (apply format (cons (localized-template 'hello-program
+- message-name)
+- args))))
+-
+-(let ((myname "Fred"))
+- (display (localized-message 'time "12:00" myname))
+- (display #\newline)
+-
+- (display (localized-message 'goodbye myname))
+- (display #\newline))
+-
+-;; Displays (English):
+-;; Its 12:00, Fred.
+-;; Goodbye, Fred.
+-;;
+-;; French:
+-;; Fred, c'est 12:00.
+-;; Au revoir, Fred.
+-</pre>
+-
+- <H1>Implementation</H1>
+-
+- <p>The implementation requires that the Scheme system provide a
+- definition for <tt>current-language</tt> and
+- <tt>current-country</tt> capable of distinguishing the correct
+- locale present during a Scheme session. The definitions of
+- those functions in the reference implementation are not capable
+- of that distinction. Their implementation is provided only so
+- that the following code can run in any R4RS scheme system.
+- <br>
+- </p>
+-
+- <p>In addition, the below implementation of a compliant
+- <tt>format</tt> requires SRFI-6 (Basic String Ports) and
+- SRFI-23 (Error reporting)</p>
+-<pre>
+-;; The association list in which bundles will be stored
+-(define *localization-bundles* '())
+-
+-;; The current-language and current-country functions provided
+-;; here must be rewritten for each Scheme system to default to the
+-;; actual locale of the session
+-(define current-language
+- (let ((current-language-value 'en))
+- (lambda args
+- (if (null? args)
+- current-language-value
+- (set! current-language-value (car args))))))
+-
+-(define current-country
+- (let ((current-country-value 'us))
+- (lambda args
+- (if (null? args)
+- current-country-value
+- (set! current-country-value (car args))))))
+-
+-;; The load-bundle! and store-bundle! both return #f in this
+-;; reference implementation. A compliant implementation need
+-;; not rewrite these procedures.
+-(define load-bundle!
+- (lambda (bundle-specifier)
+- #f))
+-
+-(define store-bundle!
+- (lambda (bundle-specifier)
+- #f))
+-
+-;; Declare a bundle of templates with a given bundle specifier
+-(define declare-bundle!
+- (letrec ((remove-old-bundle
+- (lambda (specifier bundle)
+- (cond ((null? bundle) '())
+- ((equal? (caar bundle) specifier)
+- (cdr bundle))
+- (else (cons (car bundle)
+- (remove-old-bundle specifier
+- (cdr bundle))))))))
+- (lambda (bundle-specifier bundle-assoc-list)
+- (set! *localization-bundles*
+- (cons (cons bundle-specifier bundle-assoc-list)
+- (remove-old-bundle bundle-specifier
+- *localization-bundles*))))))
+-
+-;;Retrieve a localized template given its package name and a template name
+-(define localized-template
+- (letrec ((rdc
+- (lambda (ls)
+- (if (null? (cdr ls))
+- '()
+- (cons (car ls) (rdc (cdr ls))))))
+- (find-bundle
+- (lambda (specifier template-name)
+- (cond ((assoc specifier *localization-bundles*) =>
+- (lambda (bundle) bundle))
+- ((null? specifier) #f)
+- (else (find-bundle (rdc specifier)
+- template-name))))))
+- (lambda (package-name template-name)
+- (let loop ((specifier (cons package-name
+- (list (current-language)
+- (current-country)))))
+- (and (not (null? specifier))
+- (let ((bundle (find-bundle specifier template-name)))
+- (and bundle
+- (cond ((assq template-name bundle) => cdr)
+- ((null? (cdr specifier)) #f)
+- (else (loop (rdc specifier)))))))))))
+-
+-;;An SRFI-28 and SRFI-29 compliant version of format. It requires
+-;;SRFI-23 for error reporting.
+-(define format
+- (lambda (format-string . objects)
+- (let ((buffer (open-output-string)))
+- (let loop ((format-list (string->list format-string))
+- (objects objects)
+- (object-override #f))
+- (cond ((null? format-list) (get-output-string buffer))
+- ((char=? (car format-list) #\~)
+- (cond ((null? (cdr format-list))
+- (error 'format "Incomplete escape sequence"))
+- ((char-numeric? (cadr format-list))
+- (let posloop ((fl (cddr format-list))
+- (pos (string->number
+- (string (cadr format-list)))))
+- (cond ((null? fl)
+- (error 'format "Incomplete escape sequence"))
+- ((and (eq? (car fl) '#\@)
+- (null? (cdr fl)))
+- (error 'format "Incomplete escape sequence"))
+- ((and (eq? (car fl) '#\@)
+- (eq? (cadr fl) '#\*))
+- (loop (cddr fl) objects (list-ref objects pos)))
+- (else
+- (posloop (cdr fl)
+- (+ (* 10 pos)
+- (string->number
+- (string (car fl)))))))))
+- (else
+- (case (cadr format-list)
+- ((#\a)
+- (cond (object-override
+- (begin
+- (display object-override buffer)
+- (loop (cddr format-list) objects #f)))
+- ((null? objects)
+- (error 'format "No value for escape sequence"))
+- (else
+- (begin
+- (display (car objects) buffer)
+- (loop (cddr format-list)
+- (cdr objects) #f)))))
+- ((#\s)
+- (cond (object-override
+- (begin
+- (display object-override buffer)
+- (loop (cddr format-list) objects #f)))
+- ((null? objects)
+- (error 'format "No value for escape sequence"))
+- (else
+- (begin
+- (write (car objects) buffer)
+- (loop (cddr format-list)
+- (cdr objects) #f)))))
+- ((#\%)
+- (if object-override
+- (error 'format "Escape sequence following positional override does not require a value"))
+- (display #\newline buffer)
+- (loop (cddr format-list) objects #f))
+- ((#\~)
+- (if object-override
+- (error 'format "Escape sequence following positional override does not require a value"))
+- (display #\~ buffer)
+- (loop (cddr format-list) objects #f))
+- (else
+- (error 'format "Unrecognized escape sequence"))))))
+- (else (display (car format-list) buffer)
+- (loop (cdr format-list) objects #f)))))))
+-
+-</pre>
+-
+- <H1>Copyright</H1>
+-
+- Copyright (C) Scott G. Miller (2002). All Rights Reserved.
+-
+- <p>This document and translations of it may be copied and
+- furnished to others, and derivative works that comment on or
+- otherwise explain it or assist in its implementation may be
+- prepared, copied, published and distributed, in whole or in
+- part, without restriction of any kind, provided that the above
+- copyright notice and this paragraph are included on all such
+- copies and derivative works. However, this document itself may
+- not be modified in any way, such as by removing the copyright
+- notice or references to the Scheme Request For Implementation
+- process or editors, except as needed for the purpose of
+- developing SRFIs in which case the procedures for copyrights
+- defined in the SRFI process must be followed, or as required to
+- translate it into languages other than English.</p>
+-
+- <p>The limited permissions granted above are perpetual and will
+- not be revoked by the authors or their successors or
+- assigns.</p>
+-
+- <p>This document and the information contained herein is
+- provided on an "AS IS" basis and THE AUTHOR AND THE SRFI
+- EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+- BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+- HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
+- OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
+- <hr>
+-
+- <address>
+- Editor: <a href="mailto:srfi-editors@srfi.schemers.org">David
+- Rush</a>
+- </address>
+-
+- <address>
+- Author: <a href="mailto:scgmille@freenetproject.org">Scott G.
+- Miller</a>
+- </address>
+- <!-- Created: Tue Sep 29 19:20:08 EDT 1998 -->
+- <!-- hhmts start -->Last modified: Mon Jun 17 12:00:08 Pacific
+- Daylight Time 2002 <!-- hhmts end --> <br>
+- </body>
+-</html>
+-
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 2019-08-03 21:32:26.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
+@@ -1,345 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
+-<html>
+-<head>
+- <title>SRFI 5: A compatible let form with signatures and rest arguments</title>
+-</head>
+-<body>
+-
+-<H1>Title</H1>
+-
+-SRFI-5: A compatible <code>let</code> form with signatures and rest arguments
+-
+-<H1>Author</H1>
+-
+-Andy Gaynor
+-
+-<H1>Status</H1>
+-
+-This SRFI is currently in ``final'' status. To see an explanation of each status that a SRFI can hold, see <A HREF="http://srfi.schemers.org/srfi-process.html">here</A>.
+-You can access the discussion on this SRFI via <A HREF="http://srfi.schemers.org/srfi-5/mail-archive/maillist.html">the archive of the mailing list</A>.
+-<P><UL>
+-<LI>Received: 1999/2/2
+-<LI>Draft: 1999/2/10-1999/04/12
+-<LI>Final: 1999/4/26
+-<LI>Revised reference implementation: 2003/01/27
+-</UL>
+-
+-<H1>Abstract</H1>
+-
+-The <i>named-let</i> incarnation of the <code>let</code> form has two slight
+-inconsistencies with the <code>define</code> form. As defined, the <code>let</code>
+-form makes no accommodation for rest arguments, an issue of functionality
+-and consistency. As defined, the <code>let</code> form does not accommodate
+-signature-style syntax, an issue of aesthetics and consistency. Both
+-issues are addressed here in a manner which is compatible with the traditional
+-<code>let</code> form but for minor extensions.
+-
+-<H1>Rationale</H1>
+-
+-<H2>Signature-style Syntax</H2>
+-
+-Consider the following two equivalent definitions:
+-
+-<p><pre>
+-(define fibonacci
+- (lambda (n i f0 f1)
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1)))))
+-
+-(define (fibonacci n i f0 f1)
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-</pre>
+-
+-Although there is a named-let analog for the former form, there is none
+-for the latter. To wit, suppose one wished to compute the 10th element
+-of the Fibonacci sequence using a named let:
+-
+-<p>
+-<pre>
+-(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-Values: 55
+-</pre>
+-
+-As it stands, one cannot equivalently write
+-
+-<p>
+-<pre>
+-(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-</pre>
+-
+-which is consistent with <code>define</code>'s signature-style form.
+-<p>Those that favor the signature style may prefer this extension.
+-In any case, it may be more appropriate to include all bound names within
+-the binding section. As presented, this straightforward extension
+-introduces no ambiguity or incompatibility with the existing definition
+-of let.
+-
+-<H2>Rest Arguments</H2>
+-
+-As it stands, one cannot write a named let with rest arguments, as in
+-
+-<p>
+-<pre>
+-(let (blast (port (current-output-port)) . (x (+ 1 2) 4 5))
+- (if (null? x)
+- 'just-a-silly-contrived-example
+- (begin
+- (write (car x) port)
+- (apply blast port (cdr x)))))
+-</pre>
+-
+-otherwise equivalent to
+-
+-<p>
+-<pre>
+-(letrec ((blast (lambda (port . x)
+- (if (null? x)
+- 'just-a-silly-contrived-example
+- (begin
+- (write (car x) port)
+- (apply blast port (cdr x)))))))
+- (blast (current-output-port) (+ 1 2) 4 5))
+-</pre>
+-
+-While this example is rather contrived, the functionality is not.
+-There are several times when the author has used this construct in practice.
+-Regardless, there is little reason to deny the <code>let</code> form access to
+-all the features of lambda functionality.
+-
+-<H2>Symbols in Binding Sections</H2>
+-
+-Both the features above rely upon the placement of symbols in <code>let</code>
+-binding lists (this statement is intentially simplistic). The only
+-other apparent use of such symbol placement is to tersely bind variables
+-to unspecified values. For example, one might desire to use
+-<code>(let (foo bar baz) ...)</code>
+-to bind <code>foo</code>, <code>bar</code>, and <code>baz</code> to
+-unspecified values.
+-
+-<p>This usage is considered less important in light of the rationales
+-presented above, and an alternate syntax is immediately apparent, as
+-in <code>(let ((foo) (bar) (baz)) ...)</code> This may even
+-be preferable, consistently parenthesizing normal binding clauses.
+-
+-<H1>Specification</H1>
+-
+-<H2>Syntax</H2>
+-
+-<p>
+-A formal specification of the syntax follows. Below, body, expression,
+-and identifier are free. Each instantiation of binding-name must be
+-unique.
+-</p>
+-
+-<p>
+-<pre>
+- let = "(" "let" let-bindings body ")"
+- expressions = nothing | expression expressions
+- let-bindings = let-name bindings
+- | "(" let-name "." bindings ")"
+- let-name = identifier
+- bindings = "(" ")"
+- | rest-binding
+- | "(" normal-bindings ["." rest-binding] ")"
+-normal-bindings = nothing
+- | normal-binding normal-bindings
+- normal-binding = "(" binding-name expression ")"
+- binding-name = identifier
+- rest-binding = "(" binding-name expressions ")"
+-</pre>
+-
+-<p>
+-For clarity and convenience, an informal specification follows.
+-</p>
+-
+-<ol>
+-<li><a name="unnamed">Unnamed</a>
+-
+-<p><pre>
+-(let ((<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-non-sig">
+-Named, non-signature-style, no rest argument</a>
+-
+-<p><pre>
+-(let <name> ((<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-sig">Named, signature-style, no rest argument</a>
+-
+-<p><pre>
+-(let (<name> (<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-non-sig-rest">Named, non-signature-style, rest argument</a>
+-
+-<p><pre>
+-(let <name> ((<parameter> <argument>)...
+-
+-. (<rest-parameter> <rest-argument>...))
+- <body>...)
+-</pre>
+-
+-<li><a name="named-sig-rest">Named, signature-style, rest argument</a>
+-
+-<p><pre>
+-(let (<name> (<parameter> <argument>)...
+-
+-. (<rest-parameter> <rest-argument>...))
+- <body>...)
+-</pre>
+-</li>
+-</ol>
+-
+-<H2>Semantics</H2>
+-
+-Let <code>$lambda</code> and <code>$letrec</code> be hygienic bindings for the <code>lambda</code>
+-and <code>letrec</code> forms, respectively.
+-
+-<ul>
+-<li>For informal syntax 1:
+-
+-<p><pre>
+-(($lambda (<parameter>...) <body>...) <argument>...)
+-</pre>
+-</li>
+-
+-<li>For informal syntaxes 2 and 3:
+-
+-<p>
+-<pre>
+-($letrec ((<name> ($lambda (<parameter>...) <body>...)))
+- (<name> <argument>...))
+-</pre>
+-</li>
+-
+-<li>For informal syntaxes 4 and 5:
+-
+-<p>
+-<pre>
+-($letrec ((<name> ($lambda (<parameter>...
+-
+-. <rest-parameter>) <body>...)))
+- (<name> <argument>... <rest-argument>...))
+-</pre>
+-</li>
+-</ul>
+-
+-<H1>Implementation</H1>
+-
+-Here is an implementation using <code>SYNTAX-RULES</code>.
+-
+-<p>
+-<pre>
+-;; Use your own standard let.
+-;; Or call a lambda.
+-;; (define-syntax standard-let
+-;;
+-;; (syntax-rules ()
+-;;
+-;; ((let ((var val) ...) body ...)
+-;; ((lambda (var ...) body ...) val ...))))
+-
+-(define-syntax let
+-
+- (syntax-rules ()
+-
+- ;; No bindings: use standard-let.
+- ((let () body ...)
+- (standard-let () body ...))
+- ;; Or call a lambda.
+- ;; ((lambda () body ...))
+-
+- ;; All standard bindings: use standard-let.
+- ((let ((var val) ...) body ...)
+- (standard-let ((var val) ...) body ...))
+- ;; Or call a lambda.
+- ;; ((lambda (var ...) body ...) val ...)
+-
+- ;; One standard binding: loop.
+- ;; The all-standard-bindings clause didn't match,
+- ;; so there must be a rest binding.
+- ((let ((var val) . bindings) body ...)
+- (let-loop #f bindings (var) (val) (body ...)))
+-
+- ;; Signature-style name: loop.
+- ((let (name binding ...) body ...)
+- (let-loop name (binding ...) () () (body ...)))
+-
+- ;; defun-style name: loop.
+- ((let name bindings body ...)
+- (let-loop name bindings () () (body ...)))))
+-
+-(define-syntax let-loop
+-
+- (syntax-rules ()
+-
+- ;; Standard binding: destructure and loop.
+- ((let-loop name ((var0 val0) binding ...) (var ... ) (val ... ) body)
+- (let-loop name ( binding ...) (var ... var0) (val ... val0) body))
+-
+- ;; Rest binding, no name: use standard-let, listing the rest values.
+- ;; Because of let's first clause, there is no "no bindings, no name" clause.
+- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
+- (standard-let ((var val) ... (rest-var (list rest-val ...))) . body))
+- ;; Or call a lambda with a rest parameter on all values.
+- ;; ((lambda (var ... . rest-var) . body) val ... rest-val ...))
+- ;; Or use one of several other reasonable alternatives.
+-
+- ;; No bindings, name: call a letrec'ed lambda.
+- ((let-loop name () (var ...) (val ...) body)
+- ((letrec ((name (lambda (var ...) . body)))
+- name)
+- val ...))
+-
+- ;; Rest binding, name: call a letrec'ed lambda.
+- ((let-loop name (rest-var rest-val ...) (var ...) (val ...) body)
+- ((letrec ((name (lambda (var ... . rest-var) . body)))
+- name)
+- val ... rest-val ...))))
+-</pre>
+-
+-
+-<H1>Copyright</H1>
+-
+-Copyright (C) Andy Gaynor (1999). All Rights Reserved.
+-<p>This document and translations of it may be copied and furnished to
+-others, and derivative works that comment on or otherwise explain it or
+-assist in its implementation may be prepared, copied, published and distributed,
+-in whole or in part, without restriction of any kind, provided that the
+-above copyright notice and this paragraph are included on all such copies
+-and derivative works. However, this document itself may not be modified
+-in any way, such as by removing the copyright notice or references to the
+-Scheme Request For Implementation process or editors, except as needed
+-for the purpose of developing SRFIs in which case the procedures for copyrights
+-defined in the SRFI process must be followed, or as required to translate
+-it into languages other than English.
+-<p>The limited permissions granted above are perpetual and will not be
+-revoked by the authors or their successors or assigns.
+-<p>This document and the information contained herein is provided on an
+-"AS IS" basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES,
+-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
+-USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+-WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+-
+- <hr>
+- <address>Editor: <a href="mailto:srfi-editors@srfi.schemers.org">Mike Sperber</a></address>
+-
+-</body>
+-</html>
diff --git a/racket-configure-c99.patch b/racket-configure-c99.patch
new file mode 100644
index 0000000..f4f4014
--- /dev/null
+++ b/racket-configure-c99.patch
@@ -0,0 +1,29 @@
+Fix generic C99 compatibility issue in the configure script because it
+was generated by a historic autoconf version. This will go away once
+upstream re-runs autoconf, and until then, the patch will keep
+applying, so there is no need to upstream it.
+
+diff --git a/src/lt/configure b/src/lt/configure
+index e3f5aa6ed9a21307..aa4f50637331d427 100755
+--- a/src/lt/configure
++++ b/src/lt/configure
+@@ -2465,7 +2465,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+- '' \
++ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+@@ -3640,8 +3640,8 @@ main ()
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+- exit(2);
+- exit (0);
++ return 2;
++ return 0;
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
diff --git a/racket.spec b/racket.spec
new file mode 100644
index 0000000..1135c4b
--- /dev/null
+++ b/racket.spec
@@ -0,0 +1,442 @@
+Name: racket
+Version: 7.4
+Release: 11%{?dist}
+Summary: General purpose programming language
+
+License: GPLv3 and LGPLv3 and MIT
+URL: https://racket-lang.org
+Source0: https://mirror.racket-lang.org/installers/%{version}/%{name}-%{version}-s...
+
+# Remove SRFI library and docs with restrictive licensing.
+# See: https://github.com/racket/srfi/issues/4 (open)
+# Note: Upstream maintainers have confirmed this
+# is safe, since the removed components are
+# extra elements which nothing else in the
+# package depends on.
+# Note: SRFI 5 was replaced with a FOSS implementation. Only
+# nonfree docs need to be removed by this patch now.
+Patch0: racket-7.4-remove-nonfree.patch
+Patch1: racket-configure-c99.patch
+
+# Issue Building for armv7hl in koji
+ExcludeArch: %{arm} s390x
+
+# To compile the program
+BuildRequires: make
+BuildRequires: gcc
+
+# To fix rpath issue with executables.
+BuildRequires: chrpath
+
+# Racket heavily utilizes the system ffi library.
+BuildRequires: libffi-devel
+
+# For the racket/gui library (via libffi)
+# https://github.com/racket/gui/blob/master/gui-lib/mred/private/wx/gtk/gtk...
+BuildRequires: gtk3
+
+# For the racket/draw library (via libffi)
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/ca...
+BuildRequires: cairo
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/pa...
+BuildRequires: pango
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/pn...
+BuildRequires: libpng
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/jp...
+BuildRequires: libjpeg-turbo
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/gl...
+BuildRequires: glib2
+
+# To validate desktop file
+BuildRequires: desktop-file-utils
+
+BuildRequires: git
+
+# Require the subpackages
+Requires: racket-minimal%{?_isa} = %{version}-%{release}
+Requires: racket-pkgs = %{version}-%{release}
+Recommends: racket-doc = %{version}-%{release}
+
+%description
+Racket is a general-purpose programming language as well as
+the world's first ecosystem for developing and deploying new
+languages. Make your dream language, or use one of the dozens
+already available.
+
+%prep
+
+%autosetup -v -p1
+
+# Remove bundled libffi
+rm -r src/foreign/libffi
+
+%build
+cd src
+
+# Disable SSE on i686 until fixed upstream
+# https://github.com/racket/racket/issues/2245
+%ifarch %{ix86}
+ %set_build_flags
+ export CFLAGS=$(echo $CFLAGS | sed -e "s/-mfpmath=sse *//")
+%endif
+
+# do not use generations on architectures
+# where it is broken
+# (this is currently a no-op, since arm and s390x are not enabled yet.
+# It is art of a fix that will land in a future release)
+%configure \
+%ifarch %{arm} s390x
+ --disable-generations \
+%endif
+ --enable-pthread \
+ --enable-shared \
+ --enable-libffi \
+ --disable-strip
+
+%make_build
+
+%install
+cd src
+%make_install
+
+# Delete mred binaries and replace them with links.
+rm -vf ${RPM_BUILD_ROOT}%{_bindir}/mred
+rm -vf ${RPM_BUILD_ROOT}%{_bindir}/mred-text
+ln -vs %{_bindir}/gracket ${RPM_BUILD_ROOT}%{_bindir}/mred
+ln -vs %{_bindir}/gracket-text ${RPM_BUILD_ROOT}%{_bindir}/mred-text
+
+# Delete static library. Apperently --disable-libs does not stop it.
+rm -vf ${RPM_BUILD_ROOT}%{_libdir}/libracket3m.a
+
+# Delete duplicate license files
+rm -rf %{buildroot}%{_datadir}/racket/COPYING*txt
+
+# Fix the rpath error.
+chrpath --delete ${RPM_BUILD_ROOT}%{_bindir}/racket
+chrpath --delete ${RPM_BUILD_ROOT}%{_libdir}/racket/gracket
+
+# Remove the libtool files.
+rm -f ${RPM_BUILD_ROOT}%{_libdir}/*.la
+
+# Fix paths in the desktop files.
+sed -i "s#${RPM_BUILD_ROOT}##g" \
+ ${RPM_BUILD_ROOT}/%{_datadir}/applications/*.desktop
+
+# Validate desktop files
+desktop-file-validate %{buildroot}/%{_datadir}/applications/*.desktop
+
+# Fix paths in html docs
+DOCS_TO_FIX="
+syntax/module-helpers.html
+rackunit/api.html
+reference/collects.html"
+for i in $DOCS_TO_FIX; do
+ sed -i "s#${RPM_BUILD_ROOT}##g" \
+ ${RPM_BUILD_ROOT}/%{_datadir}/doc/racket/$i
+done
+
+# Remove the executable bit on legacy template file
+chmod -x ${RPM_BUILD_ROOT}%{_libdir}/racket/starter-sh
+
+%ldconfig_scriptlets
+
+# Equivalent to upstream's minimal-racket release
+%package minimal
+Summary: A minimal Racket installation
+Requires: racket-collects = %{version}-%{release}
+%description minimal
+Racket's core runtime
+
+%package collects
+Summary: Racket's core collections libraries
+BuildArch: noarch
+%description collects
+Libraries providing Racket's core functionality
+
+# Arch independent source and bytecode files
+%package pkgs
+Summary: Racket package collections
+# See BuildRequires section for details on dependencies
+Requires: gtk3
+Requires: cairo
+Requires: pango
+Requires: libpng
+Requires: glib2
+Requires: libjpeg-turbo
+Requires: racket-minimal = %{version}-%{release}
+BuildArch: noarch
+%description pkgs
+Additional packages and libraries for Racket
+
+# Development headers and links
+%package devel
+Summary: Development files for Racket
+Requires: racket-minimal%{?_isa} = %{version}-%{release}
+%description devel
+Files needed to link against Racket.
+
+# HTML documentation
+%package doc
+Summary: Documentation files for Racket
+BuildArch: noarch
+%description doc
+A local installation of the Racket documentation system.
+
+%files
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_bindir}/drracket
+%{_bindir}/gracket
+%{_bindir}/gracket-text
+%{_bindir}/mred-text
+%{_bindir}/mred
+%{_bindir}/mzc
+%{_bindir}/mzpp
+%{_bindir}/mzscheme
+%{_bindir}/mztext
+%{_bindir}/pdf-slatex
+%{_bindir}/plt-games
+%{_bindir}/plt-help
+%{_bindir}/plt-r5rs
+%{_bindir}/plt-r6rs
+%{_bindir}/plt-web-server
+%{_bindir}/scribble
+%{_bindir}/setup-plt
+%{_bindir}/slatex
+%{_bindir}/slideshow
+%{_bindir}/swindle
+%{_datadir}/applications/
+
+%files collects
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_datadir}/racket/collects
+
+%files minimal
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_bindir}/racket
+%{_bindir}/raco
+%{_libdir}/racket
+%{_libdir}/libracket3m-%{version}.so
+%{_datadir}/racket/links.rktd
+%{_datadir}/racket/pkgs/racket-lib
+%{_datadir}/man/man1/racket*
+%{_datadir}/man/man1/raco*
+%dir %{_datadir}/racket
+%dir %{_datadir}/doc/racket
+%dir %{_sysconfdir}/racket/
+%config %{_sysconfdir}/racket/config.rktd
+%exclude %{_libdir}/libracket3m.so
+
+%files pkgs
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_datadir}/racket
+%{_datadir}/man/man1/drracket*
+%{_datadir}/man/man1/gracket*
+%{_datadir}/man/man1/mred*
+%{_datadir}/man/man1/mzc*
+%{_datadir}/man/man1/mzscheme*
+%{_datadir}/man/man1/plt-help*
+%{_datadir}/man/man1/setup-plt*
+%exclude %{_datadir}/racket/links.rktd
+%exclude %dir %{_datadir}/racket/pkgs/racket-lib
+%exclude %dir %{_datadir}/racket/collects
+
+%files devel
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_includedir}/racket
+%{_libdir}/libracket3m.so
+
+%files doc
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_datadir}/doc/racket
+
+%changelog
+* Fri Jul 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-11
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Wed Apr 26 2023 Florian Weimer <fweimer(a)redhat.com> - 7.4-10
+- Port configure script to C99
+
+* Fri Jan 20 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Sat Jul 23 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Fri Jan 21 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Sat Jan 08 2022 Miro Hrončok <mhroncok(a)redhat.com> - 7.4-6
+- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34
+
+* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Wed Aug 28 2019 David Benoit <dbenoit(a)redhat.com> - 7.4.1
+- Update package version
+- Remove doc-open-url patch (fixed upstream)
+- Update remove-nonfree patch
+
+* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.0-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.0-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Mon Sep 24 2018 David Benoit <dbenoit(a)redhat.com> 7.0-6
+- Fix buildarch
+
+* Sat Sep 22 2018 David Benoit <dbenoit(a)redhat.com> 7.0-5
+- Remove links.rktd scriptlets and instead make docs
+ a weak dependency
+
+* Fri Sep 21 2018 David Benoit <dbenoit(a)redhat.com> 7.0-4
+- Add scriptlets to handle updating links.rktd based on
+ whether racket-pkgs is installed
+- fix owenership of docs dir
+- update docs patch
+
+* Thu Sep 6 2018 David Benoit <dbenoit(a)redhat.com> 7.0-3
+- use arm macro instead of armv7hl
+
+* Wed Sep 5 2018 David Benoit <dbenoit(a)redhat.com> 7.0-2
+- Disable SSE math on i686 until issue is fixed upstream
+- Exclude ppc due to issue building Racket v7.0 and
+ arch being deprecated in next release
+
+* Fri Aug 17 2018 David Benoit <dbenoit(a)redhat.com> 7.0-1
+- Update sources to Racket v7.0
+- Remove 6.12 patches and add update remove nonfree
+ srfi patch to 7.0
+
+* Mon Jul 30 2018 David Benoit <dbenoit(a)redhat.com> 6.12-8
+- Annotate dependencies with links to source code
+- Move dependencies to racket-pkgs, since they are only used
+ by that subpackage
+- Update mred symbolic links
+- Fix ownership of directories
+- Remove executable bit from starter-sh
+
+* Thu Jul 12 2018 David Benoit <dbenoit(a)redhat.com> 6.12-7
+- Remove hardened build since it is enabled by default
+- Add gcc to BuildRequires
+- Remove wildcards from directory listings in files section
+
+* Fri Apr 13 2018 David Benoit <dbenoit(a)redhat.com> 6.12-6
+- Remove license wildcard and add license field to each subpackage
+
+* Fri Apr 6 2018 David Benoit <dbenoit(a)redhat.com> 6.12-5
+- remove update-database post scripts
+- move libracket3m.so link into -devel
+- add ldconfig_scriptlets after install
+- remove disable debug_package and configure
+ with --disable-strip instead
+- add license to files section and update
+ license header field
+- validate desktop files
+- change ownership of /etc/racket
+- update changelog with release info
+- use specific man directory man/man1/*
+- refactor racket into subpackages
+ racket-minimal, racket-collects, and racket-pkgs
+
+* Wed Apr 4 2018 David Benoit <dbenoit(a)redhat.com> 6.12-4
+- noarch -docs subpackage
+
+* Tue Mar 20 2018 David Benoit <dbenoit(a)redhat.com> 6.12-3
+- fix text encoding issue in description section
+- remove doc-open-url scriptlets
+- add scriptlet to fix paths in html docs
+- add patch2 to backport rpaths fix in compiled .zo files
+- add patch3 to backport rpaths fix in web-server-lib
+- add patch4 to configure doc open url dynamically at runtime
+- remove override of __arch_install_post to allow full
+ checking of buildroot.
+
+* Thu Feb 1 2018 David Benoit <dbenoit(a)redhat.com> - 6.12-2
+- Fix duplication of object files
+- Add version to racket-devel requirements
+- Remove base package as a dependency of racket-doc
+- Remove Groups tag
+
+* Wed Jan 31 2018 David Benoit <dbenoit(a)redhat.com> - 6.12-1
+- Update to current stable version
+- Add patch0 to update SRFIs to latest upstream
+- Add patch1 to remove nonfree SRFI components
+
+* Thu Oct 26 2017 David Benoit <dbenoit(a)redhat.com> - 6.10-1
+- Update to current stable version
+- Remove libedit readline patch (fixed upstream)
+- Break docs into separate package
+- Add scriptlets to set doc-open-url based on
+ whether docs are installed
+- Exclude armv7hl and s390x as target arches
+- Update description to match website
+- Change URLs to use https instead of http
+
+
+* Thu Jul 6 2017 David Benoit <dbenoit(a)redhat.com> - 6.9-1
+- Update to current stable version
+- Patch libedit readline error
+- Remove ExclusiveArch to test all builds in koji
+
+* Fri Jan 22 2016 Brandon Thomas <bthomaszx(a)gmail.com> - 6.3-1
+- Update to current stable version.
+- Updated description to match website.
+- Removed build requirement "racket-packaging".
+- Updated to gtk+3.
+- Let Autoprovides determine provides.
+- Debuginfo package is empty and preventing the package from building.
+- Removed uneeded file copies.
+- Remove possible extra static library.
+
+* Sun Dec 14 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.1.6-1
+- Update to current snapshot to fix match hash-table expander.
+
+* Mon Dec 01 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.1-1
+- Update to current stable version.
+
+* Fri Sep 05 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.5-4
+- Use racket-packaging to capture module dependencies.
+
+* Tue Aug 19 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.5-1
+- Updated to 6.1.0.5
+- Merged the -doc package back in.
+
+* Fri Aug 08 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.4-2
+- Do not alter .zo files, prevent check-buildroot from being run instead.
+
+* Thu Aug 07 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.4-1
+- Updated to 6.1.0.4
+- Split-off -doc package.
+
+* Fri Jul 25 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.3-4
+- Updated to 6.1.0.3
+- Dropped the unnecessary static library.
+- Dropped mred programs to enable debug package.
+
+* Sat Jun 22 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.5-1
+- Changed to use 5.3.5 version of Racket.
+- Created static package for developers who may need static libraries.
+- Added RPM optimization options to CFLAGS for build.
+- Added macro to use SMP build options in make.
+
+* Thu May 16 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.4-1
+- Changed to use 5.3.4 version of Racket.
+
+* Tue May 14 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.3-3
+- Moved documentation to /usr/doc directory.
+
+* Mon May 13 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.3-2
+- Remove bundled libffi from racket before building program.
+
+* Thu May 9 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.3-1
+- Initial Revision.
diff --git a/sources b/sources
new file mode 100644
index 0000000..433eb3e
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (racket-7.4-src.tgz) = a5ef2ce3157bee3b12abcaeeb4c1ec3b41e78fb6ec04d399e3505a38234a73a098398bb762a99ffef7bc01301aef8db559cbd47c043365df8711fccdc3386df0
commit fb079f8fd8be94df9b996c49230393e34298c785
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Aug 2 00:38:57 2023 +0200
Retired: Long term failure to build
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index dd3082f..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/racket-7.0-src.tgz
-/racket-7.4-src.tgz
diff --git a/README.md b/README.md
deleted file mode 100644
index dd16930..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# racket
-
-The racket package
\ No newline at end of file
diff --git a/dead.package b/dead.package
new file mode 100644
index 0000000..ab7426e
--- /dev/null
+++ b/dead.package
@@ -0,0 +1 @@
+Retired: Long term failure to build
diff --git a/racket-7.4-remove-nonfree.patch b/racket-7.4-remove-nonfree.patch
deleted file mode 100644
index b670cbc..0000000
--- a/racket-7.4-remove-nonfree.patch
+++ /dev/null
@@ -1,967 +0,0 @@
-diff -urN racket-7.4-orig/share/links.rktd racket-7.4-remove-nonfree/share/links.rktd
---- racket-7.4-orig/share/links.rktd 2019-08-03 23:31:24.000000000 -0400
-+++ racket-7.4-remove-nonfree/share/links.rktd 2019-08-28 09:27:21.416018118 -0400
-@@ -177,7 +177,6 @@
- (root "pkgs/slideshow-exe")
- (root "pkgs/slideshow-plugin")
- (root "pkgs/srfi-doc")
-- (root "pkgs/srfi-doc-nonfree")
- (root "pkgs/syntax-color-doc")
- (root "pkgs/web-server-lib")
- (root "pkgs/unix-socket-lib")
-diff -urN racket-7.4-orig/share/pkgs/pkgs.rktd racket-7.4-remove-nonfree/share/pkgs/pkgs.rktd
---- racket-7.4-orig/share/pkgs/pkgs.rktd 2019-08-03 23:31:24.000000000 -0400
-+++ racket-7.4-remove-nonfree/share/pkgs/pkgs.rktd 2019-08-28 09:28:17.804384118 -0400
-@@ -1 +1 @@
--#hash(("2d" . #s(pkg-info (catalog "2d") "fc82a7bd227d7f3b8852351fc6bf34948a7750b8" #t)) ("2d-doc" . #s((sc-pkg-info pkg-info 3) (catalog "2d-doc") "209614ab3da685f46ece52c2efdf976f1e7697b1" #t "2d")) ("2d-lib" . #s((sc-pkg-info pkg-info 3) (catalog "2d-lib") "8f5dd908df23ee2a698b178971be4e18d1937393" #t "2d")) ("algol60" . #s((sc-pkg-info pkg-info 3) (catalog "algol60") "5a67faec1e3f59e98d5d5c4ee4687a9e9a34962f" #t "algol60")) ("at-exp-lib" . #s(pkg-info (catalog "at-exp-lib") "68787a39b1d862726969eb03e54c6fcbab05d8d4" #t)) ("base" . #s(pkg-info (catalog "base") "249d2a371f12382b1360dd7a77702fb28551133b" #t)) ("cext-lib" . #s(pkg-info (catalog "cext-lib") "1ce5c3f8ef512216a402de1e139a242cf6593999" #t)) ("class-iop-lib" . #s(pkg-info (catalog "class-iop-lib") "29c5747600fa93d2dac540e3381291e45fa09300" #t)) ("compatibility" . #s(pkg-info (catalog "compatibility") "0fd2da43b30b0f27aaafa5d67af21ddf7fe02dd6" #t)) ("compatibility-doc" . #s(pkg-info (catalog "compatibility-doc") "fee62d07a8e143615c24f365c7c48c30e1eebe8c" #t)) ("compatibility-lib" . #s(pkg-info (catalog "compatibility-lib") "8d1011f2f86192a07714e4088ff5e23ca794471a" #t)) ("compiler" . #s(pkg-info (catalog "compiler") "b1a38a648d3cb1adaca66e1d9fb2a3636421f4f8" #t)) ("compiler-lib" . #s(pkg-info (catalog "compiler-lib") "b60403b4873befa5811e5fabb65970a24e0bb950" #t)) ("contract-profile" . #s((sc-pkg-info pkg-info 3) (catalog "contract-profile") "001eec9d842dcd35b6f082934e614ba86a2ab4c0" #t "contract-profile")) ("data" . #s(pkg-info (catalog "data") "98ef519ebf74d40ba645d00933e47fa0a516c96f" #t)) ("data-doc" . #s(pkg-info (catalog "data-doc") "ebfdbebb77721a087efc803f30bec6afe2292097" #t)) ("data-enumerate-lib" . #s(pkg-info (catalog "data-enumerate-lib") "f70dcd6ce6d7b14d1f1cc76b908df7cb2fd61929" #t)) ("data-lib" . #s(pkg-info (catalog "data-lib") "7fb6940020f610c669df432877213bfe79caebc7" #t)) ("datalog" . #s((sc-pkg-info pkg-info 3) (catalog "datalog") "411342493d6022b7d74f7e13955dfdfcf6e62f91" #t "datalog")) ("db" . #s(pkg-info (catalog "db") "13af2037227b04af20e85e2fef78cc9686fc6e3d" #t)) ("db-doc" . #s(pkg-info (catalog "db-doc") "ed6cb9e0f165f5e390347d9a979f994c80e09e6a" #t)) ("db-lib" . #s(pkg-info (catalog "db-lib") "5c97b5ac2a3cf661d85cd7177029ce4686a9391e" #t)) ("deinprogramm" . #s(pkg-info (catalog "deinprogramm") "9e908294790f919de34f67ab3321f57a53f52e36" #t)) ("deinprogramm-signature" . #s(pkg-info (catalog "deinprogramm-signature") "433e0dc1f4f74ef73074ce1c387b06e9e260e212" #t)) ("distributed-places" . #s(pkg-info (catalog "distributed-places") "145c1cedf46768adf061fade24893965840f1643" #t)) ("distributed-places-doc" . #s(pkg-info (catalog "distributed-places-doc") "fda0badbab4441172b33ae31c3b2272ce59bcd3c" #t)) ("distributed-places-lib" . #s(pkg-info (catalog "distributed-places-lib") "db733a858f67c295196d3d5e62d4d1047dbe10c4" #t)) ("draw" . #s(pkg-info (catalog "draw") "1e57984e4a7e93fc30e6f42382b3bdf2d5162759" #t)) ("draw-doc" . #s(pkg-info (catalog "draw-doc") "e7348bde06b88e4261d46eeeb7a1b69cb1c4b5bb" #t)) ("draw-lib" . #s(pkg-info (catalog "draw-lib") "8343a0e4d9c082e2b5da7f36590f3d6f81a90815" #t)) ("drracket" . #s(pkg-info (catalog "drracket") "0233b83af527c6866ce458d5869c02f1c3148569" #t)) ("drracket-plugin-lib" . #s(pkg-info (catalog "drracket-plugin-lib") "c4715aa5984bf8dfe48d44038b4eb81525f7cac7" #t)) ("drracket-tool" . #s(pkg-info (catalog "drracket-tool") "93dcb297ed4ad62cf4605d632da64023bdfc1e69" #t)) ("drracket-tool-doc" . #s(pkg-info (catalog "drracket-tool-doc") "f44fa4ef2a14aaff04d3b26d5b4a701678e42b68" #t)) ("drracket-tool-lib" . #s(pkg-info (catalog "drracket-tool-lib") "f3ca7e15b2592b40c4aaf734cf00126d71e0876d" #t)) ("ds-store" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store") "f3b74900e431d9ca6ee1038fb7dd1e08d759b009" #t "ds-store")) ("ds-store-doc" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-doc") "06b754e0bc7ed6bd6ebf26b8ab4b3ae223ff9e3d" #t "ds-store")) ("ds-store-lib" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-lib") "517b5f727a5df1d7230cfeae5c208433d9717d2a" #t "ds-store")) ("dynext-lib" . #s(pkg-info (catalog "dynext-lib") "6327a91cf80c504524e1de84f2613263e62da80e" #t)) ("eli-tester" . #s(pkg-info (catalog "eli-tester") "0c9bfc31ad180898a7f10af252009084b0de30eb" #t)) ("eopl" . #s((sc-pkg-info pkg-info 3) (catalog "eopl") "b7725c60cac4f51be2fefef5bc393857c07dc0af" #t "eopl")) ("errortrace" . #s(pkg-info (catalog "errortrace") "f8d7f00c7dacc7d1bb2bc99c76129798319881e7" #t)) ("errortrace-doc" . #s(pkg-info (catalog "errortrace-doc") "aea79310a7f250d43325f82467b4c4126338a425" #t)) ("errortrace-lib" . #s(pkg-info (catalog "errortrace-lib") "0b7417f006208d6c8fb5f4fa61e1099a970f1fc2" #t)) ("frtime" . #s((sc-pkg-info pkg-info 3) (catalog "frtime") "83bf86eb4a5f6b1a2f53ac8f7b0c265ca8e27839" #t "frtime")) ("future-visualizer" . #s(pkg-info (catalog "future-visualizer") "76bc592353681f3d673841d65230deecd901ee8f" #t)) ("future-visualizer-typed" . #s(pkg-info (catalog "future-visualizer-typed") "a1698d4264a5267ac49b2451211e3391216a4e82" #t)) ("games" . #s((sc-pkg-info pkg-info 3) (catalog "games") "0ad78fb4ec37b6f19435b7599a566c1bb2e5847c" #t "games")) ("gui" . #s(pkg-info (catalog "gui") "a74759a9030789bdea8a324bd69cad5e162c5937" #t)) ("gui-doc" . #s(pkg-info (catalog "gui-doc") "e79b96b5ded5e81a5beeb33d905d7e7ccd893074" #t)) ("gui-lib" . #s(pkg-info (catalog "gui-lib") "35c5e9a5dd69ba6839210d49e6c967ba418e9cc4" #t)) ("gui-pkg-manager-lib" . #s(pkg-info (catalog "gui-pkg-manager-lib") "1e0d8a3f2a60642e785c0459108f1be6034dbcb1" #t)) ("htdp" . #s(pkg-info (catalog "htdp") "6e222eff85bae1b326f4282d8b82fc5c83202cfe" #t)) ("htdp-doc" . #s(pkg-info (catalog "htdp-doc") "e5892b0ae846f64e997e34ae2afb165b35f290b9" #t)) ("htdp-lib" . #s(pkg-info (catalog "htdp-lib") "1f18bce701e14d76fa2e4f14f8cded185b00a66d" #t)) ("html" . #s(pkg-info (catalog "html") "59ab0bddd4935969e2af0469ad48a9c30f33ef60" #t)) ("html-doc" . #s(pkg-info (catalog "html-doc") "3cd2a18da0b91b209d196f0cf669f2e59829d2bc" #t)) ("html-lib" . #s(pkg-info (catalog "html-lib") "2b17b0447932ee0a5287581269d24b5e3e9dcbb5" #t)) ("icons" . #s((sc-pkg-info pkg-info 3) (catalog "icons") "77e8f436f370ce8d88aa39622c5921664b56845b" #t "icons")) ("images" . #s(pkg-info (catalog "images") "98c6a0e120eb1115db9d376759b245db0591b07b" #t)) ("images-doc" . #s(pkg-info (catalog "images-doc") "99e114a7c7e234b6eaa23f99f863d03986bd62b5" #t)) ("images-gui-lib" . #s(pkg-info (catalog "images-gui-lib") "fef0ec840d82ed975370087fdcb049e0cce8e339" #t)) ("images-lib" . #s(pkg-info (catalog "images-lib") "9dcdc2e2388c63063a4a161e09585119d8d18e88" #t)) ("lazy" . #s((sc-pkg-info pkg-info 3) (catalog "lazy") "8038fc1a353a1618a5c19feecd7de1150719a9fc" #t "lazy")) ("macro-debugger" . #s(pkg-info (catalog "macro-debugger") "448277bb97132d25236deb785dce8c81933235d2" #t)) ("macro-debugger-text-lib" . #s(pkg-info (catalog "macro-debugger-text-lib") "0549dc476d9f071569d59359dbe6e4039f8af250" #t)) ("main-distribution" . #s(pkg-info (catalog "main-distribution") "3d0f4e0314c4b437feb7c3b86ff69cf20ad1e0f0" #f)) ("make" . #s((sc-pkg-info pkg-info 3) (catalog "make") "93e3f1b4144e3a04392b753cedc34c7c49e63fe5" #t "make")) ("math" . #s(pkg-info (catalog "math") "bc288b3ed293e90ef3a4eb05971d388265dc7065" #t)) ("math-doc" . #s(pkg-info (catalog "math-doc") "119b215101c0f1f82b6d28e06f5288812f38f2c3" #t)) ("math-lib" . #s(pkg-info (catalog "math-lib") "4e159abc47c306364ad02549853c1ddf82d6f8a2" #t)) ("mysterx" . #s((sc-pkg-info pkg-info 3) (catalog "mysterx") "23487c08b23cb7d965b97b0c45e6e3553854b869" #t "mysterx")) ("mzcom" . #s((sc-pkg-info pkg-info 3) (catalog "mzcom") "ac97bd1dc80a2f867d17f75254a8bbb9faa24afd" #t "mzcom")) ("mzscheme" . #s(pkg-info (catalog "mzscheme") "2a45b98e73f899324f2c5678d93df74f1792d23c" #t)) ("mzscheme-doc" . #s(pkg-info (catalog "mzscheme-doc") "de48e8b819047025177fac06b6f254e6f939fd23" #t)) ("mzscheme-lib" . #s(pkg-info (catalog "mzscheme-lib") "a6a2ec7fd0946a46c5368dbe1d7602419f8e7b53" #t)) ("net" . #s(pkg-info (catalog "net") "5df16fb466651bbb270a30296b1e8ee5f86af6fe" #t)) ("net-cookies" . #s(pkg-info (catalog "net-cookies") "51f6db09a36adbeb73e6bfc25bcd7d2123cc563e" #t)) ("net-cookies-doc" . #s(pkg-info (catalog "net-cookies-doc") "c1380af8407ce13dc993830db20250d7348117a8" #t)) ("net-cookies-lib" . #s(pkg-info (catalog "net-cookies-lib") "12f95b8fa1d9d562cd2bc7b499dd2fdc7111d122" #t)) ("net-doc" . #s(pkg-info (catalog "net-doc") "effd2e00136f037f9c524e25973ffa0b4b5f6ab8" #t)) ("net-lib" . #s(pkg-info (catalog "net-lib") "c0e7e3b3d55d067fa1fa3d13736877f33fe4fe76" #t)) ("optimization-coach" . #s(pkg-info (catalog "optimization-coach") "79ef3e4ec8de133f6f0b1838218b9478ba22d9bc" #t)) ("option-contract" . #s(pkg-info (catalog "option-contract") "14f8553d264972db98ecb25007f0c62f72c88837" #t)) ("option-contract-doc" . #s(pkg-info (catalog "option-contract-doc") "12d4da169785f5af1e8e38357713656385b4a75d" #t)) ("option-contract-lib" . #s(pkg-info (catalog "option-contract-lib") "f01bff6dccd0e6cf8721ac9cf3a819c5a9fd25b7" #t)) ("parser-tools" . #s(pkg-info (catalog "parser-tools") "7c90da6b7e8b13a5faed4d196f29f74d24c308a3" #t)) ("parser-tools-doc" . #s(pkg-info (catalog "parser-tools-doc") "d3d05e4f5f175f790775c835317034e8f6b6394e" #t)) ("parser-tools-lib" . #s(pkg-info (catalog "parser-tools-lib") "22eaaae7d2dc79755eaf96029554ebb48fb7ccaf" #t)) ("pconvert-lib" . #s(pkg-info (catalog "pconvert-lib") "cf75aa36ac881f36c9f845f9b3d5c75bb016caac" #t)) ("pict" . #s(pkg-info (catalog "pict") "b58b1e3ff96f16f62a8ca6e52efcf143d02c2552" #t)) ("pict-doc" . #s(pkg-info (catalog "pict-doc") "8e95db03fae67b105bd6afdce6c4dfcaf587c2c9" #t)) ("pict-lib" . #s(pkg-info (catalog "pict-lib") "2abed1569d91f15fa61d95e11f53d5cbbef610e1" #t)) ("pict-snip" . #s(pkg-info (catalog "pict-snip") "07039265dc698b136044724e4802b64517ba5209" #t)) ("pict-snip-doc" . #s(pkg-info (catalog "pict-snip-doc") "2453a4852fc2987b42f4ad4f6e92a1a448418db5" #t)) ("pict-snip-lib" . #s(pkg-info (catalog "pict-snip-lib") "28f4f45649589e010ab6c6cdc3e82ac9ff1fbe7f" #t)) ("picturing-programs" . #s(pkg-info (catalog "picturing-programs") "325870110f44e006c228f41619b5c77f331b82a1" #t)) ("plai" . #s(pkg-info (catalog "plai") "6ac6f533410efd33f655d51314228c77c83172ac" #t)) ("plai-doc" . #s((sc-pkg-info pkg-info 3) (catalog "plai-doc") "c8363060f66e1bd1ddc72c8271e86cf3fcbeff9e" #t "plai")) ("plai-lib" . #s((sc-pkg-info pkg-info 3) (catalog "plai-lib") "978f240e75c6ad1a4843a010fe250d9977e93339" #t "plai")) ("planet" . #s(pkg-info (catalog "planet") "e1a53854ddae4cf4eef667a91f3c944eb1481371" #t)) ("planet-doc" . #s(pkg-info (catalog "planet-doc") "0356d590361d2b909c717e97dc4f9eb2b567461a" #t)) ("planet-lib" . #s(pkg-info (catalog "planet-lib") "a0993c8b1c3ae0f08f75a6e70d785dfa3e7adf66" #t)) ("plot" . #s(pkg-info (catalog "plot") "898a4c570ed38396d684f260efa240d66accead9" #t)) ("plot-compat" . #s(pkg-info (catalog "plot-compat") "01b129e6ee41080f090c02054d07c7856ae2c06c" #t)) ("plot-doc" . #s(pkg-info (catalog "plot-doc") "70b006d5da401955e00000fcf6a3aacc296cd687" #t)) ("plot-gui-lib" . #s(pkg-info (catalog "plot-gui-lib") "57d49ac10de7a4d2520fe8a3c625eb91e6af8359" #t)) ("plot-lib" . #s(pkg-info (catalog "plot-lib") "84fecbb718ed024176c79f271f30579f5d753339" #t)) ("preprocessor" . #s((sc-pkg-info pkg-info 3) (catalog "preprocessor") "38fc7981a096322c67e4f7d9afac6f1fe664529e" #t "preprocessor")) ("profile" . #s(pkg-info (catalog "profile") "2183f9722eb2efbe2c8feb400b73602ad97fe221" #t)) ("profile-doc" . #s(pkg-info (catalog "profile-doc") "1d7c7dd2ad37e0d6c842cf30c7a01a631b18a39e" #t)) ("profile-lib" . #s((sc-pkg-info pkg-info 3) (catalog "profile-lib") "4eed8ba01f406d199604b3727c405c2bf368a617" #t "profile")) ("quickscript" . #s((sc-pkg-info pkg-info 3) (catalog "quickscript") "0c531a78067442fb5ac2b404f92c92427cff8bec" #t "quickscript")) ("r5rs" . #s(pkg-info (catalog "r5rs") "febae235a352df6df59a2e2c45b8658322793103" #t)) ("r5rs-doc" . #s(pkg-info (catalog "r5rs-doc") "3b842a310c928a0647b0c29cb3eabe215270f8e2" #t)) ("r5rs-lib" . #s(pkg-info (catalog "r5rs-lib") "9fcc4ebda67e44abd34e6c97a1448cd9a3947b77" #t)) ("r6rs" . #s(pkg-info (catalog "r6rs") "2ba0a84b06e7ab0ab49308fb6b58c23b29e39662" #t)) ("r6rs-doc" . #s(pkg-info (catalog "r6rs-doc") "972c5762a28dd773190c7aa46f9b972ac7c4c44e" #t)) ("r6rs-lib" . #s(pkg-info (catalog "r6rs-lib") "0a80a45a9666924b02b7e41002b3122b0b0606e3" #t)) ("racket-cheat" . #s((sc-pkg-info pkg-info 3) (catalog "racket-cheat") "11ef1c76f6459d0039e13cdc04326f5c54c28714" #t "racket-cheat")) ("racket-doc" . #s(pkg-info (catalog "racket-doc") "7c41f0b0ae91a7d77da4d4f15c2e5e2f6ab5c689" #t)) ("racket-index" . #s(pkg-info (catalog "racket-index") "ec294cafcf79f9a7034d02b4b3ff8c2e2a717622" #t)) ("racket-lib" . #s(pkg-info (catalog "racket-lib") "addde48592db0ba3db8686c37951f20c7112d368" #f)) ("racklog" . #s((sc-pkg-info pkg-info 3) (catalog "racklog") "a587b4aa82ff470e0646185cce033900e1bdafa8" #t "racklog")) ("rackunit" . #s(pkg-info (catalog "rackunit") "4b9de5253bfc93a4ba11e527bed3314d48ab0fc8" #t)) ("rackunit-doc" . #s(pkg-info (catalog "rackunit-doc") "26d22124d6eab4c79b73d778deef7b9bc73c2dec" #t)) ("rackunit-gui" . #s(pkg-info (catalog "rackunit-gui") "4cb8bc7487ff6bd55f653708d51f29fb75b490e2" #t)) ("rackunit-lib" . #s(pkg-info (catalog "rackunit-lib") "0069571fffeb268232fab1db7e9c6e8ea124f1ac" #t)) ("rackunit-plugin-lib" . #s(pkg-info (catalog "rackunit-plugin-lib") "a663951f3c13e3a6c0228949d97c6b2eef4a5b6c" #t)) ("rackunit-typed" . #s((sc-pkg-info pkg-info 3) (catalog "rackunit-typed") "d3ea39520e71e1fdcdaee0a4218575592c44a41a" #t "typed")) ("readline" . #s(pkg-info (catalog "readline") "4c7e66cd27cf4408832c87e3ee86df7a6eefa09d" #t)) ("readline-doc" . #s(pkg-info (catalog "readline-doc") "3bded5f74e621afb05b47f4fb05e455d8c2ee3f7" #t)) ("readline-lib" . #s(pkg-info (catalog "readline-lib") "a5182fa3edd32b9d63e6c355ccb372e0310a9d6d" #t)) ("realm" . #s((sc-pkg-info pkg-info 3) (catalog "realm") "f013fc3db6882ece583015d48f0ad8e1e971601d" #t "realm")) ("redex" . #s(pkg-info (catalog "redex") "57c8ddc62fd86b0ede08e92a7e47d35527768e99" #t)) ("redex-benchmark" . #s(pkg-info (catalog "redex-benchmark") "2433d94442a5f32f16d152656b168d1e6218aaa7" #t)) ("redex-doc" . #s(pkg-info (catalog "redex-doc") "6cedd1cfdc891d7ac3b46fcfe7767a4681443515" #t)) ("redex-examples" . #s(pkg-info (catalog "redex-examples") "98a38101bd790fa6bd8ff16ce8e2fb65245cb87c" #t)) ("redex-gui-lib" . #s(pkg-info (catalog "redex-gui-lib") "80083d5cded16afb0d45a59cdd655ddd396b8685" #t)) ("redex-lib" . #s(pkg-info (catalog "redex-lib") "04c6bc3954bf30293e0b5cfe76294a799e2f1aae" #t)) ("redex-pict-lib" . #s(pkg-info (catalog "redex-pict-lib") "9b13a5976edd63728d8914fc20bffb5ad981302f" #t)) ("sandbox-lib" . #s(pkg-info (catalog "sandbox-lib") "5b6080ff4052f881c343f6ccc847f860acb501a9" #t)) ("sasl" . #s((sc-pkg-info pkg-info 3) (catalog "sasl") "8dc49968c1ef11c5dd77f56c5979453a36d2c750" #t "sasl")) ("sasl-doc" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-doc") "02b6cf131a97af9caa622a77592bb851f5d58fa3" #t "sasl")) ("sasl-lib" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-lib") "d4ecdad04e42658a69d70d2f7d5eadae7ed7d16e" #t "sasl")) ("scheme-lib" . #s(pkg-info (catalog "scheme-lib") "22e71c59ac20b09cd156062ce0fb0afb86aaa851" #t)) ("schemeunit" . #s((sc-pkg-info pkg-info 3) (catalog "schemeunit") "03986b499744194a9e06a66dfe988bed9fb8cc40" #t "schemeunit")) ("scribble" . #s(pkg-info (catalog "scribble") "862cac10d6934b0dca35b4ebace9ffa0faa3a381" #t)) ("scribble-doc" . #s(pkg-info (catalog "scribble-doc") "fc38088b2924e7d902ceafc94243fd3ca2a52b45" #t)) ("scribble-html-lib" . #s(pkg-info (catalog "scribble-html-lib") "13105ce2064fa963c535187a657792e1ec95d284" #t)) ("scribble-lib" . #s(pkg-info (catalog "scribble-lib") "9be1c71d1c0f3f0d41031416689f012a16ba535a" #t)) ("scribble-text-lib" . #s(pkg-info (catalog "scribble-text-lib") "1d816dcc95b5f6d77ff6633b82a6dd40f7effe4e" #t)) ("serialize-cstruct-lib" . #s(pkg-info (catalog "serialize-cstruct-lib") "caeab596cb494273bcb84b917205a66bd06d0528" #t)) ("sgl" . #s((sc-pkg-info pkg-info 3) (catalog "sgl") "a2feb4952e01c7e02af068978ade81d0a213e035" #t "sgl")) ("shell-completion" . #s((sc-pkg-info pkg-info 3) (catalog "shell-completion") "900d6f81d7f78d17ac1789436c36a3314f09fcec" #t "shell-completion")) ("slatex" . #s((sc-pkg-info pkg-info 3) (catalog "slatex") "7a36270767b37d0336b4d72c7ca89140f395f9af" #t "slatex")) ("slideshow" . #s(pkg-info (catalog "slideshow") "62d9fa5b5fc8f1b82fb7acae427e474488fb1c2a" #t)) ("slideshow-doc" . #s(pkg-info (catalog "slideshow-doc") "d023178269517583e08ea3afc13bd8e867e86eaa" #t)) ("slideshow-exe" . #s(pkg-info (catalog "slideshow-exe") "4764478f8f62ba0a9d66ef064945af605cac48cc" #t)) ("slideshow-lib" . #s(pkg-info (catalog "slideshow-lib") "b7d301d8496d23dd950606d50a2c9565067f77f5" #t)) ("slideshow-plugin" . #s(pkg-info (catalog "slideshow-plugin") "50fe3549998180cf9391d355fce67c1b95fee846" #t)) ("snip" . #s(pkg-info (catalog "snip") "f6401933decce0674344953461fc80be6b600748" #t)) ("snip-lib" . #s(pkg-info (catalog "snip-lib") "8cf6a919d5d9021f782423b3712a0e73cf93842a" #t)) ("source-syntax" . #s((sc-pkg-info pkg-info 3) (catalog "source-syntax") "b6dde72b228b3e8e7da35fbc25cce395c8dce9cb" #t "syntax")) ("srfi" . #s(pkg-info (catalog "srfi") "810795b1c70213bba3e3f02c29c0ec0be774d551" #t)) ("srfi-doc" . #s(pkg-info (catalog "srfi-doc") "9bcb860c00d8023421c3ab3e2785ab8ee92b8f9d" #t)) ("srfi-doc-nonfree" . #s(pkg-info (catalog "srfi-doc-nonfree") "6ac01197bd6a33c21ff69684704e73739708d92c" #t)) ("srfi-lib" . #s(pkg-info (catalog "srfi-lib") "8dd9d951c94054ec60a4e1d59fa2c1a462e8fff6" #t)) ("srfi-lite-lib" . #s(pkg-info (catalog "srfi-lite-lib") "2a40a8ecf4a2368b6c84d8f0bdd1c72df4f3cc7f" #t)) ("string-constants" . #s(pkg-info (catalog "string-constants") "602234aee270ea040b993f8146548aa0c835ee41" #t)) ("string-constants-doc" . #s(pkg-info (catalog "string-constants-doc") "627c9a564c187d9dbd2a1c6de302e38ed8cd105e" #t)) ("string-constants-lib" . #s(pkg-info (catalog "string-constants-lib") "85764e7ecf8df819142221a84380340c23607e18" #t)) ("swindle" . #s((sc-pkg-info pkg-info 3) (catalog "swindle") "56793a3d43336a0dfc1fb6d4933a6a7d0a6f18a6" #t "swindle")) ("syntax-color" . #s(pkg-info (catalog "syntax-color") "0ab7c010c146aacbc26f81d73050e5dcb1ec44a4" #t)) ("syntax-color-doc" . #s(pkg-info (catalog "syntax-color-doc") "ebc23963c2f235893a2ae998311c439ca5f2de5e" #t)) ("syntax-color-lib" . #s(pkg-info (catalog "syntax-color-lib") "c496941837238109ebf69e6a2a3740136baf077e" #t)) ("testing-util-lib" . #s(pkg-info (catalog "testing-util-lib") "6ad76708f90cc3938a72d556458f92cde3e30578" #t)) ("tex-table" . #s((sc-pkg-info pkg-info 3) (catalog "tex-table") "c6127491120f723f26dbba30d217e4f2aeb12084" #t "mrlib")) ("trace" . #s((sc-pkg-info pkg-info 3) (catalog "trace") "953c7b5e344cfc8859006ffbfce4fdf360647d81" #t "trace")) ("typed-racket" . #s(pkg-info (catalog "typed-racket") "7896fb7492e6230f58d73d202ce9e6f77e3f98b7" #t)) ("typed-racket-compatibility" . #s(pkg-info (catalog "typed-racket-compatibility") "1bf2425d25d54c653d693290f41e9587847357a6" #t)) ("typed-racket-doc" . #s(pkg-info (catalog "typed-racket-doc") "d338099f40c47dbfb62f699206e99cfdfa7e32d6" #t)) ("typed-racket-lib" . #s(pkg-info (catalog "typed-racket-lib") "3eff82ebcceeab467c35cf19044013c83a47bd32" #t)) ("typed-racket-more" . #s(pkg-info (catalog "typed-racket-more") "600a695a0f59fe2740cf9e2080a13e25310a5114" #t)) ("unix-socket" . #s(pkg-info (catalog "unix-socket") "c015b6081883e19b3f1d2343bddca9895499832c" #t)) ("unix-socket-doc" . #s(pkg-info (catalog "unix-socket-doc") "b5d7f058cd0984aef1d8214968e79c202b972636" #t)) ("unix-socket-lib" . #s(pkg-info (catalog "unix-socket-lib") "e8d16e6cf98e03dc141ce410e7fddb83eb420e54" #t)) ("web-server" . #s(pkg-info (catalog "web-server") "9e01035046e279382ab2c1aa5c3f68d7533afd64" #t)) ("web-server-doc" . #s(pkg-info (catalog "web-server-doc") "afb48732580aaf70f2d13dc0f3115f25672a0fb6" #t)) ("web-server-lib" . #s(pkg-info (catalog "web-server-lib") "1fb4a0c9718b0e835d730f92289f9855018dfee3" #t)) ("wxme" . #s(pkg-info (catalog "wxme") "a56f70bd66b595d03baa8fb60046c3826b3abaaa" #t)) ("wxme-lib" . #s(pkg-info (catalog "wxme-lib") "75d7ad58da6d6fe5e3b5d81fe3f1e73b37460ae5" #t)) ("xrepl" . #s(pkg-info (catalog "xrepl") "c577bf792fde613ada8dc08f3b76b9daf3fc6814" #t)) ("xrepl-doc" . #s(pkg-info (catalog "xrepl-doc") "1724207363217dc4e931ac92e017c594a7a2a44b" #t)) ("xrepl-lib" . #s(pkg-info (catalog "xrepl-lib") "829e38b7ffcd0508842871b5aa354a531ddee4fa" #t)) ("zo-lib" . #s(pkg-info (catalog "zo-lib") "0f00c96ccaf933002e5c1e9f6b9e8856cbcd04eb" #t)))
-+#hash(("2d" . #s(pkg-info (catalog "2d") "fc82a7bd227d7f3b8852351fc6bf34948a7750b8" #t)) ("2d-doc" . #s((sc-pkg-info pkg-info 3) (catalog "2d-doc") "209614ab3da685f46ece52c2efdf976f1e7697b1" #t "2d")) ("2d-lib" . #s((sc-pkg-info pkg-info 3) (catalog "2d-lib") "8f5dd908df23ee2a698b178971be4e18d1937393" #t "2d")) ("algol60" . #s((sc-pkg-info pkg-info 3) (catalog "algol60") "5a67faec1e3f59e98d5d5c4ee4687a9e9a34962f" #t "algol60")) ("at-exp-lib" . #s(pkg-info (catalog "at-exp-lib") "68787a39b1d862726969eb03e54c6fcbab05d8d4" #t)) ("base" . #s(pkg-info (catalog "base") "249d2a371f12382b1360dd7a77702fb28551133b" #t)) ("cext-lib" . #s(pkg-info (catalog "cext-lib") "1ce5c3f8ef512216a402de1e139a242cf6593999" #t)) ("class-iop-lib" . #s(pkg-info (catalog "class-iop-lib") "29c5747600fa93d2dac540e3381291e45fa09300" #t)) ("compatibility" . #s(pkg-info (catalog "compatibility") "0fd2da43b30b0f27aaafa5d67af21ddf7fe02dd6" #t)) ("compatibility-doc" . #s(pkg-info (catalog "compatibility-doc") "fee62d07a8e143615c24f365c7c48c30e1eebe8c" #t)) ("compatibility-lib" . #s(pkg-info (catalog "compatibility-lib") "8d1011f2f86192a07714e4088ff5e23ca794471a" #t)) ("compiler" . #s(pkg-info (catalog "compiler") "b1a38a648d3cb1adaca66e1d9fb2a3636421f4f8" #t)) ("compiler-lib" . #s(pkg-info (catalog "compiler-lib") "b60403b4873befa5811e5fabb65970a24e0bb950" #t)) ("contract-profile" . #s((sc-pkg-info pkg-info 3) (catalog "contract-profile") "001eec9d842dcd35b6f082934e614ba86a2ab4c0" #t "contract-profile")) ("data" . #s(pkg-info (catalog "data") "98ef519ebf74d40ba645d00933e47fa0a516c96f" #t)) ("data-doc" . #s(pkg-info (catalog "data-doc") "ebfdbebb77721a087efc803f30bec6afe2292097" #t)) ("data-enumerate-lib" . #s(pkg-info (catalog "data-enumerate-lib") "f70dcd6ce6d7b14d1f1cc76b908df7cb2fd61929" #t)) ("data-lib" . #s(pkg-info (catalog "data-lib") "7fb6940020f610c669df432877213bfe79caebc7" #t)) ("datalog" . #s((sc-pkg-info pkg-info 3) (catalog "datalog") "411342493d6022b7d74f7e13955dfdfcf6e62f91" #t "datalog")) ("db" . #s(pkg-info (catalog "db") "13af2037227b04af20e85e2fef78cc9686fc6e3d" #t)) ("db-doc" . #s(pkg-info (catalog "db-doc") "ed6cb9e0f165f5e390347d9a979f994c80e09e6a" #t)) ("db-lib" . #s(pkg-info (catalog "db-lib") "5c97b5ac2a3cf661d85cd7177029ce4686a9391e" #t)) ("deinprogramm" . #s(pkg-info (catalog "deinprogramm") "9e908294790f919de34f67ab3321f57a53f52e36" #t)) ("deinprogramm-signature" . #s(pkg-info (catalog "deinprogramm-signature") "433e0dc1f4f74ef73074ce1c387b06e9e260e212" #t)) ("distributed-places" . #s(pkg-info (catalog "distributed-places") "145c1cedf46768adf061fade24893965840f1643" #t)) ("distributed-places-doc" . #s(pkg-info (catalog "distributed-places-doc") "fda0badbab4441172b33ae31c3b2272ce59bcd3c" #t)) ("distributed-places-lib" . #s(pkg-info (catalog "distributed-places-lib") "db733a858f67c295196d3d5e62d4d1047dbe10c4" #t)) ("draw" . #s(pkg-info (catalog "draw") "1e57984e4a7e93fc30e6f42382b3bdf2d5162759" #t)) ("draw-doc" . #s(pkg-info (catalog "draw-doc") "e7348bde06b88e4261d46eeeb7a1b69cb1c4b5bb" #t)) ("draw-lib" . #s(pkg-info (catalog "draw-lib") "8343a0e4d9c082e2b5da7f36590f3d6f81a90815" #t)) ("drracket" . #s(pkg-info (catalog "drracket") "0233b83af527c6866ce458d5869c02f1c3148569" #t)) ("drracket-plugin-lib" . #s(pkg-info (catalog "drracket-plugin-lib") "c4715aa5984bf8dfe48d44038b4eb81525f7cac7" #t)) ("drracket-tool" . #s(pkg-info (catalog "drracket-tool") "93dcb297ed4ad62cf4605d632da64023bdfc1e69" #t)) ("drracket-tool-doc" . #s(pkg-info (catalog "drracket-tool-doc") "f44fa4ef2a14aaff04d3b26d5b4a701678e42b68" #t)) ("drracket-tool-lib" . #s(pkg-info (catalog "drracket-tool-lib") "f3ca7e15b2592b40c4aaf734cf00126d71e0876d" #t)) ("ds-store" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store") "f3b74900e431d9ca6ee1038fb7dd1e08d759b009" #t "ds-store")) ("ds-store-doc" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-doc") "06b754e0bc7ed6bd6ebf26b8ab4b3ae223ff9e3d" #t "ds-store")) ("ds-store-lib" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-lib") "517b5f727a5df1d7230cfeae5c208433d9717d2a" #t "ds-store")) ("dynext-lib" . #s(pkg-info (catalog "dynext-lib") "6327a91cf80c504524e1de84f2613263e62da80e" #t)) ("eli-tester" . #s(pkg-info (catalog "eli-tester") "0c9bfc31ad180898a7f10af252009084b0de30eb" #t)) ("eopl" . #s((sc-pkg-info pkg-info 3) (catalog "eopl") "b7725c60cac4f51be2fefef5bc393857c07dc0af" #t "eopl")) ("errortrace" . #s(pkg-info (catalog "errortrace") "f8d7f00c7dacc7d1bb2bc99c76129798319881e7" #t)) ("errortrace-doc" . #s(pkg-info (catalog "errortrace-doc") "aea79310a7f250d43325f82467b4c4126338a425" #t)) ("errortrace-lib" . #s(pkg-info (catalog "errortrace-lib") "0b7417f006208d6c8fb5f4fa61e1099a970f1fc2" #t)) ("frtime" . #s((sc-pkg-info pkg-info 3) (catalog "frtime") "83bf86eb4a5f6b1a2f53ac8f7b0c265ca8e27839" #t "frtime")) ("future-visualizer" . #s(pkg-info (catalog "future-visualizer") "76bc592353681f3d673841d65230deecd901ee8f" #t)) ("future-visualizer-typed" . #s(pkg-info (catalog "future-visualizer-typed") "a1698d4264a5267ac49b2451211e3391216a4e82" #t)) ("games" . #s((sc-pkg-info pkg-info 3) (catalog "games") "0ad78fb4ec37b6f19435b7599a566c1bb2e5847c" #t "games")) ("gui" . #s(pkg-info (catalog "gui") "a74759a9030789bdea8a324bd69cad5e162c5937" #t)) ("gui-doc" . #s(pkg-info (catalog "gui-doc") "e79b96b5ded5e81a5beeb33d905d7e7ccd893074" #t)) ("gui-lib" . #s(pkg-info (catalog "gui-lib") "35c5e9a5dd69ba6839210d49e6c967ba418e9cc4" #t)) ("gui-pkg-manager-lib" . #s(pkg-info (catalog "gui-pkg-manager-lib") "1e0d8a3f2a60642e785c0459108f1be6034dbcb1" #t)) ("htdp" . #s(pkg-info (catalog "htdp") "6e222eff85bae1b326f4282d8b82fc5c83202cfe" #t)) ("htdp-doc" . #s(pkg-info (catalog "htdp-doc") "e5892b0ae846f64e997e34ae2afb165b35f290b9" #t)) ("htdp-lib" . #s(pkg-info (catalog "htdp-lib") "1f18bce701e14d76fa2e4f14f8cded185b00a66d" #t)) ("html" . #s(pkg-info (catalog "html") "59ab0bddd4935969e2af0469ad48a9c30f33ef60" #t)) ("html-doc" . #s(pkg-info (catalog "html-doc") "3cd2a18da0b91b209d196f0cf669f2e59829d2bc" #t)) ("html-lib" . #s(pkg-info (catalog "html-lib") "2b17b0447932ee0a5287581269d24b5e3e9dcbb5" #t)) ("icons" . #s((sc-pkg-info pkg-info 3) (catalog "icons") "77e8f436f370ce8d88aa39622c5921664b56845b" #t "icons")) ("images" . #s(pkg-info (catalog "images") "98c6a0e120eb1115db9d376759b245db0591b07b" #t)) ("images-doc" . #s(pkg-info (catalog "images-doc") "99e114a7c7e234b6eaa23f99f863d03986bd62b5" #t)) ("images-gui-lib" . #s(pkg-info (catalog "images-gui-lib") "fef0ec840d82ed975370087fdcb049e0cce8e339" #t)) ("images-lib" . #s(pkg-info (catalog "images-lib") "9dcdc2e2388c63063a4a161e09585119d8d18e88" #t)) ("lazy" . #s((sc-pkg-info pkg-info 3) (catalog "lazy") "8038fc1a353a1618a5c19feecd7de1150719a9fc" #t "lazy")) ("macro-debugger" . #s(pkg-info (catalog "macro-debugger") "448277bb97132d25236deb785dce8c81933235d2" #t)) ("macro-debugger-text-lib" . #s(pkg-info (catalog "macro-debugger-text-lib") "0549dc476d9f071569d59359dbe6e4039f8af250" #t)) ("main-distribution" . #s(pkg-info (catalog "main-distribution") "3d0f4e0314c4b437feb7c3b86ff69cf20ad1e0f0" #f)) ("make" . #s((sc-pkg-info pkg-info 3) (catalog "make") "93e3f1b4144e3a04392b753cedc34c7c49e63fe5" #t "make")) ("math" . #s(pkg-info (catalog "math") "bc288b3ed293e90ef3a4eb05971d388265dc7065" #t)) ("math-doc" . #s(pkg-info (catalog "math-doc") "119b215101c0f1f82b6d28e06f5288812f38f2c3" #t)) ("math-lib" . #s(pkg-info (catalog "math-lib") "4e159abc47c306364ad02549853c1ddf82d6f8a2" #t)) ("mysterx" . #s((sc-pkg-info pkg-info 3) (catalog "mysterx") "23487c08b23cb7d965b97b0c45e6e3553854b869" #t "mysterx")) ("mzcom" . #s((sc-pkg-info pkg-info 3) (catalog "mzcom") "ac97bd1dc80a2f867d17f75254a8bbb9faa24afd" #t "mzcom")) ("mzscheme" . #s(pkg-info (catalog "mzscheme") "2a45b98e73f899324f2c5678d93df74f1792d23c" #t)) ("mzscheme-doc" . #s(pkg-info (catalog "mzscheme-doc") "de48e8b819047025177fac06b6f254e6f939fd23" #t)) ("mzscheme-lib" . #s(pkg-info (catalog "mzscheme-lib") "a6a2ec7fd0946a46c5368dbe1d7602419f8e7b53" #t)) ("net" . #s(pkg-info (catalog "net") "5df16fb466651bbb270a30296b1e8ee5f86af6fe" #t)) ("net-cookies" . #s(pkg-info (catalog "net-cookies") "51f6db09a36adbeb73e6bfc25bcd7d2123cc563e" #t)) ("net-cookies-doc" . #s(pkg-info (catalog "net-cookies-doc") "c1380af8407ce13dc993830db20250d7348117a8" #t)) ("net-cookies-lib" . #s(pkg-info (catalog "net-cookies-lib") "12f95b8fa1d9d562cd2bc7b499dd2fdc7111d122" #t)) ("net-doc" . #s(pkg-info (catalog "net-doc") "effd2e00136f037f9c524e25973ffa0b4b5f6ab8" #t)) ("net-lib" . #s(pkg-info (catalog "net-lib") "c0e7e3b3d55d067fa1fa3d13736877f33fe4fe76" #t)) ("optimization-coach" . #s(pkg-info (catalog "optimization-coach") "79ef3e4ec8de133f6f0b1838218b9478ba22d9bc" #t)) ("option-contract" . #s(pkg-info (catalog "option-contract") "14f8553d264972db98ecb25007f0c62f72c88837" #t)) ("option-contract-doc" . #s(pkg-info (catalog "option-contract-doc") "12d4da169785f5af1e8e38357713656385b4a75d" #t)) ("option-contract-lib" . #s(pkg-info (catalog "option-contract-lib") "f01bff6dccd0e6cf8721ac9cf3a819c5a9fd25b7" #t)) ("parser-tools" . #s(pkg-info (catalog "parser-tools") "7c90da6b7e8b13a5faed4d196f29f74d24c308a3" #t)) ("parser-tools-doc" . #s(pkg-info (catalog "parser-tools-doc") "d3d05e4f5f175f790775c835317034e8f6b6394e" #t)) ("parser-tools-lib" . #s(pkg-info (catalog "parser-tools-lib") "22eaaae7d2dc79755eaf96029554ebb48fb7ccaf" #t)) ("pconvert-lib" . #s(pkg-info (catalog "pconvert-lib") "cf75aa36ac881f36c9f845f9b3d5c75bb016caac" #t)) ("pict" . #s(pkg-info (catalog "pict") "b58b1e3ff96f16f62a8ca6e52efcf143d02c2552" #t)) ("pict-doc" . #s(pkg-info (catalog "pict-doc") "8e95db03fae67b105bd6afdce6c4dfcaf587c2c9" #t)) ("pict-lib" . #s(pkg-info (catalog "pict-lib") "2abed1569d91f15fa61d95e11f53d5cbbef610e1" #t)) ("pict-snip" . #s(pkg-info (catalog "pict-snip") "07039265dc698b136044724e4802b64517ba5209" #t)) ("pict-snip-doc" . #s(pkg-info (catalog "pict-snip-doc") "2453a4852fc2987b42f4ad4f6e92a1a448418db5" #t)) ("pict-snip-lib" . #s(pkg-info (catalog "pict-snip-lib") "28f4f45649589e010ab6c6cdc3e82ac9ff1fbe7f" #t)) ("picturing-programs" . #s(pkg-info (catalog "picturing-programs") "325870110f44e006c228f41619b5c77f331b82a1" #t)) ("plai" . #s(pkg-info (catalog "plai") "6ac6f533410efd33f655d51314228c77c83172ac" #t)) ("plai-doc" . #s((sc-pkg-info pkg-info 3) (catalog "plai-doc") "c8363060f66e1bd1ddc72c8271e86cf3fcbeff9e" #t "plai")) ("plai-lib" . #s((sc-pkg-info pkg-info 3) (catalog "plai-lib") "978f240e75c6ad1a4843a010fe250d9977e93339" #t "plai")) ("planet" . #s(pkg-info (catalog "planet") "e1a53854ddae4cf4eef667a91f3c944eb1481371" #t)) ("planet-doc" . #s(pkg-info (catalog "planet-doc") "0356d590361d2b909c717e97dc4f9eb2b567461a" #t)) ("planet-lib" . #s(pkg-info (catalog "planet-lib") "a0993c8b1c3ae0f08f75a6e70d785dfa3e7adf66" #t)) ("plot" . #s(pkg-info (catalog "plot") "898a4c570ed38396d684f260efa240d66accead9" #t)) ("plot-compat" . #s(pkg-info (catalog "plot-compat") "01b129e6ee41080f090c02054d07c7856ae2c06c" #t)) ("plot-doc" . #s(pkg-info (catalog "plot-doc") "70b006d5da401955e00000fcf6a3aacc296cd687" #t)) ("plot-gui-lib" . #s(pkg-info (catalog "plot-gui-lib") "57d49ac10de7a4d2520fe8a3c625eb91e6af8359" #t)) ("plot-lib" . #s(pkg-info (catalog "plot-lib") "84fecbb718ed024176c79f271f30579f5d753339" #t)) ("preprocessor" . #s((sc-pkg-info pkg-info 3) (catalog "preprocessor") "38fc7981a096322c67e4f7d9afac6f1fe664529e" #t "preprocessor")) ("profile" . #s(pkg-info (catalog "profile") "2183f9722eb2efbe2c8feb400b73602ad97fe221" #t)) ("profile-doc" . #s(pkg-info (catalog "profile-doc") "1d7c7dd2ad37e0d6c842cf30c7a01a631b18a39e" #t)) ("profile-lib" . #s((sc-pkg-info pkg-info 3) (catalog "profile-lib") "4eed8ba01f406d199604b3727c405c2bf368a617" #t "profile")) ("quickscript" . #s((sc-pkg-info pkg-info 3) (catalog "quickscript") "0c531a78067442fb5ac2b404f92c92427cff8bec" #t "quickscript")) ("r5rs" . #s(pkg-info (catalog "r5rs") "febae235a352df6df59a2e2c45b8658322793103" #t)) ("r5rs-doc" . #s(pkg-info (catalog "r5rs-doc") "3b842a310c928a0647b0c29cb3eabe215270f8e2" #t)) ("r5rs-lib" . #s(pkg-info (catalog "r5rs-lib") "9fcc4ebda67e44abd34e6c97a1448cd9a3947b77" #t)) ("r6rs" . #s(pkg-info (catalog "r6rs") "2ba0a84b06e7ab0ab49308fb6b58c23b29e39662" #t)) ("r6rs-doc" . #s(pkg-info (catalog "r6rs-doc") "972c5762a28dd773190c7aa46f9b972ac7c4c44e" #t)) ("r6rs-lib" . #s(pkg-info (catalog "r6rs-lib") "0a80a45a9666924b02b7e41002b3122b0b0606e3" #t)) ("racket-cheat" . #s((sc-pkg-info pkg-info 3) (catalog "racket-cheat") "11ef1c76f6459d0039e13cdc04326f5c54c28714" #t "racket-cheat")) ("racket-doc" . #s(pkg-info (catalog "racket-doc") "7c41f0b0ae91a7d77da4d4f15c2e5e2f6ab5c689" #t)) ("racket-index" . #s(pkg-info (catalog "racket-index") "ec294cafcf79f9a7034d02b4b3ff8c2e2a717622" #t)) ("racket-lib" . #s(pkg-info (catalog "racket-lib") "addde48592db0ba3db8686c37951f20c7112d368" #f)) ("racklog" . #s((sc-pkg-info pkg-info 3) (catalog "racklog") "a587b4aa82ff470e0646185cce033900e1bdafa8" #t "racklog")) ("rackunit" . #s(pkg-info (catalog "rackunit") "4b9de5253bfc93a4ba11e527bed3314d48ab0fc8" #t)) ("rackunit-doc" . #s(pkg-info (catalog "rackunit-doc") "26d22124d6eab4c79b73d778deef7b9bc73c2dec" #t)) ("rackunit-gui" . #s(pkg-info (catalog "rackunit-gui") "4cb8bc7487ff6bd55f653708d51f29fb75b490e2" #t)) ("rackunit-lib" . #s(pkg-info (catalog "rackunit-lib") "0069571fffeb268232fab1db7e9c6e8ea124f1ac" #t)) ("rackunit-plugin-lib" . #s(pkg-info (catalog "rackunit-plugin-lib") "a663951f3c13e3a6c0228949d97c6b2eef4a5b6c" #t)) ("rackunit-typed" . #s((sc-pkg-info pkg-info 3) (catalog "rackunit-typed") "d3ea39520e71e1fdcdaee0a4218575592c44a41a" #t "typed")) ("readline" . #s(pkg-info (catalog "readline") "4c7e66cd27cf4408832c87e3ee86df7a6eefa09d" #t)) ("readline-doc" . #s(pkg-info (catalog "readline-doc") "3bded5f74e621afb05b47f4fb05e455d8c2ee3f7" #t)) ("readline-lib" . #s(pkg-info (catalog "readline-lib") "a5182fa3edd32b9d63e6c355ccb372e0310a9d6d" #t)) ("realm" . #s((sc-pkg-info pkg-info 3) (catalog "realm") "f013fc3db6882ece583015d48f0ad8e1e971601d" #t "realm")) ("redex" . #s(pkg-info (catalog "redex") "57c8ddc62fd86b0ede08e92a7e47d35527768e99" #t)) ("redex-benchmark" . #s(pkg-info (catalog "redex-benchmark") "2433d94442a5f32f16d152656b168d1e6218aaa7" #t)) ("redex-doc" . #s(pkg-info (catalog "redex-doc") "6cedd1cfdc891d7ac3b46fcfe7767a4681443515" #t)) ("redex-examples" . #s(pkg-info (catalog "redex-examples") "98a38101bd790fa6bd8ff16ce8e2fb65245cb87c" #t)) ("redex-gui-lib" . #s(pkg-info (catalog "redex-gui-lib") "80083d5cded16afb0d45a59cdd655ddd396b8685" #t)) ("redex-lib" . #s(pkg-info (catalog "redex-lib") "04c6bc3954bf30293e0b5cfe76294a799e2f1aae" #t)) ("redex-pict-lib" . #s(pkg-info (catalog "redex-pict-lib") "9b13a5976edd63728d8914fc20bffb5ad981302f" #t)) ("sandbox-lib" . #s(pkg-info (catalog "sandbox-lib") "5b6080ff4052f881c343f6ccc847f860acb501a9" #t)) ("sasl" . #s((sc-pkg-info pkg-info 3) (catalog "sasl") "8dc49968c1ef11c5dd77f56c5979453a36d2c750" #t "sasl")) ("sasl-doc" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-doc") "02b6cf131a97af9caa622a77592bb851f5d58fa3" #t "sasl")) ("sasl-lib" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-lib") "d4ecdad04e42658a69d70d2f7d5eadae7ed7d16e" #t "sasl")) ("scheme-lib" . #s(pkg-info (catalog "scheme-lib") "22e71c59ac20b09cd156062ce0fb0afb86aaa851" #t)) ("schemeunit" . #s((sc-pkg-info pkg-info 3) (catalog "schemeunit") "03986b499744194a9e06a66dfe988bed9fb8cc40" #t "schemeunit")) ("scribble" . #s(pkg-info (catalog "scribble") "862cac10d6934b0dca35b4ebace9ffa0faa3a381" #t)) ("scribble-doc" . #s(pkg-info (catalog "scribble-doc") "fc38088b2924e7d902ceafc94243fd3ca2a52b45" #t)) ("scribble-html-lib" . #s(pkg-info (catalog "scribble-html-lib") "13105ce2064fa963c535187a657792e1ec95d284" #t)) ("scribble-lib" . #s(pkg-info (catalog "scribble-lib") "9be1c71d1c0f3f0d41031416689f012a16ba535a" #t)) ("scribble-text-lib" . #s(pkg-info (catalog "scribble-text-lib") "1d816dcc95b5f6d77ff6633b82a6dd40f7effe4e" #t)) ("serialize-cstruct-lib" . #s(pkg-info (catalog "serialize-cstruct-lib") "caeab596cb494273bcb84b917205a66bd06d0528" #t)) ("sgl" . #s((sc-pkg-info pkg-info 3) (catalog "sgl") "a2feb4952e01c7e02af068978ade81d0a213e035" #t "sgl")) ("shell-completion" . #s((sc-pkg-info pkg-info 3) (catalog "shell-completion") "900d6f81d7f78d17ac1789436c36a3314f09fcec" #t "shell-completion")) ("slatex" . #s((sc-pkg-info pkg-info 3) (catalog "slatex") "7a36270767b37d0336b4d72c7ca89140f395f9af" #t "slatex")) ("slideshow" . #s(pkg-info (catalog "slideshow") "62d9fa5b5fc8f1b82fb7acae427e474488fb1c2a" #t)) ("slideshow-doc" . #s(pkg-info (catalog "slideshow-doc") "d023178269517583e08ea3afc13bd8e867e86eaa" #t)) ("slideshow-exe" . #s(pkg-info (catalog "slideshow-exe") "4764478f8f62ba0a9d66ef064945af605cac48cc" #t)) ("slideshow-lib" . #s(pkg-info (catalog "slideshow-lib") "b7d301d8496d23dd950606d50a2c9565067f77f5" #t)) ("slideshow-plugin" . #s(pkg-info (catalog "slideshow-plugin") "50fe3549998180cf9391d355fce67c1b95fee846" #t)) ("snip" . #s(pkg-info (catalog "snip") "f6401933decce0674344953461fc80be6b600748" #t)) ("snip-lib" . #s(pkg-info (catalog "snip-lib") "8cf6a919d5d9021f782423b3712a0e73cf93842a" #t)) ("source-syntax" . #s((sc-pkg-info pkg-info 3) (catalog "source-syntax") "b6dde72b228b3e8e7da35fbc25cce395c8dce9cb" #t "syntax")) ("srfi" . #s(pkg-info (catalog "srfi") "810795b1c70213bba3e3f02c29c0ec0be774d551" #t)) ("srfi-doc" . #s(pkg-info (catalog "srfi-doc") "9bcb860c00d8023421c3ab3e2785ab8ee92b8f9d" #t)) ("srfi-lib" . #s(pkg-info (catalog "srfi-lib") "8dd9d951c94054ec60a4e1d59fa2c1a462e8fff6" #t)) ("srfi-lite-lib" . #s(pkg-info (catalog "srfi-lite-lib") "2a40a8ecf4a2368b6c84d8f0bdd1c72df4f3cc7f" #t)) ("string-constants" . #s(pkg-info (catalog "string-constants") "602234aee270ea040b993f8146548aa0c835ee41" #t)) ("string-constants-doc" . #s(pkg-info (catalog "string-constants-doc") "627c9a564c187d9dbd2a1c6de302e38ed8cd105e" #t)) ("string-constants-lib" . #s(pkg-info (catalog "string-constants-lib") "85764e7ecf8df819142221a84380340c23607e18" #t)) ("swindle" . #s((sc-pkg-info pkg-info 3) (catalog "swindle") "56793a3d43336a0dfc1fb6d4933a6a7d0a6f18a6" #t "swindle")) ("syntax-color" . #s(pkg-info (catalog "syntax-color") "0ab7c010c146aacbc26f81d73050e5dcb1ec44a4" #t)) ("syntax-color-doc" . #s(pkg-info (catalog "syntax-color-doc") "ebc23963c2f235893a2ae998311c439ca5f2de5e" #t)) ("syntax-color-lib" . #s(pkg-info (catalog "syntax-color-lib") "c496941837238109ebf69e6a2a3740136baf077e" #t)) ("testing-util-lib" . #s(pkg-info (catalog "testing-util-lib") "6ad76708f90cc3938a72d556458f92cde3e30578" #t)) ("tex-table" . #s((sc-pkg-info pkg-info 3) (catalog "tex-table") "c6127491120f723f26dbba30d217e4f2aeb12084" #t "mrlib")) ("trace" . #s((sc-pkg-info pkg-info 3) (catalog "trace") "953c7b5e344cfc8859006ffbfce4fdf360647d81" #t "trace")) ("typed-racket" . #s(pkg-info (catalog "typed-racket") "7896fb7492e6230f58d73d202ce9e6f77e3f98b7" #t)) ("typed-racket-compatibility" . #s(pkg-info (catalog "typed-racket-compatibility") "1bf2425d25d54c653d693290f41e9587847357a6" #t)) ("typed-racket-doc" . #s(pkg-info (catalog "typed-racket-doc") "d338099f40c47dbfb62f699206e99cfdfa7e32d6" #t)) ("typed-racket-lib" . #s(pkg-info (catalog "typed-racket-lib") "3eff82ebcceeab467c35cf19044013c83a47bd32" #t)) ("typed-racket-more" . #s(pkg-info (catalog "typed-racket-more") "600a695a0f59fe2740cf9e2080a13e25310a5114" #t)) ("unix-socket" . #s(pkg-info (catalog "unix-socket") "c015b6081883e19b3f1d2343bddca9895499832c" #t)) ("unix-socket-doc" . #s(pkg-info (catalog "unix-socket-doc") "b5d7f058cd0984aef1d8214968e79c202b972636" #t)) ("unix-socket-lib" . #s(pkg-info (catalog "unix-socket-lib") "e8d16e6cf98e03dc141ce410e7fddb83eb420e54" #t)) ("web-server" . #s(pkg-info (catalog "web-server") "9e01035046e279382ab2c1aa5c3f68d7533afd64" #t)) ("web-server-doc" . #s(pkg-info (catalog "web-server-doc") "afb48732580aaf70f2d13dc0f3115f25672a0fb6" #t)) ("web-server-lib" . #s(pkg-info (catalog "web-server-lib") "1fb4a0c9718b0e835d730f92289f9855018dfee3" #t)) ("wxme" . #s(pkg-info (catalog "wxme") "a56f70bd66b595d03baa8fb60046c3826b3abaaa" #t)) ("wxme-lib" . #s(pkg-info (catalog "wxme-lib") "75d7ad58da6d6fe5e3b5d81fe3f1e73b37460ae5" #t)) ("xrepl" . #s(pkg-info (catalog "xrepl") "c577bf792fde613ada8dc08f3b76b9daf3fc6814" #t)) ("xrepl-doc" . #s(pkg-info (catalog "xrepl-doc") "1724207363217dc4e931ac92e017c594a7a2a44b" #t)) ("xrepl-lib" . #s(pkg-info (catalog "xrepl-lib") "829e38b7ffcd0508842871b5aa354a531ddee4fa" #t)) ("zo-lib" . #s(pkg-info (catalog "zo-lib") "0f00c96ccaf933002e5c1e9f6b9e8856cbcd04eb" #t)))
-diff -urN racket-7.4-orig/share/pkgs/srfi/info.rkt racket-7.4-remove-nonfree/share/pkgs/srfi/info.rkt
---- racket-7.4-orig/share/pkgs/srfi/info.rkt 2019-08-03 23:24:08.000000000 -0400
-+++ racket-7.4-remove-nonfree/share/pkgs/srfi/info.rkt 2019-08-28 09:26:35.582382386 -0400
-@@ -1 +1 @@
--(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.4"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc" "srfi-doc-nonfree"))) (define implies (quote ("srfi-lib" "srfi-doc" "srfi-doc-nonfree"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-+(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.4"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc"))) (define implies (quote ("srfi-lib" "srfi-doc"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/info.rkt racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/info.rkt
---- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/info.rkt 2019-08-03 23:24:10.000000000 -0400
-+++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1 +0,0 @@
--(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.4"))) (define collection (quote multi)) (define build-deps (quote ("mzscheme-doc" "scheme-lib" "base" "scribble-lib" "srfi-doc" "racket-doc" "r5rs-doc" "r6rs-doc" "compatibility-lib"))) (define pkg-desc "non-free documentation for \"srfi-lib\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt
---- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 2019-08-03 21:32:26.000000000 -0400
-+++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,3 +0,0 @@
--#lang info
--
--(define scribblings '(("srfi-nf.scrbl" (multi-page) (library 100))))
-diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl
---- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 2019-08-03 21:32:26.000000000 -0400
-+++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 1969-12-31 19:00:00.000000000 -0500
-@@ -1,68 +0,0 @@
--#lang scribble/doc
--@(require srfi/scribblings/util
-- scribble/manual
-- scribble/eval
-- scriblib/render-cond
-- scribble/core
-- scribble/html-properties
-- (for-syntax scheme/base)
-- (for-label scheme/base
-- racket/stream))
--
--@; ----------------------------------------------------------------------
--
--@title{SRFI Nonfree Libraries and Documentation}
--
--The @link[#:style srfi-std "http://srfi.schemers.org/"]{Scheme Requests for
--Implementation} (a.k.a. @deftech{SRFI}) process allows individual
--members of the Scheme community to propose libraries and extensions to
--be supported by multiple Scheme implementations.
--
--Racket is distributed with implementations of many SRFIs, most of
--which can be implemented as libraries. To import the bindings of SRFI
--@math{n}, use
--
--@racketblock[
--(require @#,elem{@racketidfont{srfi/}@math{n}})
--]
--
--This document lists the SRFIs that are supported by Racket and
--provides a link to the original SRFI specification (which is also
--distributed as part of Racket's documentation).
--
--The following SRFI specification documents are licensed restrictively.
--
--@table-of-contents[]
--
--
--@; ----------------------------------------
--
--@srfi[5]{A compatible let form with signatures and rest arguments}
--
--@redirect[5 '(
-- (let #t "unnamed")
--)]
--
--Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package.
--Only the SRFI specification document is nonfree.
--
--@; ----------------------------------------
--
--@srfi[29]{Localization}
--
--@redirect[29 '(
-- (current-language #f "current-language")
-- (current-country #f "current-country")
-- (current-locale-details #f "current-locale-details")
-- (declare-bundle! #f "declare-bundle!")
-- (store-bundle #f "store-bundle")
-- (load-bundle! #f "load-bundle!")
-- (localized-template #f "localized-template")
--)]
--
--Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package.
--Only the SRFI specification document is nonfree.
--
--@; ----------------------------------------
--
--@index-section[]
-diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html
---- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 2019-08-03 21:32:26.000000000 -0400
-+++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
-@@ -1,507 +0,0 @@
--<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
--<html>
-- <head>
-- <meta name="generator" content="HTML Tidy, see www.w3.org">
-- <title>SRFI 29: Localization</title>
-- <meta name="author" content="Scott G. Miller">
-- <meta name="description" content="Localization">
-- </head>
-- <body>
-- <H1>Title</H1>
--
-- SRFI 29: Localization
--
-- <H1>Author</H1>
--
-- Scott G. Miller
--
-- <H1>Abstract</H1>
--
-- This document specifies an interface to retrieving and
-- displaying locale sensitive messages. A Scheme program can
-- register one or more translations of templated messages, and
-- then write Scheme code that can transparently retrieve the
-- appropriate message for the locale under which the Scheme
-- system is running. <br>
--
--
-- <H1>Rationale</H1>
--
-- <p>As any programmer that has ever had to deal with making his
-- or her code readable in more than one locale, the process of
-- sufficiently abstracting program messages from their
-- presentation to the user is non-trivial without help from the
-- programming language. Most modern programming language
-- libraries do provide some mechanism for performing this
-- separation.</p>
--
-- <p>A portable API that allows a piece of code to run without
-- modification in different countries and under different
-- languages is a must for any non-trivial software project.
-- The interface should separate the logic of a program from
-- the myriad of translations that may be necessary.</p>
--
-- <p>The interface described in this document provides such
-- functionality. The underlying implementation is also allowed to
-- use whatever datastructures it likes to provide access to the
-- translations in the most efficient manner possible. In
-- addition, the implementation is provided with standardized
-- functions that programs will use for accessing an external,
-- unspecified repository of translations.</p>
--
-- <p>This interface <i>does not</i> cover all aspects of
-- localization, including support for non-latin characters,
-- number and date formatting, etc. Such functionality is the
-- scope of a future SRFI that may extend this one.</p>
--
-- <H1>Dependencies</H1>
--
-- An SRFI-29 conformant implementation must also implement
-- SRFI-28, Basic Format Strings. Message templates are strings
-- that must be processed by the <tt>format</tt> function
-- specified in that SRFI.
--
-- <H1>Specification</H1>
--
-- <h3>Message Bundles</h3>
--
-- <p>A Message Bundle is a set of message templates and their
-- identifying keys. Each bundle contains one or more such
-- key/value pairs. The bundle itself is associated with a
-- <i>bundle specifier</i> which uniquely identifies the
-- bundle.</p>
--
-- <h3>Bundle Specifiers</h3>
--
-- <p>A Bundle Specifier is a Scheme list that describes, in order
-- of importance, the package and locale of a message bundle.
-- In most cases, a locale specifier will have between one
-- and three elements. The first element is a symbol denoting the
-- package for which this bundle applies. The second and third
-- elements denote a <i>locale</i>. The second element (first
-- element of the locale) if present, is the two letter, ISO 639-1
-- language code for the bundle. The third element, if present, is
-- a two letter ISO 3166-1 country code. In some cases, a
-- fourth element may be present, specifying the encoding used for
-- the bundle. All bundle specifier elements are Scheme
-- symbols.</p>
--
-- <p>If only one translation is provided, it should be designated
-- only by a package name, for example <tt>(mathlib)</tt>. This
-- translation is called the <i>default</i> translation.</p>
--
-- <h3>Bundle Searching</h3>
--
-- <p>When a message template is retrieved from a bundle, the
-- Scheme implementation will provide the locale under which the
-- system is currently running. When the template is retrieved,
-- the package name will be specified. The Scheme system should
-- construct a Bundle Specifier from the provided package name and
-- the active locale. For example, when retrieving a message
-- template for French Canadian, in the <tt>mathlib</tt> package,
-- the bundle specifier '<tt>(mathlib fr ca)</tt>' is used. A
-- program may also retrieve the elements of the current locale
-- using the no-argument procedures:</p>
--
-- <p><b><a name="current-language"></a><tt>current-language</tt></b> <tt>->
-- <i>symbol</i></tt><br>
-- <tt><b>current-language</b> <i>symbol</i> ->
-- undefined</tt><br>
-- </p>
--
-- <blockquote>
-- When given no arguments, returns the current ISO 639-1
-- language code as a symbol. If provided with an
-- argument, the current language is set to that named by the
-- symbol for the currently executing Scheme thread (or for the
-- entire Scheme system if such a distinction is not possible).
--
-- </blockquote>
--
-- <p><b><a name="current-country"></a><tt>current-country</tt></b> <tt>->
-- <i>symbol</i></tt><br>
-- <tt><b>current-country</b> <i>symbol</i> ->
-- undefined</tt><br>
-- </p>
--
-- <blockquote>
-- returns the current ISO 3166-1 country code as a symbol.
-- If provided with an argument, the current country is
-- set to that named by the symbol for the currently executing
-- Scheme thread (or for the entire Scheme system if such a
-- distinction is not possible).
-- </blockquote>
--
-- <p><b><a name="current-locale-details"></a><tt>current-locale-details</tt></b> <tt>-> <i>list of
-- symbol</i></tt>s<br>
-- <tt><b>current-locale-details</b> <i>list-of-symbols</i> ->
-- undefined</tt><br>
-- </p>
--
-- <blockquote>
-- Returns a list of additional locale details as a list of
-- symbols. This list may contain information about
-- encodings or other more specific information. If
-- provided with an argument, the current locale details are set
-- to those given in the currently executing Scheme thread (or
-- for the entire Scheme system if such a distinction is not
-- possible).
-- </blockquote>
--
-- <p>The Scheme System should first check for a bundle with the
-- exact name provided. If no such bundle is found, the last
-- element from the list is removed and a search is tried for a
-- bundle with that name. If no bundle is then found, the list is
-- shortened by removing the last element again. If no message is
-- found and the bundle specifier is now the empty list, an error
-- should be raised.</p>
--
-- <p>The reason for this search order is to provide the most
-- locale sensitive template possible, but to fall back on more
-- general templates if a translation has not yet been provided
-- for the given locale.</p>
--
-- <h3>Message Templates</h3>
--
-- <p>A message template is a localized message that may or may
-- not contain one of a number of formatting codes. A message
-- template is a Scheme string. The string is of a form that can
-- be processed by the <tt>format</tt> procedure found in many
-- Scheme systems and formally specified in SRFI-28 (Basic Format
-- Strings).</p>
--
-- <p>This SRFI also extends SRFI-28 to provide an additional
-- <tt>format</tt> escape code:</p>
--
-- <blockquote>
-- <tt>~[n]@*</tt> - Causes a value-requiring escape code that
-- follows this code immediately to reference the [N]'th
-- optional value absolutely, rather than the next unconsumed
-- value. The referenced value is <i>not</i> consumed.
-- </blockquote>
-- This extension allows optional values to be positionally
-- referenced, so that message templates can be constructed that
-- can produce the proper word ordering for a language.
--
-- <h3>Preparing Bundles</h3>
-- Before a bundle may be used by the Scheme system to retrieve
-- localized template messages, they must be made available to the
-- Scheme system. This SRFI specifies a way to portably
-- define the bundles, as well as store them in and retrieve them
-- from an unspecified system which may be provided by resources
-- outside the Scheme system.<br>
--
--
-- <p><b><a name="declare-bundle!"></a><tt>declare-bundle!</tt></b> <tt><i>bundle-specifier
-- association-list</i> -> undefined<br>
-- </tt></p>
--
-- <blockquote>
-- Declares a new bundle named by the given bundle-specifier.
-- The contents of the bundle are defined by the provided
-- association list. The list contains associations
-- between Scheme symbols and the message templates (Scheme
-- strings) they name. If a bundle already exists with the
-- given name, it is overwritten with the newly declared
-- bundle.<br>
-- </blockquote>
-- <tt><a name="store-bundle"></a><b>store-bundle</b> <i>bundle-specifier</i> ->
-- boolean</tt><br>
--
--
-- <blockquote>
-- Attempts to store a bundle named by the given bundle
-- specifier, and previously made available using
-- <tt>declare-bundle!</tt> or <tt>load-bundle!</tt>, in an
-- unspecified mechanism that may be persistent across Scheme
-- system restarts. If successful, a non-false value is
-- returned. If unsuccessful, <tt>#f</tt> is returned.<br>
-- </blockquote>
-- <tt><a name="load-bundle!"></a><b>load-bundle!</b> <i>bundle-specifier</i> ->
-- boolean</tt><br>
--
--
-- <blockquote>
-- Attempts to retrieve a bundle from an unspecified mechanism
-- which stores bundles outside the Scheme system. If the
-- bundle was retrieved successfully, the function returns a
-- non-false value, and the bundle is immediately available to
-- the Scheme system. If the bundle could not be found or loaded
-- successfully, the function returns <tt>#f</tt>, and the
-- Scheme system's bundle registry remains unaffected.<br>
-- </blockquote>
-- A compliant Scheme system may choose not to provide any
-- external mechanism to store localized bundles. If it does
-- not, it must still provide implementations for
-- <tt>store-bundle</tt> and <tt>load-bundle!</tt>. In such a
-- case, both functions must return <tt>#f</tt> regardless of the
-- arguments given. Users of this SRFI should recognize that the
-- inability to load or store a localized bundle in an external
-- repository is <i>not</i> a fatal error.<br>
--
--
-- <h3>Retrieving Localized Message Templates</h3>
--
-- <p><a name="localized-template"></a><b><tt>localized-template</tt></b> <i><tt>package-name
-- message-template-name</tt></i> <tt>-> <i>string or #f<br>
-- </i></tt></p>
--
-- <blockquote>
-- Retrieves a localized message template for the given package
-- name and the given message template name (both symbols).
-- If no such message could be found, false (#f) is
-- returned.<br>
-- <br>
-- </blockquote>
-- After retrieving a template, the calling program can use
-- <tt>format</tt> to produce a string that can be displayed to
-- the user.<br>
--
--
-- <h2>Examples</h2>
-- The below example makes use of SRFI-29 to display simple,
-- localized messages. It also defines its bundles in such a
-- way that the Scheme system may store and retrieve the bundles
-- from a more efficient system catalog, if available.<br>
--
--<pre>
--(let ((translations
-- '(((en) . ((time . "Its ~a, ~a.")
-- (goodbye . "Goodbye, ~a.")))
-- ((fr) . ((time . "~1@*~a, c'est ~a.")
-- (goodbye . "Au revoir, ~a."))))))
-- (for-each (lambda (translation)
-- (let ((bundle-name (cons 'hello-program (car translation))))
-- (if (not (load-bundle! bundle-name))
-- (begin
-- (declare-bundle! bundle-name (cdr translation))
-- (store-bundle! bundle-name)))))
-- translations))
--
--(define localized-message
-- (lambda (message-name . args)
-- (apply format (cons (localized-template 'hello-program
-- message-name)
-- args))))
--
--(let ((myname "Fred"))
-- (display (localized-message 'time "12:00" myname))
-- (display #\newline)
--
-- (display (localized-message 'goodbye myname))
-- (display #\newline))
--
--;; Displays (English):
--;; Its 12:00, Fred.
--;; Goodbye, Fred.
--;;
--;; French:
--;; Fred, c'est 12:00.
--;; Au revoir, Fred.
--</pre>
--
-- <H1>Implementation</H1>
--
-- <p>The implementation requires that the Scheme system provide a
-- definition for <tt>current-language</tt> and
-- <tt>current-country</tt> capable of distinguishing the correct
-- locale present during a Scheme session. The definitions of
-- those functions in the reference implementation are not capable
-- of that distinction. Their implementation is provided only so
-- that the following code can run in any R4RS scheme system.
-- <br>
-- </p>
--
-- <p>In addition, the below implementation of a compliant
-- <tt>format</tt> requires SRFI-6 (Basic String Ports) and
-- SRFI-23 (Error reporting)</p>
--<pre>
--;; The association list in which bundles will be stored
--(define *localization-bundles* '())
--
--;; The current-language and current-country functions provided
--;; here must be rewritten for each Scheme system to default to the
--;; actual locale of the session
--(define current-language
-- (let ((current-language-value 'en))
-- (lambda args
-- (if (null? args)
-- current-language-value
-- (set! current-language-value (car args))))))
--
--(define current-country
-- (let ((current-country-value 'us))
-- (lambda args
-- (if (null? args)
-- current-country-value
-- (set! current-country-value (car args))))))
--
--;; The load-bundle! and store-bundle! both return #f in this
--;; reference implementation. A compliant implementation need
--;; not rewrite these procedures.
--(define load-bundle!
-- (lambda (bundle-specifier)
-- #f))
--
--(define store-bundle!
-- (lambda (bundle-specifier)
-- #f))
--
--;; Declare a bundle of templates with a given bundle specifier
--(define declare-bundle!
-- (letrec ((remove-old-bundle
-- (lambda (specifier bundle)
-- (cond ((null? bundle) '())
-- ((equal? (caar bundle) specifier)
-- (cdr bundle))
-- (else (cons (car bundle)
-- (remove-old-bundle specifier
-- (cdr bundle))))))))
-- (lambda (bundle-specifier bundle-assoc-list)
-- (set! *localization-bundles*
-- (cons (cons bundle-specifier bundle-assoc-list)
-- (remove-old-bundle bundle-specifier
-- *localization-bundles*))))))
--
--;;Retrieve a localized template given its package name and a template name
--(define localized-template
-- (letrec ((rdc
-- (lambda (ls)
-- (if (null? (cdr ls))
-- '()
-- (cons (car ls) (rdc (cdr ls))))))
-- (find-bundle
-- (lambda (specifier template-name)
-- (cond ((assoc specifier *localization-bundles*) =>
-- (lambda (bundle) bundle))
-- ((null? specifier) #f)
-- (else (find-bundle (rdc specifier)
-- template-name))))))
-- (lambda (package-name template-name)
-- (let loop ((specifier (cons package-name
-- (list (current-language)
-- (current-country)))))
-- (and (not (null? specifier))
-- (let ((bundle (find-bundle specifier template-name)))
-- (and bundle
-- (cond ((assq template-name bundle) => cdr)
-- ((null? (cdr specifier)) #f)
-- (else (loop (rdc specifier)))))))))))
--
--;;An SRFI-28 and SRFI-29 compliant version of format. It requires
--;;SRFI-23 for error reporting.
--(define format
-- (lambda (format-string . objects)
-- (let ((buffer (open-output-string)))
-- (let loop ((format-list (string->list format-string))
-- (objects objects)
-- (object-override #f))
-- (cond ((null? format-list) (get-output-string buffer))
-- ((char=? (car format-list) #\~)
-- (cond ((null? (cdr format-list))
-- (error 'format "Incomplete escape sequence"))
-- ((char-numeric? (cadr format-list))
-- (let posloop ((fl (cddr format-list))
-- (pos (string->number
-- (string (cadr format-list)))))
-- (cond ((null? fl)
-- (error 'format "Incomplete escape sequence"))
-- ((and (eq? (car fl) '#\@)
-- (null? (cdr fl)))
-- (error 'format "Incomplete escape sequence"))
-- ((and (eq? (car fl) '#\@)
-- (eq? (cadr fl) '#\*))
-- (loop (cddr fl) objects (list-ref objects pos)))
-- (else
-- (posloop (cdr fl)
-- (+ (* 10 pos)
-- (string->number
-- (string (car fl)))))))))
-- (else
-- (case (cadr format-list)
-- ((#\a)
-- (cond (object-override
-- (begin
-- (display object-override buffer)
-- (loop (cddr format-list) objects #f)))
-- ((null? objects)
-- (error 'format "No value for escape sequence"))
-- (else
-- (begin
-- (display (car objects) buffer)
-- (loop (cddr format-list)
-- (cdr objects) #f)))))
-- ((#\s)
-- (cond (object-override
-- (begin
-- (display object-override buffer)
-- (loop (cddr format-list) objects #f)))
-- ((null? objects)
-- (error 'format "No value for escape sequence"))
-- (else
-- (begin
-- (write (car objects) buffer)
-- (loop (cddr format-list)
-- (cdr objects) #f)))))
-- ((#\%)
-- (if object-override
-- (error 'format "Escape sequence following positional override does not require a value"))
-- (display #\newline buffer)
-- (loop (cddr format-list) objects #f))
-- ((#\~)
-- (if object-override
-- (error 'format "Escape sequence following positional override does not require a value"))
-- (display #\~ buffer)
-- (loop (cddr format-list) objects #f))
-- (else
-- (error 'format "Unrecognized escape sequence"))))))
-- (else (display (car format-list) buffer)
-- (loop (cdr format-list) objects #f)))))))
--
--</pre>
--
-- <H1>Copyright</H1>
--
-- Copyright (C) Scott G. Miller (2002). All Rights Reserved.
--
-- <p>This document and translations of it may be copied and
-- furnished to others, and derivative works that comment on or
-- otherwise explain it or assist in its implementation may be
-- prepared, copied, published and distributed, in whole or in
-- part, without restriction of any kind, provided that the above
-- copyright notice and this paragraph are included on all such
-- copies and derivative works. However, this document itself may
-- not be modified in any way, such as by removing the copyright
-- notice or references to the Scheme Request For Implementation
-- process or editors, except as needed for the purpose of
-- developing SRFIs in which case the procedures for copyrights
-- defined in the SRFI process must be followed, or as required to
-- translate it into languages other than English.</p>
--
-- <p>The limited permissions granted above are perpetual and will
-- not be revoked by the authors or their successors or
-- assigns.</p>
--
-- <p>This document and the information contained herein is
-- provided on an "AS IS" basis and THE AUTHOR AND THE SRFI
-- EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-- BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
-- HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
-- OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
-- <hr>
--
-- <address>
-- Editor: <a href="mailto:srfi-editors@srfi.schemers.org">David
-- Rush</a>
-- </address>
--
-- <address>
-- Author: <a href="mailto:scgmille@freenetproject.org">Scott G.
-- Miller</a>
-- </address>
-- <!-- Created: Tue Sep 29 19:20:08 EDT 1998 -->
-- <!-- hhmts start -->Last modified: Mon Jun 17 12:00:08 Pacific
-- Daylight Time 2002 <!-- hhmts end --> <br>
-- </body>
--</html>
--
-diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html
---- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 2019-08-03 21:32:26.000000000 -0400
-+++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
-@@ -1,345 +0,0 @@
--<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
--<html>
--<head>
-- <title>SRFI 5: A compatible let form with signatures and rest arguments</title>
--</head>
--<body>
--
--<H1>Title</H1>
--
--SRFI-5: A compatible <code>let</code> form with signatures and rest arguments
--
--<H1>Author</H1>
--
--Andy Gaynor
--
--<H1>Status</H1>
--
--This SRFI is currently in ``final'' status. To see an explanation of each status that a SRFI can hold, see <A HREF="http://srfi.schemers.org/srfi-process.html">here</A>.
--You can access the discussion on this SRFI via <A HREF="http://srfi.schemers.org/srfi-5/mail-archive/maillist.html">the archive of the mailing list</A>.
--<P><UL>
--<LI>Received: 1999/2/2
--<LI>Draft: 1999/2/10-1999/04/12
--<LI>Final: 1999/4/26
--<LI>Revised reference implementation: 2003/01/27
--</UL>
--
--<H1>Abstract</H1>
--
--The <i>named-let</i> incarnation of the <code>let</code> form has two slight
--inconsistencies with the <code>define</code> form. As defined, the <code>let</code>
--form makes no accommodation for rest arguments, an issue of functionality
--and consistency. As defined, the <code>let</code> form does not accommodate
--signature-style syntax, an issue of aesthetics and consistency. Both
--issues are addressed here in a manner which is compatible with the traditional
--<code>let</code> form but for minor extensions.
--
--<H1>Rationale</H1>
--
--<H2>Signature-style Syntax</H2>
--
--Consider the following two equivalent definitions:
--
--<p><pre>
--(define fibonacci
-- (lambda (n i f0 f1)
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1)))))
--
--(define (fibonacci n i f0 f1)
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1))))
--</pre>
--
--Although there is a named-let analog for the former form, there is none
--for the latter. To wit, suppose one wished to compute the 10th element
--of the Fibonacci sequence using a named let:
--
--<p>
--<pre>
--(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1))))
--Values: 55
--</pre>
--
--As it stands, one cannot equivalently write
--
--<p>
--<pre>
--(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1))))
--</pre>
--
--which is consistent with <code>define</code>'s signature-style form.
--<p>Those that favor the signature style may prefer this extension.
--In any case, it may be more appropriate to include all bound names within
--the binding section. As presented, this straightforward extension
--introduces no ambiguity or incompatibility with the existing definition
--of let.
--
--<H2>Rest Arguments</H2>
--
--As it stands, one cannot write a named let with rest arguments, as in
--
--<p>
--<pre>
--(let (blast (port (current-output-port)) . (x (+ 1 2) 4 5))
-- (if (null? x)
-- 'just-a-silly-contrived-example
-- (begin
-- (write (car x) port)
-- (apply blast port (cdr x)))))
--</pre>
--
--otherwise equivalent to
--
--<p>
--<pre>
--(letrec ((blast (lambda (port . x)
-- (if (null? x)
-- 'just-a-silly-contrived-example
-- (begin
-- (write (car x) port)
-- (apply blast port (cdr x)))))))
-- (blast (current-output-port) (+ 1 2) 4 5))
--</pre>
--
--While this example is rather contrived, the functionality is not.
--There are several times when the author has used this construct in practice.
--Regardless, there is little reason to deny the <code>let</code> form access to
--all the features of lambda functionality.
--
--<H2>Symbols in Binding Sections</H2>
--
--Both the features above rely upon the placement of symbols in <code>let</code>
--binding lists (this statement is intentially simplistic). The only
--other apparent use of such symbol placement is to tersely bind variables
--to unspecified values. For example, one might desire to use
--<code>(let (foo bar baz) ...)</code>
--to bind <code>foo</code>, <code>bar</code>, and <code>baz</code> to
--unspecified values.
--
--<p>This usage is considered less important in light of the rationales
--presented above, and an alternate syntax is immediately apparent, as
--in <code>(let ((foo) (bar) (baz)) ...)</code> This may even
--be preferable, consistently parenthesizing normal binding clauses.
--
--<H1>Specification</H1>
--
--<H2>Syntax</H2>
--
--<p>
--A formal specification of the syntax follows. Below, body, expression,
--and identifier are free. Each instantiation of binding-name must be
--unique.
--</p>
--
--<p>
--<pre>
-- let = "(" "let" let-bindings body ")"
-- expressions = nothing | expression expressions
-- let-bindings = let-name bindings
-- | "(" let-name "." bindings ")"
-- let-name = identifier
-- bindings = "(" ")"
-- | rest-binding
-- | "(" normal-bindings ["." rest-binding] ")"
--normal-bindings = nothing
-- | normal-binding normal-bindings
-- normal-binding = "(" binding-name expression ")"
-- binding-name = identifier
-- rest-binding = "(" binding-name expressions ")"
--</pre>
--
--<p>
--For clarity and convenience, an informal specification follows.
--</p>
--
--<ol>
--<li><a name="unnamed">Unnamed</a>
--
--<p><pre>
--(let ((<parameter> <argument>)...)
-- <body>...)
--</pre>
--</li>
--
--<li><a name="named-non-sig">
--Named, non-signature-style, no rest argument</a>
--
--<p><pre>
--(let <name> ((<parameter> <argument>)...)
-- <body>...)
--</pre>
--</li>
--
--<li><a name="named-sig">Named, signature-style, no rest argument</a>
--
--<p><pre>
--(let (<name> (<parameter> <argument>)...)
-- <body>...)
--</pre>
--</li>
--
--<li><a name="named-non-sig-rest">Named, non-signature-style, rest argument</a>
--
--<p><pre>
--(let <name> ((<parameter> <argument>)...
--
--. (<rest-parameter> <rest-argument>...))
-- <body>...)
--</pre>
--
--<li><a name="named-sig-rest">Named, signature-style, rest argument</a>
--
--<p><pre>
--(let (<name> (<parameter> <argument>)...
--
--. (<rest-parameter> <rest-argument>...))
-- <body>...)
--</pre>
--</li>
--</ol>
--
--<H2>Semantics</H2>
--
--Let <code>$lambda</code> and <code>$letrec</code> be hygienic bindings for the <code>lambda</code>
--and <code>letrec</code> forms, respectively.
--
--<ul>
--<li>For informal syntax 1:
--
--<p><pre>
--(($lambda (<parameter>...) <body>...) <argument>...)
--</pre>
--</li>
--
--<li>For informal syntaxes 2 and 3:
--
--<p>
--<pre>
--($letrec ((<name> ($lambda (<parameter>...) <body>...)))
-- (<name> <argument>...))
--</pre>
--</li>
--
--<li>For informal syntaxes 4 and 5:
--
--<p>
--<pre>
--($letrec ((<name> ($lambda (<parameter>...
--
--. <rest-parameter>) <body>...)))
-- (<name> <argument>... <rest-argument>...))
--</pre>
--</li>
--</ul>
--
--<H1>Implementation</H1>
--
--Here is an implementation using <code>SYNTAX-RULES</code>.
--
--<p>
--<pre>
--;; Use your own standard let.
--;; Or call a lambda.
--;; (define-syntax standard-let
--;;
--;; (syntax-rules ()
--;;
--;; ((let ((var val) ...) body ...)
--;; ((lambda (var ...) body ...) val ...))))
--
--(define-syntax let
--
-- (syntax-rules ()
--
-- ;; No bindings: use standard-let.
-- ((let () body ...)
-- (standard-let () body ...))
-- ;; Or call a lambda.
-- ;; ((lambda () body ...))
--
-- ;; All standard bindings: use standard-let.
-- ((let ((var val) ...) body ...)
-- (standard-let ((var val) ...) body ...))
-- ;; Or call a lambda.
-- ;; ((lambda (var ...) body ...) val ...)
--
-- ;; One standard binding: loop.
-- ;; The all-standard-bindings clause didn't match,
-- ;; so there must be a rest binding.
-- ((let ((var val) . bindings) body ...)
-- (let-loop #f bindings (var) (val) (body ...)))
--
-- ;; Signature-style name: loop.
-- ((let (name binding ...) body ...)
-- (let-loop name (binding ...) () () (body ...)))
--
-- ;; defun-style name: loop.
-- ((let name bindings body ...)
-- (let-loop name bindings () () (body ...)))))
--
--(define-syntax let-loop
--
-- (syntax-rules ()
--
-- ;; Standard binding: destructure and loop.
-- ((let-loop name ((var0 val0) binding ...) (var ... ) (val ... ) body)
-- (let-loop name ( binding ...) (var ... var0) (val ... val0) body))
--
-- ;; Rest binding, no name: use standard-let, listing the rest values.
-- ;; Because of let's first clause, there is no "no bindings, no name" clause.
-- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
-- (standard-let ((var val) ... (rest-var (list rest-val ...))) . body))
-- ;; Or call a lambda with a rest parameter on all values.
-- ;; ((lambda (var ... . rest-var) . body) val ... rest-val ...))
-- ;; Or use one of several other reasonable alternatives.
--
-- ;; No bindings, name: call a letrec'ed lambda.
-- ((let-loop name () (var ...) (val ...) body)
-- ((letrec ((name (lambda (var ...) . body)))
-- name)
-- val ...))
--
-- ;; Rest binding, name: call a letrec'ed lambda.
-- ((let-loop name (rest-var rest-val ...) (var ...) (val ...) body)
-- ((letrec ((name (lambda (var ... . rest-var) . body)))
-- name)
-- val ... rest-val ...))))
--</pre>
--
--
--<H1>Copyright</H1>
--
--Copyright (C) Andy Gaynor (1999). All Rights Reserved.
--<p>This document and translations of it may be copied and furnished to
--others, and derivative works that comment on or otherwise explain it or
--assist in its implementation may be prepared, copied, published and distributed,
--in whole or in part, without restriction of any kind, provided that the
--above copyright notice and this paragraph are included on all such copies
--and derivative works. However, this document itself may not be modified
--in any way, such as by removing the copyright notice or references to the
--Scheme Request For Implementation process or editors, except as needed
--for the purpose of developing SRFIs in which case the procedures for copyrights
--defined in the SRFI process must be followed, or as required to translate
--it into languages other than English.
--<p>The limited permissions granted above are perpetual and will not be
--revoked by the authors or their successors or assigns.
--<p>This document and the information contained herein is provided on an
--"AS IS" basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES,
--EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
--USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
--WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
--
-- <hr>
-- <address>Editor: <a href="mailto:srfi-editors@srfi.schemers.org">Mike Sperber</a></address>
--
--</body>
--</html>
diff --git a/racket-configure-c99.patch b/racket-configure-c99.patch
deleted file mode 100644
index f4f4014..0000000
--- a/racket-configure-c99.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Fix generic C99 compatibility issue in the configure script because it
-was generated by a historic autoconf version. This will go away once
-upstream re-runs autoconf, and until then, the patch will keep
-applying, so there is no need to upstream it.
-
-diff --git a/src/lt/configure b/src/lt/configure
-index e3f5aa6ed9a21307..aa4f50637331d427 100755
---- a/src/lt/configure
-+++ b/src/lt/configure
-@@ -2465,7 +2465,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- for ac_declaration in \
-- '' \
-+ '#include <stdlib.h>' \
- 'extern "C" void std::exit (int) throw (); using std::exit;' \
- 'extern "C" void std::exit (int); using std::exit;' \
- 'extern "C" void exit (int) throw ();' \
-@@ -3640,8 +3640,8 @@ main ()
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
-- exit(2);
-- exit (0);
-+ return 2;
-+ return 0;
- }
- _ACEOF
- rm -f conftest$ac_exeext
diff --git a/racket.spec b/racket.spec
deleted file mode 100644
index 1135c4b..0000000
--- a/racket.spec
+++ /dev/null
@@ -1,442 +0,0 @@
-Name: racket
-Version: 7.4
-Release: 11%{?dist}
-Summary: General purpose programming language
-
-License: GPLv3 and LGPLv3 and MIT
-URL: https://racket-lang.org
-Source0: https://mirror.racket-lang.org/installers/%{version}/%{name}-%{version}-s...
-
-# Remove SRFI library and docs with restrictive licensing.
-# See: https://github.com/racket/srfi/issues/4 (open)
-# Note: Upstream maintainers have confirmed this
-# is safe, since the removed components are
-# extra elements which nothing else in the
-# package depends on.
-# Note: SRFI 5 was replaced with a FOSS implementation. Only
-# nonfree docs need to be removed by this patch now.
-Patch0: racket-7.4-remove-nonfree.patch
-Patch1: racket-configure-c99.patch
-
-# Issue Building for armv7hl in koji
-ExcludeArch: %{arm} s390x
-
-# To compile the program
-BuildRequires: make
-BuildRequires: gcc
-
-# To fix rpath issue with executables.
-BuildRequires: chrpath
-
-# Racket heavily utilizes the system ffi library.
-BuildRequires: libffi-devel
-
-# For the racket/gui library (via libffi)
-# https://github.com/racket/gui/blob/master/gui-lib/mred/private/wx/gtk/gtk...
-BuildRequires: gtk3
-
-# For the racket/draw library (via libffi)
-# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/ca...
-BuildRequires: cairo
-# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/pa...
-BuildRequires: pango
-# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/pn...
-BuildRequires: libpng
-# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/jp...
-BuildRequires: libjpeg-turbo
-# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/gl...
-BuildRequires: glib2
-
-# To validate desktop file
-BuildRequires: desktop-file-utils
-
-BuildRequires: git
-
-# Require the subpackages
-Requires: racket-minimal%{?_isa} = %{version}-%{release}
-Requires: racket-pkgs = %{version}-%{release}
-Recommends: racket-doc = %{version}-%{release}
-
-%description
-Racket is a general-purpose programming language as well as
-the world's first ecosystem for developing and deploying new
-languages. Make your dream language, or use one of the dozens
-already available.
-
-%prep
-
-%autosetup -v -p1
-
-# Remove bundled libffi
-rm -r src/foreign/libffi
-
-%build
-cd src
-
-# Disable SSE on i686 until fixed upstream
-# https://github.com/racket/racket/issues/2245
-%ifarch %{ix86}
- %set_build_flags
- export CFLAGS=$(echo $CFLAGS | sed -e "s/-mfpmath=sse *//")
-%endif
-
-# do not use generations on architectures
-# where it is broken
-# (this is currently a no-op, since arm and s390x are not enabled yet.
-# It is art of a fix that will land in a future release)
-%configure \
-%ifarch %{arm} s390x
- --disable-generations \
-%endif
- --enable-pthread \
- --enable-shared \
- --enable-libffi \
- --disable-strip
-
-%make_build
-
-%install
-cd src
-%make_install
-
-# Delete mred binaries and replace them with links.
-rm -vf ${RPM_BUILD_ROOT}%{_bindir}/mred
-rm -vf ${RPM_BUILD_ROOT}%{_bindir}/mred-text
-ln -vs %{_bindir}/gracket ${RPM_BUILD_ROOT}%{_bindir}/mred
-ln -vs %{_bindir}/gracket-text ${RPM_BUILD_ROOT}%{_bindir}/mred-text
-
-# Delete static library. Apperently --disable-libs does not stop it.
-rm -vf ${RPM_BUILD_ROOT}%{_libdir}/libracket3m.a
-
-# Delete duplicate license files
-rm -rf %{buildroot}%{_datadir}/racket/COPYING*txt
-
-# Fix the rpath error.
-chrpath --delete ${RPM_BUILD_ROOT}%{_bindir}/racket
-chrpath --delete ${RPM_BUILD_ROOT}%{_libdir}/racket/gracket
-
-# Remove the libtool files.
-rm -f ${RPM_BUILD_ROOT}%{_libdir}/*.la
-
-# Fix paths in the desktop files.
-sed -i "s#${RPM_BUILD_ROOT}##g" \
- ${RPM_BUILD_ROOT}/%{_datadir}/applications/*.desktop
-
-# Validate desktop files
-desktop-file-validate %{buildroot}/%{_datadir}/applications/*.desktop
-
-# Fix paths in html docs
-DOCS_TO_FIX="
-syntax/module-helpers.html
-rackunit/api.html
-reference/collects.html"
-for i in $DOCS_TO_FIX; do
- sed -i "s#${RPM_BUILD_ROOT}##g" \
- ${RPM_BUILD_ROOT}/%{_datadir}/doc/racket/$i
-done
-
-# Remove the executable bit on legacy template file
-chmod -x ${RPM_BUILD_ROOT}%{_libdir}/racket/starter-sh
-
-%ldconfig_scriptlets
-
-# Equivalent to upstream's minimal-racket release
-%package minimal
-Summary: A minimal Racket installation
-Requires: racket-collects = %{version}-%{release}
-%description minimal
-Racket's core runtime
-
-%package collects
-Summary: Racket's core collections libraries
-BuildArch: noarch
-%description collects
-Libraries providing Racket's core functionality
-
-# Arch independent source and bytecode files
-%package pkgs
-Summary: Racket package collections
-# See BuildRequires section for details on dependencies
-Requires: gtk3
-Requires: cairo
-Requires: pango
-Requires: libpng
-Requires: glib2
-Requires: libjpeg-turbo
-Requires: racket-minimal = %{version}-%{release}
-BuildArch: noarch
-%description pkgs
-Additional packages and libraries for Racket
-
-# Development headers and links
-%package devel
-Summary: Development files for Racket
-Requires: racket-minimal%{?_isa} = %{version}-%{release}
-%description devel
-Files needed to link against Racket.
-
-# HTML documentation
-%package doc
-Summary: Documentation files for Racket
-BuildArch: noarch
-%description doc
-A local installation of the Racket documentation system.
-
-%files
-%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
-%{_bindir}/drracket
-%{_bindir}/gracket
-%{_bindir}/gracket-text
-%{_bindir}/mred-text
-%{_bindir}/mred
-%{_bindir}/mzc
-%{_bindir}/mzpp
-%{_bindir}/mzscheme
-%{_bindir}/mztext
-%{_bindir}/pdf-slatex
-%{_bindir}/plt-games
-%{_bindir}/plt-help
-%{_bindir}/plt-r5rs
-%{_bindir}/plt-r6rs
-%{_bindir}/plt-web-server
-%{_bindir}/scribble
-%{_bindir}/setup-plt
-%{_bindir}/slatex
-%{_bindir}/slideshow
-%{_bindir}/swindle
-%{_datadir}/applications/
-
-%files collects
-%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
-%{_datadir}/racket/collects
-
-%files minimal
-%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
-%{_bindir}/racket
-%{_bindir}/raco
-%{_libdir}/racket
-%{_libdir}/libracket3m-%{version}.so
-%{_datadir}/racket/links.rktd
-%{_datadir}/racket/pkgs/racket-lib
-%{_datadir}/man/man1/racket*
-%{_datadir}/man/man1/raco*
-%dir %{_datadir}/racket
-%dir %{_datadir}/doc/racket
-%dir %{_sysconfdir}/racket/
-%config %{_sysconfdir}/racket/config.rktd
-%exclude %{_libdir}/libracket3m.so
-
-%files pkgs
-%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
-%{_datadir}/racket
-%{_datadir}/man/man1/drracket*
-%{_datadir}/man/man1/gracket*
-%{_datadir}/man/man1/mred*
-%{_datadir}/man/man1/mzc*
-%{_datadir}/man/man1/mzscheme*
-%{_datadir}/man/man1/plt-help*
-%{_datadir}/man/man1/setup-plt*
-%exclude %{_datadir}/racket/links.rktd
-%exclude %dir %{_datadir}/racket/pkgs/racket-lib
-%exclude %dir %{_datadir}/racket/collects
-
-%files devel
-%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
-%{_includedir}/racket
-%{_libdir}/libracket3m.so
-
-%files doc
-%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
-%{_datadir}/doc/racket
-
-%changelog
-* Fri Jul 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-11
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
-
-* Wed Apr 26 2023 Florian Weimer <fweimer(a)redhat.com> - 7.4-10
-- Port configure script to C99
-
-* Fri Jan 20 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-9
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
-
-* Sat Jul 23 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-8
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
-
-* Fri Jan 21 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-7
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
-
-* Sat Jan 08 2022 Miro Hrončok <mhroncok(a)redhat.com> - 7.4-6
-- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34
-
-* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
-
-* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
-
-* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
-
-* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
-
-* Wed Aug 28 2019 David Benoit <dbenoit(a)redhat.com> - 7.4.1
-- Update package version
-- Remove doc-open-url patch (fixed upstream)
-- Update remove-nonfree patch
-
-* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.0-8
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
-
-* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.0-7
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
-
-* Mon Sep 24 2018 David Benoit <dbenoit(a)redhat.com> 7.0-6
-- Fix buildarch
-
-* Sat Sep 22 2018 David Benoit <dbenoit(a)redhat.com> 7.0-5
-- Remove links.rktd scriptlets and instead make docs
- a weak dependency
-
-* Fri Sep 21 2018 David Benoit <dbenoit(a)redhat.com> 7.0-4
-- Add scriptlets to handle updating links.rktd based on
- whether racket-pkgs is installed
-- fix owenership of docs dir
-- update docs patch
-
-* Thu Sep 6 2018 David Benoit <dbenoit(a)redhat.com> 7.0-3
-- use arm macro instead of armv7hl
-
-* Wed Sep 5 2018 David Benoit <dbenoit(a)redhat.com> 7.0-2
-- Disable SSE math on i686 until issue is fixed upstream
-- Exclude ppc due to issue building Racket v7.0 and
- arch being deprecated in next release
-
-* Fri Aug 17 2018 David Benoit <dbenoit(a)redhat.com> 7.0-1
-- Update sources to Racket v7.0
-- Remove 6.12 patches and add update remove nonfree
- srfi patch to 7.0
-
-* Mon Jul 30 2018 David Benoit <dbenoit(a)redhat.com> 6.12-8
-- Annotate dependencies with links to source code
-- Move dependencies to racket-pkgs, since they are only used
- by that subpackage
-- Update mred symbolic links
-- Fix ownership of directories
-- Remove executable bit from starter-sh
-
-* Thu Jul 12 2018 David Benoit <dbenoit(a)redhat.com> 6.12-7
-- Remove hardened build since it is enabled by default
-- Add gcc to BuildRequires
-- Remove wildcards from directory listings in files section
-
-* Fri Apr 13 2018 David Benoit <dbenoit(a)redhat.com> 6.12-6
-- Remove license wildcard and add license field to each subpackage
-
-* Fri Apr 6 2018 David Benoit <dbenoit(a)redhat.com> 6.12-5
-- remove update-database post scripts
-- move libracket3m.so link into -devel
-- add ldconfig_scriptlets after install
-- remove disable debug_package and configure
- with --disable-strip instead
-- add license to files section and update
- license header field
-- validate desktop files
-- change ownership of /etc/racket
-- update changelog with release info
-- use specific man directory man/man1/*
-- refactor racket into subpackages
- racket-minimal, racket-collects, and racket-pkgs
-
-* Wed Apr 4 2018 David Benoit <dbenoit(a)redhat.com> 6.12-4
-- noarch -docs subpackage
-
-* Tue Mar 20 2018 David Benoit <dbenoit(a)redhat.com> 6.12-3
-- fix text encoding issue in description section
-- remove doc-open-url scriptlets
-- add scriptlet to fix paths in html docs
-- add patch2 to backport rpaths fix in compiled .zo files
-- add patch3 to backport rpaths fix in web-server-lib
-- add patch4 to configure doc open url dynamically at runtime
-- remove override of __arch_install_post to allow full
- checking of buildroot.
-
-* Thu Feb 1 2018 David Benoit <dbenoit(a)redhat.com> - 6.12-2
-- Fix duplication of object files
-- Add version to racket-devel requirements
-- Remove base package as a dependency of racket-doc
-- Remove Groups tag
-
-* Wed Jan 31 2018 David Benoit <dbenoit(a)redhat.com> - 6.12-1
-- Update to current stable version
-- Add patch0 to update SRFIs to latest upstream
-- Add patch1 to remove nonfree SRFI components
-
-* Thu Oct 26 2017 David Benoit <dbenoit(a)redhat.com> - 6.10-1
-- Update to current stable version
-- Remove libedit readline patch (fixed upstream)
-- Break docs into separate package
-- Add scriptlets to set doc-open-url based on
- whether docs are installed
-- Exclude armv7hl and s390x as target arches
-- Update description to match website
-- Change URLs to use https instead of http
-
-
-* Thu Jul 6 2017 David Benoit <dbenoit(a)redhat.com> - 6.9-1
-- Update to current stable version
-- Patch libedit readline error
-- Remove ExclusiveArch to test all builds in koji
-
-* Fri Jan 22 2016 Brandon Thomas <bthomaszx(a)gmail.com> - 6.3-1
-- Update to current stable version.
-- Updated description to match website.
-- Removed build requirement "racket-packaging".
-- Updated to gtk+3.
-- Let Autoprovides determine provides.
-- Debuginfo package is empty and preventing the package from building.
-- Removed uneeded file copies.
-- Remove possible extra static library.
-
-* Sun Dec 14 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.1.6-1
-- Update to current snapshot to fix match hash-table expander.
-
-* Mon Dec 01 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.1-1
-- Update to current stable version.
-
-* Fri Sep 05 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.5-4
-- Use racket-packaging to capture module dependencies.
-
-* Tue Aug 19 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.5-1
-- Updated to 6.1.0.5
-- Merged the -doc package back in.
-
-* Fri Aug 08 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.4-2
-- Do not alter .zo files, prevent check-buildroot from being run instead.
-
-* Thu Aug 07 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.4-1
-- Updated to 6.1.0.4
-- Split-off -doc package.
-
-* Fri Jul 25 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.3-4
-- Updated to 6.1.0.3
-- Dropped the unnecessary static library.
-- Dropped mred programs to enable debug package.
-
-* Sat Jun 22 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.5-1
-- Changed to use 5.3.5 version of Racket.
-- Created static package for developers who may need static libraries.
-- Added RPM optimization options to CFLAGS for build.
-- Added macro to use SMP build options in make.
-
-* Thu May 16 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.4-1
-- Changed to use 5.3.4 version of Racket.
-
-* Tue May 14 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.3-3
-- Moved documentation to /usr/doc directory.
-
-* Mon May 13 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.3-2
-- Remove bundled libffi from racket before building program.
-
-* Thu May 9 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.3-1
-- Initial Revision.
diff --git a/sources b/sources
deleted file mode 100644
index 433eb3e..0000000
--- a/sources
+++ /dev/null
@@ -1 +0,0 @@
-SHA512 (racket-7.4-src.tgz) = a5ef2ce3157bee3b12abcaeeb4c1ec3b41e78fb6ec04d399e3505a38234a73a098398bb762a99ffef7bc01301aef8db559cbd47c043365df8711fccdc3386df0
commit a7fce89d96d54123dc490e89dc0e08f2a4b73929
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 21 16:26:40 2023 +0000
Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index 10e7203..1135c4b 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 10%{?dist}
+Release: 11%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -250,6 +250,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Fri Jul 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-11
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
* Wed Apr 26 2023 Florian Weimer <fweimer(a)redhat.com> - 7.4-10
- Port configure script to C99
commit 6b016cbc234db489468ac8b40f941a2afc47514a
Author: Florian Weimer <fweimer(a)redhat.com>
Date: Wed Apr 26 21:24:05 2023 +0200
Port configure script to C99
Related to:
<https://fedoraproject.org/wiki/Changes/PortingToModernC>
<https://fedoraproject.org/wiki/Toolchain/PortingToModernC>
diff --git a/racket-configure-c99.patch b/racket-configure-c99.patch
new file mode 100644
index 0000000..f4f4014
--- /dev/null
+++ b/racket-configure-c99.patch
@@ -0,0 +1,29 @@
+Fix generic C99 compatibility issue in the configure script because it
+was generated by a historic autoconf version. This will go away once
+upstream re-runs autoconf, and until then, the patch will keep
+applying, so there is no need to upstream it.
+
+diff --git a/src/lt/configure b/src/lt/configure
+index e3f5aa6ed9a21307..aa4f50637331d427 100755
+--- a/src/lt/configure
++++ b/src/lt/configure
+@@ -2465,7 +2465,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+- '' \
++ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+@@ -3640,8 +3640,8 @@ main ()
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+- exit(2);
+- exit (0);
++ return 2;
++ return 0;
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
diff --git a/racket.spec b/racket.spec
index 16914bf..10e7203 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 9%{?dist}
+Release: 10%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -16,6 +16,7 @@ Source0: https://mirror.racket-lang.org/installers/%{version}/%{name}-%{v
# Note: SRFI 5 was replaced with a FOSS implementation. Only
# nonfree docs need to be removed by this patch now.
Patch0: racket-7.4-remove-nonfree.patch
+Patch1: racket-configure-c99.patch
# Issue Building for armv7hl in koji
ExcludeArch: %{arm} s390x
@@ -249,6 +250,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Wed Apr 26 2023 Florian Weimer <fweimer(a)redhat.com> - 7.4-10
+- Port configure script to C99
+
* Fri Jan 20 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
commit 061baf1df649b3163f43da3b9fee00620e3753f8
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jan 20 19:23:05 2023 +0000
Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index f80990a..16914bf 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 8%{?dist}
+Release: 9%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -249,6 +249,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Fri Jan 20 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
* Sat Jul 23 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
commit fb9d7fa213a127b3192fd79acd59cb54edb15600
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Jul 23 00:24:29 2022 +0000
Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index 86a0064..f80990a 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 7%{?dist}
+Release: 8%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -249,6 +249,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Sat Jul 23 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
* Fri Jan 21 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
commit 80864d34825b4d99887175f5b3385fe0f3c1d88f
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jan 21 17:25:25 2022 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index b386224..86a0064 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -249,6 +249,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Fri Jan 21 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
* Sat Jan 08 2022 Miro Hrončok <mhroncok(a)redhat.com> - 7.4-6
- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34
commit 6e59a8d17cc790a407442d79eee215f67317f460
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Jan 8 20:32:25 2022 +0100
Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34
diff --git a/racket.spec b/racket.spec
index 168e931..b386224 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -249,6 +249,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Sat Jan 08 2022 Miro Hrončok <mhroncok(a)redhat.com> - 7.4-6
+- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34
+
* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
commit dce7f307bb251d00f4138d254124216e4823488a
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 23 11:05:25 2021 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index 9130d8e..168e931 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -249,6 +249,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
commit c65fb37db1e52dd2b3e504db893235fdeb95f780
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Jan 27 14:58:18 2021 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index 0541664..9130d8e 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -249,6 +249,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
commit 1b635fca3eca7a446cb33e8f56c1e700028b08e7
Author: Tom Stellard <tstellar(a)redhat.com>
Date: Fri Jan 8 20:32:14 2021 +0000
Add BuildRequires: make
https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot
diff --git a/racket.spec b/racket.spec
index fd61cac..0541664 100644
--- a/racket.spec
+++ b/racket.spec
@@ -21,6 +21,7 @@ Patch0: racket-7.4-remove-nonfree.patch
ExcludeArch: %{arm} s390x
# To compile the program
+BuildRequires: make
BuildRequires: gcc
# To fix rpath issue with executables.
commit 5d21b64a46cf55f8aa809368f7ce5ebd12adbdcf
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Jul 29 05:25:00 2020 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index d6a8e54..fd61cac 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -248,6 +248,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
commit b3f9e714e30cd04509819195bdf947d2e5231d2f
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Jan 30 17:12:45 2020 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index 7a76a0b..d6a8e54 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.4
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -248,6 +248,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.4-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
* Wed Aug 28 2019 David Benoit <dbenoit(a)redhat.com> - 7.4.1
- Update package version
- Remove doc-open-url patch (fixed upstream)
commit 8a0520b75983dfed5ed3dc9cfcf1d857844be7e1
Author: dbenoit <dbenoit(a)redhat.com>
Date: Wed Aug 28 17:37:06 2019 -0400
update to 7.4
diff --git a/.gitignore b/.gitignore
index 4fd1ad5..dd3082f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/racket-7.0-src.tgz
+/racket-7.4-src.tgz
diff --git a/racket-7.0-fix-doc-open-url.patch b/racket-7.0-fix-doc-open-url.patch
deleted file mode 100644
index 93f5f98..0000000
--- a/racket-7.0-fix-doc-open-url.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-diff -ruN racket-7.0/doc/racket-doc-installed racket-7.0.docfix/doc/racket-doc-installed
---- racket-7.0/doc/racket-doc-installed 1969-12-31 19:00:00.000000000 -0500
-+++ racket-7.0.docfix/doc/racket-doc-installed 2018-09-21 14:57:42.002194864 -0400
-@@ -0,0 +1,3 @@
-+# do not modify this file
-+# racket uses this file to determine whether
-+# the racket-doc package is installed
-diff -ruN racket-7.0/share/pkgs/scribble-lib/help/search.rkt racket-7.0.docfix/share/pkgs/scribble-lib/help/search.rkt
---- racket-7.0/share/pkgs/scribble-lib/help/search.rkt 2018-07-27 11:33:46.000000000 -0400
-+++ racket-7.0.docfix/share/pkgs/scribble-lib/help/search.rkt 2018-09-21 15:25:16.110996675 -0400
-@@ -17,33 +17,39 @@
- #:notify [notify void])
- (define open-url (get-doc-open-url))
- (cond
-- [open-url
-- (define dest-url (let ([u (string->url open-url)])
-- (combine-url/relative
-- u
-- (string-join
-- (for/list ([s (explode-path sub)])
-- (if (path? s)
-- (path-element->string s)
-- (format "~a" s)))
-- "/"))))
-- (notify (url->string dest-url))
-- (send-url (url->string
-- (struct-copy url dest-url
-- [fragment (or fragment
-- (url-fragment dest-url))]
-- [query (append
-- (url-query dest-url)
-- (if query
-- (url-query
-- (string->url
-- (format "q?~a" query)))
-- null))])))]
-- [else
-- (let* ([path (build-path (find-user-doc-dir) sub)]
-- [path (if (file-exists? path) path (build-path (find-doc-dir) sub))])
-- (notify path)
-- (send-url/file path #:fragment fragment #:query query))]))
-+ [open-url
-+ (define dest-url (let ([u (string->url open-url)])
-+ (combine-url/relative
-+ u
-+ (string-join
-+ (for/list ([s (explode-path sub)])
-+ (if (path? s)
-+ (path-element->string s)
-+ (format "~a" s)))
-+ "/"))))
-+ (notify (url->string dest-url))
-+ (send-url (url->string
-+ (struct-copy url dest-url
-+ [fragment (or fragment
-+ (url-fragment dest-url))]
-+ [query (append
-+ (url-query dest-url)
-+ (if query
-+ (url-query
-+ (string->url
-+ (format "q?~a" query)))
-+ null))])))]
-+ [else
-+ (let* ([path (build-path (find-user-doc-dir) sub)]
-+ [path (if (file-exists? path) path (build-path (find-doc-dir) sub))])
-+ (notify path)
-+ (if (and (file-exists? path)
-+ (file-exists? (build-path (find-doc-dir) "racket-doc-installed")))
-+ (send-url/file path #:fragment fragment #:query query)
-+ (let ([part (lambda (pfx x) (if x (string-append pfx x) ""))])
-+ (send-url (string-append
-+ "https://docs.racket-lang.org/"
-+ sub (part "#" fragment) (part "?" query))))))]))
-
- ;; This is an example of changing this code to use the online manuals.
- ;; Normally, it's better to set `doc-open-url` in "etc/config.rktd",
diff --git a/racket-7.0-remove-nonfree.patch b/racket-7.0-remove-nonfree.patch
deleted file mode 100644
index 778001a..0000000
--- a/racket-7.0-remove-nonfree.patch
+++ /dev/null
@@ -1,1074 +0,0 @@
-diff -urN racket-7.0.orig/share/links.rktd racket-7.0/share/links.rktd
---- racket-7.0.orig/share/links.rktd 2018-08-03 15:23:48.604561727 -0400
-+++ racket-7.0/share/links.rktd 2018-08-03 15:23:45.481540939 -0400
-@@ -175,9 +175,7 @@
- ("sasl" "pkgs/sasl-doc")
- (root "pkgs/slideshow-exe")
- (root "pkgs/slideshow-plugin")
-- (root "pkgs/srfi-lib-nonfree")
- (root "pkgs/srfi-doc")
-- (root "pkgs/srfi-doc-nonfree")
- (root "pkgs/syntax-color-doc")
- (root "pkgs/web-server-lib")
- (root "pkgs/unix-socket-lib")
-diff -urN racket-7.0.orig/share/pkgs/srfi/info.rkt racket-7.0/share/pkgs/srfi/info.rkt
---- racket-7.0.orig/share/pkgs/srfi/info.rkt 2018-08-03 15:23:48.891563638 -0400
-+++ racket-7.0/share/pkgs/srfi/info.rkt 2018-08-03 15:23:45.424540559 -0400
-@@ -1 +1 @@
--(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.0"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-lib-nonfree" "srfi-doc" "srfi-doc-nonfree"))) (define implies (quote ("srfi-lib" "srfi-lib-nonfree" "srfi-doc" "srfi-doc-nonfree"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-+(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.0"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc"))) (define implies (quote ("srfi-lib" "srfi-doc"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/info.rkt racket-7.0/share/pkgs/srfi-doc-nonfree/info.rkt
---- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/info.rkt 2018-08-03 15:23:48.895563664 -0400
-+++ racket-7.0/share/pkgs/srfi-doc-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1 +0,0 @@
--(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.0"))) (define collection (quote multi)) (define build-deps (quote ("mzscheme-doc" "scheme-lib" "base" "scribble-lib" "srfi-doc" "srfi-lib-nonfree" "racket-doc" "r5rs-doc" "r6rs-doc" "compatibility-lib"))) (define update-implies (quote ("srfi-lib-nonfree"))) (define pkg-desc "documentation part of \"srfi nonfree\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt
---- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 2018-08-03 15:23:48.895563664 -0400
-+++ racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,3 +0,0 @@
--#lang info
--
--(define scribblings '(("srfi-nf.scrbl" (multi-page) (library 100))))
-diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl
---- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 2018-08-03 15:23:48.895563664 -0400
-+++ racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 1969-12-31 19:00:00.000000000 -0500
-@@ -1,66 +0,0 @@
--#lang scribble/doc
--@(require srfi/scribblings/util
-- scribble/manual
-- scribble/eval
-- scriblib/render-cond
-- scribble/core
-- scribble/html-properties
-- (for-syntax scheme/base)
-- (for-label scheme/base
-- racket/stream))
--
--@; ----------------------------------------------------------------------
--
--@title{SRFI Nonfree Libraries and Documentation}
--
--The @link[#:style srfi-std "http://srfi.schemers.org/"]{Scheme Requests for
--Implementation} (a.k.a. @deftech{SRFI}) process allows individual
--members of the Scheme community to propose libraries and extensions to
--be supported by multiple Scheme implementations.
--
--Racket is distributed with implementations of many SRFIs, most of
--which can be implemented as libraries. To import the bindings of SRFI
--@math{n}, use
--
--@racketblock[
--(require @#,elem{@racketidfont{srfi/}@math{n}})
--]
--
--This document lists the SRFIs that are supported by Racket and
--provides a link to the original SRFI specification (which is also
--distributed as part of Racket's documentation).
--
--The following SRFI specification documents are licensed restrictively.
--
--@table-of-contents[]
--
--
--@; ----------------------------------------
--
--@srfi[5]{A compatible let form with signatures and rest arguments}
--
--@redirect[5 '(
-- (let #t "unnamed")
--)]
--
--Racket provides this SRFI in the @racket[srfi-lib-nonfree] package.
--
--@; ----------------------------------------
--
--@srfi[29]{Localization}
--
--@redirect[29 '(
-- (current-language #f "current-language")
-- (current-country #f "current-country")
-- (current-locale-details #f "current-locale-details")
-- (declare-bundle! #f "declare-bundle!")
-- (store-bundle #f "store-bundle")
-- (load-bundle! #f "load-bundle!")
-- (localized-template #f "localized-template")
--)]
--
--Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package. Only the SRFI specification document is nonfree.
--
--@; ----------------------------------------
--
--@index-section[]
-diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html
---- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 2018-08-03 15:23:48.895563664 -0400
-+++ racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
-@@ -1,507 +0,0 @@
--<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
--<html>
-- <head>
-- <meta name="generator" content="HTML Tidy, see www.w3.org">
-- <title>SRFI 29: Localization</title>
-- <meta name="author" content="Scott G. Miller">
-- <meta name="description" content="Localization">
-- </head>
-- <body>
-- <H1>Title</H1>
--
-- SRFI 29: Localization
--
-- <H1>Author</H1>
--
-- Scott G. Miller
--
-- <H1>Abstract</H1>
--
-- This document specifies an interface to retrieving and
-- displaying locale sensitive messages. A Scheme program can
-- register one or more translations of templated messages, and
-- then write Scheme code that can transparently retrieve the
-- appropriate message for the locale under which the Scheme
-- system is running. <br>
--
--
-- <H1>Rationale</H1>
--
-- <p>As any programmer that has ever had to deal with making his
-- or her code readable in more than one locale, the process of
-- sufficiently abstracting program messages from their
-- presentation to the user is non-trivial without help from the
-- programming language. Most modern programming language
-- libraries do provide some mechanism for performing this
-- separation.</p>
--
-- <p>A portable API that allows a piece of code to run without
-- modification in different countries and under different
-- languages is a must for any non-trivial software project.
-- The interface should separate the logic of a program from
-- the myriad of translations that may be necessary.</p>
--
-- <p>The interface described in this document provides such
-- functionality. The underlying implementation is also allowed to
-- use whatever datastructures it likes to provide access to the
-- translations in the most efficient manner possible. In
-- addition, the implementation is provided with standardized
-- functions that programs will use for accessing an external,
-- unspecified repository of translations.</p>
--
-- <p>This interface <i>does not</i> cover all aspects of
-- localization, including support for non-latin characters,
-- number and date formatting, etc. Such functionality is the
-- scope of a future SRFI that may extend this one.</p>
--
-- <H1>Dependencies</H1>
--
-- An SRFI-29 conformant implementation must also implement
-- SRFI-28, Basic Format Strings. Message templates are strings
-- that must be processed by the <tt>format</tt> function
-- specified in that SRFI.
--
-- <H1>Specification</H1>
--
-- <h3>Message Bundles</h3>
--
-- <p>A Message Bundle is a set of message templates and their
-- identifying keys. Each bundle contains one or more such
-- key/value pairs. The bundle itself is associated with a
-- <i>bundle specifier</i> which uniquely identifies the
-- bundle.</p>
--
-- <h3>Bundle Specifiers</h3>
--
-- <p>A Bundle Specifier is a Scheme list that describes, in order
-- of importance, the package and locale of a message bundle.
-- In most cases, a locale specifier will have between one
-- and three elements. The first element is a symbol denoting the
-- package for which this bundle applies. The second and third
-- elements denote a <i>locale</i>. The second element (first
-- element of the locale) if present, is the two letter, ISO 639-1
-- language code for the bundle. The third element, if present, is
-- a two letter ISO 3166-1 country code. In some cases, a
-- fourth element may be present, specifying the encoding used for
-- the bundle. All bundle specifier elements are Scheme
-- symbols.</p>
--
-- <p>If only one translation is provided, it should be designated
-- only by a package name, for example <tt>(mathlib)</tt>. This
-- translation is called the <i>default</i> translation.</p>
--
-- <h3>Bundle Searching</h3>
--
-- <p>When a message template is retrieved from a bundle, the
-- Scheme implementation will provide the locale under which the
-- system is currently running. When the template is retrieved,
-- the package name will be specified. The Scheme system should
-- construct a Bundle Specifier from the provided package name and
-- the active locale. For example, when retrieving a message
-- template for French Canadian, in the <tt>mathlib</tt> package,
-- the bundle specifier '<tt>(mathlib fr ca)</tt>' is used. A
-- program may also retrieve the elements of the current locale
-- using the no-argument procedures:</p>
--
-- <p><b><a name="current-language"></a><tt>current-language</tt></b> <tt>->
-- <i>symbol</i></tt><br>
-- <tt><b>current-language</b> <i>symbol</i> ->
-- undefined</tt><br>
-- </p>
--
-- <blockquote>
-- When given no arguments, returns the current ISO 639-1
-- language code as a symbol. If provided with an
-- argument, the current language is set to that named by the
-- symbol for the currently executing Scheme thread (or for the
-- entire Scheme system if such a distinction is not possible).
--
-- </blockquote>
--
-- <p><b><a name="current-country"></a><tt>current-country</tt></b> <tt>->
-- <i>symbol</i></tt><br>
-- <tt><b>current-country</b> <i>symbol</i> ->
-- undefined</tt><br>
-- </p>
--
-- <blockquote>
-- returns the current ISO 3166-1 country code as a symbol.
-- If provided with an argument, the current country is
-- set to that named by the symbol for the currently executing
-- Scheme thread (or for the entire Scheme system if such a
-- distinction is not possible).
-- </blockquote>
--
-- <p><b><a name="current-locale-details"></a><tt>current-locale-details</tt></b> <tt>-> <i>list of
-- symbol</i></tt>s<br>
-- <tt><b>current-locale-details</b> <i>list-of-symbols</i> ->
-- undefined</tt><br>
-- </p>
--
-- <blockquote>
-- Returns a list of additional locale details as a list of
-- symbols. This list may contain information about
-- encodings or other more specific information. If
-- provided with an argument, the current locale details are set
-- to those given in the currently executing Scheme thread (or
-- for the entire Scheme system if such a distinction is not
-- possible).
-- </blockquote>
--
-- <p>The Scheme System should first check for a bundle with the
-- exact name provided. If no such bundle is found, the last
-- element from the list is removed and a search is tried for a
-- bundle with that name. If no bundle is then found, the list is
-- shortened by removing the last element again. If no message is
-- found and the bundle specifier is now the empty list, an error
-- should be raised.</p>
--
-- <p>The reason for this search order is to provide the most
-- locale sensitive template possible, but to fall back on more
-- general templates if a translation has not yet been provided
-- for the given locale.</p>
--
-- <h3>Message Templates</h3>
--
-- <p>A message template is a localized message that may or may
-- not contain one of a number of formatting codes. A message
-- template is a Scheme string. The string is of a form that can
-- be processed by the <tt>format</tt> procedure found in many
-- Scheme systems and formally specified in SRFI-28 (Basic Format
-- Strings).</p>
--
-- <p>This SRFI also extends SRFI-28 to provide an additional
-- <tt>format</tt> escape code:</p>
--
-- <blockquote>
-- <tt>~[n]@*</tt> - Causes a value-requiring escape code that
-- follows this code immediately to reference the [N]'th
-- optional value absolutely, rather than the next unconsumed
-- value. The referenced value is <i>not</i> consumed.
-- </blockquote>
-- This extension allows optional values to be positionally
-- referenced, so that message templates can be constructed that
-- can produce the proper word ordering for a language.
--
-- <h3>Preparing Bundles</h3>
-- Before a bundle may be used by the Scheme system to retrieve
-- localized template messages, they must be made available to the
-- Scheme system. This SRFI specifies a way to portably
-- define the bundles, as well as store them in and retrieve them
-- from an unspecified system which may be provided by resources
-- outside the Scheme system.<br>
--
--
-- <p><b><a name="declare-bundle!"></a><tt>declare-bundle!</tt></b> <tt><i>bundle-specifier
-- association-list</i> -> undefined<br>
-- </tt></p>
--
-- <blockquote>
-- Declares a new bundle named by the given bundle-specifier.
-- The contents of the bundle are defined by the provided
-- association list. The list contains associations
-- between Scheme symbols and the message templates (Scheme
-- strings) they name. If a bundle already exists with the
-- given name, it is overwritten with the newly declared
-- bundle.<br>
-- </blockquote>
-- <tt><a name="store-bundle"></a><b>store-bundle</b> <i>bundle-specifier</i> ->
-- boolean</tt><br>
--
--
-- <blockquote>
-- Attempts to store a bundle named by the given bundle
-- specifier, and previously made available using
-- <tt>declare-bundle!</tt> or <tt>load-bundle!</tt>, in an
-- unspecified mechanism that may be persistent across Scheme
-- system restarts. If successful, a non-false value is
-- returned. If unsuccessful, <tt>#f</tt> is returned.<br>
-- </blockquote>
-- <tt><a name="load-bundle!"></a><b>load-bundle!</b> <i>bundle-specifier</i> ->
-- boolean</tt><br>
--
--
-- <blockquote>
-- Attempts to retrieve a bundle from an unspecified mechanism
-- which stores bundles outside the Scheme system. If the
-- bundle was retrieved successfully, the function returns a
-- non-false value, and the bundle is immediately available to
-- the Scheme system. If the bundle could not be found or loaded
-- successfully, the function returns <tt>#f</tt>, and the
-- Scheme system's bundle registry remains unaffected.<br>
-- </blockquote>
-- A compliant Scheme system may choose not to provide any
-- external mechanism to store localized bundles. If it does
-- not, it must still provide implementations for
-- <tt>store-bundle</tt> and <tt>load-bundle!</tt>. In such a
-- case, both functions must return <tt>#f</tt> regardless of the
-- arguments given. Users of this SRFI should recognize that the
-- inability to load or store a localized bundle in an external
-- repository is <i>not</i> a fatal error.<br>
--
--
-- <h3>Retrieving Localized Message Templates</h3>
--
-- <p><a name="localized-template"></a><b><tt>localized-template</tt></b> <i><tt>package-name
-- message-template-name</tt></i> <tt>-> <i>string or #f<br>
-- </i></tt></p>
--
-- <blockquote>
-- Retrieves a localized message template for the given package
-- name and the given message template name (both symbols).
-- If no such message could be found, false (#f) is
-- returned.<br>
-- <br>
-- </blockquote>
-- After retrieving a template, the calling program can use
-- <tt>format</tt> to produce a string that can be displayed to
-- the user.<br>
--
--
-- <h2>Examples</h2>
-- The below example makes use of SRFI-29 to display simple,
-- localized messages. It also defines its bundles in such a
-- way that the Scheme system may store and retrieve the bundles
-- from a more efficient system catalog, if available.<br>
--
--<pre>
--(let ((translations
-- '(((en) . ((time . "Its ~a, ~a.")
-- (goodbye . "Goodbye, ~a.")))
-- ((fr) . ((time . "~1@*~a, c'est ~a.")
-- (goodbye . "Au revoir, ~a."))))))
-- (for-each (lambda (translation)
-- (let ((bundle-name (cons 'hello-program (car translation))))
-- (if (not (load-bundle! bundle-name))
-- (begin
-- (declare-bundle! bundle-name (cdr translation))
-- (store-bundle! bundle-name)))))
-- translations))
--
--(define localized-message
-- (lambda (message-name . args)
-- (apply format (cons (localized-template 'hello-program
-- message-name)
-- args))))
--
--(let ((myname "Fred"))
-- (display (localized-message 'time "12:00" myname))
-- (display #\newline)
--
-- (display (localized-message 'goodbye myname))
-- (display #\newline))
--
--;; Displays (English):
--;; Its 12:00, Fred.
--;; Goodbye, Fred.
--;;
--;; French:
--;; Fred, c'est 12:00.
--;; Au revoir, Fred.
--</pre>
--
-- <H1>Implementation</H1>
--
-- <p>The implementation requires that the Scheme system provide a
-- definition for <tt>current-language</tt> and
-- <tt>current-country</tt> capable of distinguishing the correct
-- locale present during a Scheme session. The definitions of
-- those functions in the reference implementation are not capable
-- of that distinction. Their implementation is provided only so
-- that the following code can run in any R4RS scheme system.
-- <br>
-- </p>
--
-- <p>In addition, the below implementation of a compliant
-- <tt>format</tt> requires SRFI-6 (Basic String Ports) and
-- SRFI-23 (Error reporting)</p>
--<pre>
--;; The association list in which bundles will be stored
--(define *localization-bundles* '())
--
--;; The current-language and current-country functions provided
--;; here must be rewritten for each Scheme system to default to the
--;; actual locale of the session
--(define current-language
-- (let ((current-language-value 'en))
-- (lambda args
-- (if (null? args)
-- current-language-value
-- (set! current-language-value (car args))))))
--
--(define current-country
-- (let ((current-country-value 'us))
-- (lambda args
-- (if (null? args)
-- current-country-value
-- (set! current-country-value (car args))))))
--
--;; The load-bundle! and store-bundle! both return #f in this
--;; reference implementation. A compliant implementation need
--;; not rewrite these procedures.
--(define load-bundle!
-- (lambda (bundle-specifier)
-- #f))
--
--(define store-bundle!
-- (lambda (bundle-specifier)
-- #f))
--
--;; Declare a bundle of templates with a given bundle specifier
--(define declare-bundle!
-- (letrec ((remove-old-bundle
-- (lambda (specifier bundle)
-- (cond ((null? bundle) '())
-- ((equal? (caar bundle) specifier)
-- (cdr bundle))
-- (else (cons (car bundle)
-- (remove-old-bundle specifier
-- (cdr bundle))))))))
-- (lambda (bundle-specifier bundle-assoc-list)
-- (set! *localization-bundles*
-- (cons (cons bundle-specifier bundle-assoc-list)
-- (remove-old-bundle bundle-specifier
-- *localization-bundles*))))))
--
--;;Retrieve a localized template given its package name and a template name
--(define localized-template
-- (letrec ((rdc
-- (lambda (ls)
-- (if (null? (cdr ls))
-- '()
-- (cons (car ls) (rdc (cdr ls))))))
-- (find-bundle
-- (lambda (specifier template-name)
-- (cond ((assoc specifier *localization-bundles*) =>
-- (lambda (bundle) bundle))
-- ((null? specifier) #f)
-- (else (find-bundle (rdc specifier)
-- template-name))))))
-- (lambda (package-name template-name)
-- (let loop ((specifier (cons package-name
-- (list (current-language)
-- (current-country)))))
-- (and (not (null? specifier))
-- (let ((bundle (find-bundle specifier template-name)))
-- (and bundle
-- (cond ((assq template-name bundle) => cdr)
-- ((null? (cdr specifier)) #f)
-- (else (loop (rdc specifier)))))))))))
--
--;;An SRFI-28 and SRFI-29 compliant version of format. It requires
--;;SRFI-23 for error reporting.
--(define format
-- (lambda (format-string . objects)
-- (let ((buffer (open-output-string)))
-- (let loop ((format-list (string->list format-string))
-- (objects objects)
-- (object-override #f))
-- (cond ((null? format-list) (get-output-string buffer))
-- ((char=? (car format-list) #\~)
-- (cond ((null? (cdr format-list))
-- (error 'format "Incomplete escape sequence"))
-- ((char-numeric? (cadr format-list))
-- (let posloop ((fl (cddr format-list))
-- (pos (string->number
-- (string (cadr format-list)))))
-- (cond ((null? fl)
-- (error 'format "Incomplete escape sequence"))
-- ((and (eq? (car fl) '#\@)
-- (null? (cdr fl)))
-- (error 'format "Incomplete escape sequence"))
-- ((and (eq? (car fl) '#\@)
-- (eq? (cadr fl) '#\*))
-- (loop (cddr fl) objects (list-ref objects pos)))
-- (else
-- (posloop (cdr fl)
-- (+ (* 10 pos)
-- (string->number
-- (string (car fl)))))))))
-- (else
-- (case (cadr format-list)
-- ((#\a)
-- (cond (object-override
-- (begin
-- (display object-override buffer)
-- (loop (cddr format-list) objects #f)))
-- ((null? objects)
-- (error 'format "No value for escape sequence"))
-- (else
-- (begin
-- (display (car objects) buffer)
-- (loop (cddr format-list)
-- (cdr objects) #f)))))
-- ((#\s)
-- (cond (object-override
-- (begin
-- (display object-override buffer)
-- (loop (cddr format-list) objects #f)))
-- ((null? objects)
-- (error 'format "No value for escape sequence"))
-- (else
-- (begin
-- (write (car objects) buffer)
-- (loop (cddr format-list)
-- (cdr objects) #f)))))
-- ((#\%)
-- (if object-override
-- (error 'format "Escape sequence following positional override does not require a value"))
-- (display #\newline buffer)
-- (loop (cddr format-list) objects #f))
-- ((#\~)
-- (if object-override
-- (error 'format "Escape sequence following positional override does not require a value"))
-- (display #\~ buffer)
-- (loop (cddr format-list) objects #f))
-- (else
-- (error 'format "Unrecognized escape sequence"))))))
-- (else (display (car format-list) buffer)
-- (loop (cdr format-list) objects #f)))))))
--
--</pre>
--
-- <H1>Copyright</H1>
--
-- Copyright (C) Scott G. Miller (2002). All Rights Reserved.
--
-- <p>This document and translations of it may be copied and
-- furnished to others, and derivative works that comment on or
-- otherwise explain it or assist in its implementation may be
-- prepared, copied, published and distributed, in whole or in
-- part, without restriction of any kind, provided that the above
-- copyright notice and this paragraph are included on all such
-- copies and derivative works. However, this document itself may
-- not be modified in any way, such as by removing the copyright
-- notice or references to the Scheme Request For Implementation
-- process or editors, except as needed for the purpose of
-- developing SRFIs in which case the procedures for copyrights
-- defined in the SRFI process must be followed, or as required to
-- translate it into languages other than English.</p>
--
-- <p>The limited permissions granted above are perpetual and will
-- not be revoked by the authors or their successors or
-- assigns.</p>
--
-- <p>This document and the information contained herein is
-- provided on an "AS IS" basis and THE AUTHOR AND THE SRFI
-- EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-- BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
-- HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
-- OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
-- <hr>
--
-- <address>
-- Editor: <a href="mailto:srfi-editors@srfi.schemers.org">David
-- Rush</a>
-- </address>
--
-- <address>
-- Author: <a href="mailto:scgmille@freenetproject.org">Scott G.
-- Miller</a>
-- </address>
-- <!-- Created: Tue Sep 29 19:20:08 EDT 1998 -->
-- <!-- hhmts start -->Last modified: Mon Jun 17 12:00:08 Pacific
-- Daylight Time 2002 <!-- hhmts end --> <br>
-- </body>
--</html>
--
-diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html
---- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 2018-08-03 15:23:48.895563664 -0400
-+++ racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
-@@ -1,345 +0,0 @@
--<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
--<html>
--<head>
-- <title>SRFI 5: A compatible let form with signatures and rest arguments</title>
--</head>
--<body>
--
--<H1>Title</H1>
--
--SRFI-5: A compatible <code>let</code> form with signatures and rest arguments
--
--<H1>Author</H1>
--
--Andy Gaynor
--
--<H1>Status</H1>
--
--This SRFI is currently in ``final'' status. To see an explanation of each status that a SRFI can hold, see <A HREF="http://srfi.schemers.org/srfi-process.html">here</A>.
--You can access the discussion on this SRFI via <A HREF="http://srfi.schemers.org/srfi-5/mail-archive/maillist.html">the archive of the mailing list</A>.
--<P><UL>
--<LI>Received: 1999/2/2
--<LI>Draft: 1999/2/10-1999/04/12
--<LI>Final: 1999/4/26
--<LI>Revised reference implementation: 2003/01/27
--</UL>
--
--<H1>Abstract</H1>
--
--The <i>named-let</i> incarnation of the <code>let</code> form has two slight
--inconsistencies with the <code>define</code> form. As defined, the <code>let</code>
--form makes no accommodation for rest arguments, an issue of functionality
--and consistency. As defined, the <code>let</code> form does not accommodate
--signature-style syntax, an issue of aesthetics and consistency. Both
--issues are addressed here in a manner which is compatible with the traditional
--<code>let</code> form but for minor extensions.
--
--<H1>Rationale</H1>
--
--<H2>Signature-style Syntax</H2>
--
--Consider the following two equivalent definitions:
--
--<p><pre>
--(define fibonacci
-- (lambda (n i f0 f1)
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1)))))
--
--(define (fibonacci n i f0 f1)
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1))))
--</pre>
--
--Although there is a named-let analog for the former form, there is none
--for the latter. To wit, suppose one wished to compute the 10th element
--of the Fibonacci sequence using a named let:
--
--<p>
--<pre>
--(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1))))
--Values: 55
--</pre>
--
--As it stands, one cannot equivalently write
--
--<p>
--<pre>
--(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1))))
--</pre>
--
--which is consistent with <code>define</code>'s signature-style form.
--<p>Those that favor the signature style may prefer this extension.
--In any case, it may be more appropriate to include all bound names within
--the binding section. As presented, this straightforward extension
--introduces no ambiguity or incompatibility with the existing definition
--of let.
--
--<H2>Rest Arguments</H2>
--
--As it stands, one cannot write a named let with rest arguments, as in
--
--<p>
--<pre>
--(let (blast (port (current-output-port)) . (x (+ 1 2) 4 5))
-- (if (null? x)
-- 'just-a-silly-contrived-example
-- (begin
-- (write (car x) port)
-- (apply blast port (cdr x)))))
--</pre>
--
--otherwise equivalent to
--
--<p>
--<pre>
--(letrec ((blast (lambda (port . x)
-- (if (null? x)
-- 'just-a-silly-contrived-example
-- (begin
-- (write (car x) port)
-- (apply blast port (cdr x)))))))
-- (blast (current-output-port) (+ 1 2) 4 5))
--</pre>
--
--While this example is rather contrived, the functionality is not.
--There are several times when the author has used this construct in practice.
--Regardless, there is little reason to deny the <code>let</code> form access to
--all the features of lambda functionality.
--
--<H2>Symbols in Binding Sections</H2>
--
--Both the features above rely upon the placement of symbols in <code>let</code>
--binding lists (this statement is intentially simplistic). The only
--other apparent use of such symbol placement is to tersely bind variables
--to unspecified values. For example, one might desire to use
--<code>(let (foo bar baz) ...)</code>
--to bind <code>foo</code>, <code>bar</code>, and <code>baz</code> to
--unspecified values.
--
--<p>This usage is considered less important in light of the rationales
--presented above, and an alternate syntax is immediately apparent, as
--in <code>(let ((foo) (bar) (baz)) ...)</code> This may even
--be preferable, consistently parenthesizing normal binding clauses.
--
--<H1>Specification</H1>
--
--<H2>Syntax</H2>
--
--<p>
--A formal specification of the syntax follows. Below, body, expression,
--and identifier are free. Each instantiation of binding-name must be
--unique.
--</p>
--
--<p>
--<pre>
-- let = "(" "let" let-bindings body ")"
-- expressions = nothing | expression expressions
-- let-bindings = let-name bindings
-- | "(" let-name "." bindings ")"
-- let-name = identifier
-- bindings = "(" ")"
-- | rest-binding
-- | "(" normal-bindings ["." rest-binding] ")"
--normal-bindings = nothing
-- | normal-binding normal-bindings
-- normal-binding = "(" binding-name expression ")"
-- binding-name = identifier
-- rest-binding = "(" binding-name expressions ")"
--</pre>
--
--<p>
--For clarity and convenience, an informal specification follows.
--</p>
--
--<ol>
--<li><a name="unnamed">Unnamed</a>
--
--<p><pre>
--(let ((<parameter> <argument>)...)
-- <body>...)
--</pre>
--</li>
--
--<li><a name="named-non-sig">
--Named, non-signature-style, no rest argument</a>
--
--<p><pre>
--(let <name> ((<parameter> <argument>)...)
-- <body>...)
--</pre>
--</li>
--
--<li><a name="named-sig">Named, signature-style, no rest argument</a>
--
--<p><pre>
--(let (<name> (<parameter> <argument>)...)
-- <body>...)
--</pre>
--</li>
--
--<li><a name="named-non-sig-rest">Named, non-signature-style, rest argument</a>
--
--<p><pre>
--(let <name> ((<parameter> <argument>)...
--
--. (<rest-parameter> <rest-argument>...))
-- <body>...)
--</pre>
--
--<li><a name="named-sig-rest">Named, signature-style, rest argument</a>
--
--<p><pre>
--(let (<name> (<parameter> <argument>)...
--
--. (<rest-parameter> <rest-argument>...))
-- <body>...)
--</pre>
--</li>
--</ol>
--
--<H2>Semantics</H2>
--
--Let <code>$lambda</code> and <code>$letrec</code> be hygienic bindings for the <code>lambda</code>
--and <code>letrec</code> forms, respectively.
--
--<ul>
--<li>For informal syntax 1:
--
--<p><pre>
--(($lambda (<parameter>...) <body>...) <argument>...)
--</pre>
--</li>
--
--<li>For informal syntaxes 2 and 3:
--
--<p>
--<pre>
--($letrec ((<name> ($lambda (<parameter>...) <body>...)))
-- (<name> <argument>...))
--</pre>
--</li>
--
--<li>For informal syntaxes 4 and 5:
--
--<p>
--<pre>
--($letrec ((<name> ($lambda (<parameter>...
--
--. <rest-parameter>) <body>...)))
-- (<name> <argument>... <rest-argument>...))
--</pre>
--</li>
--</ul>
--
--<H1>Implementation</H1>
--
--Here is an implementation using <code>SYNTAX-RULES</code>.
--
--<p>
--<pre>
--;; Use your own standard let.
--;; Or call a lambda.
--;; (define-syntax standard-let
--;;
--;; (syntax-rules ()
--;;
--;; ((let ((var val) ...) body ...)
--;; ((lambda (var ...) body ...) val ...))))
--
--(define-syntax let
--
-- (syntax-rules ()
--
-- ;; No bindings: use standard-let.
-- ((let () body ...)
-- (standard-let () body ...))
-- ;; Or call a lambda.
-- ;; ((lambda () body ...))
--
-- ;; All standard bindings: use standard-let.
-- ((let ((var val) ...) body ...)
-- (standard-let ((var val) ...) body ...))
-- ;; Or call a lambda.
-- ;; ((lambda (var ...) body ...) val ...)
--
-- ;; One standard binding: loop.
-- ;; The all-standard-bindings clause didn't match,
-- ;; so there must be a rest binding.
-- ((let ((var val) . bindings) body ...)
-- (let-loop #f bindings (var) (val) (body ...)))
--
-- ;; Signature-style name: loop.
-- ((let (name binding ...) body ...)
-- (let-loop name (binding ...) () () (body ...)))
--
-- ;; defun-style name: loop.
-- ((let name bindings body ...)
-- (let-loop name bindings () () (body ...)))))
--
--(define-syntax let-loop
--
-- (syntax-rules ()
--
-- ;; Standard binding: destructure and loop.
-- ((let-loop name ((var0 val0) binding ...) (var ... ) (val ... ) body)
-- (let-loop name ( binding ...) (var ... var0) (val ... val0) body))
--
-- ;; Rest binding, no name: use standard-let, listing the rest values.
-- ;; Because of let's first clause, there is no "no bindings, no name" clause.
-- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
-- (standard-let ((var val) ... (rest-var (list rest-val ...))) . body))
-- ;; Or call a lambda with a rest parameter on all values.
-- ;; ((lambda (var ... . rest-var) . body) val ... rest-val ...))
-- ;; Or use one of several other reasonable alternatives.
--
-- ;; No bindings, name: call a letrec'ed lambda.
-- ((let-loop name () (var ...) (val ...) body)
-- ((letrec ((name (lambda (var ...) . body)))
-- name)
-- val ...))
--
-- ;; Rest binding, name: call a letrec'ed lambda.
-- ((let-loop name (rest-var rest-val ...) (var ...) (val ...) body)
-- ((letrec ((name (lambda (var ... . rest-var) . body)))
-- name)
-- val ... rest-val ...))))
--</pre>
--
--
--<H1>Copyright</H1>
--
--Copyright (C) Andy Gaynor (1999). All Rights Reserved.
--<p>This document and translations of it may be copied and furnished to
--others, and derivative works that comment on or otherwise explain it or
--assist in its implementation may be prepared, copied, published and distributed,
--in whole or in part, without restriction of any kind, provided that the
--above copyright notice and this paragraph are included on all such copies
--and derivative works. However, this document itself may not be modified
--in any way, such as by removing the copyright notice or references to the
--Scheme Request For Implementation process or editors, except as needed
--for the purpose of developing SRFIs in which case the procedures for copyrights
--defined in the SRFI process must be followed, or as required to translate
--it into languages other than English.
--<p>The limited permissions granted above are perpetual and will not be
--revoked by the authors or their successors or assigns.
--<p>This document and the information contained herein is provided on an
--"AS IS" basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES,
--EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
--USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
--WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
--
-- <hr>
-- <address>Editor: <a href="mailto:srfi-editors@srfi.schemers.org">Mike Sperber</a></address>
--
--</body>
--</html>
-diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/info.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/info.rkt
---- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/info.rkt 2018-08-03 15:23:48.906563738 -0400
-+++ racket-7.0/share/pkgs/srfi-lib-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1 +0,0 @@
--(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.0"))) (define collection (quote multi)) (define deps (quote ("scheme-lib" "base" "r6rs-lib" "srfi-lib" "compatibility-lib"))) (define pkg-desc "implementation (no documentation) part of \"srfi nonfree\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt
---- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 2018-08-03 15:23:48.906563738 -0400
-+++ racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1 +0,0 @@
--#lang s-exp srfi/provider srfi/%3a5
-diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt
---- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 2018-08-03 15:23:48.906563738 -0400
-+++ racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,3 +0,0 @@
--#lang s-exp srfi/provider srfi/5
--
--;; FIXME: "rest arguments" need to generate mutable lists
-diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt
---- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 2018-08-03 15:23:48.906563738 -0400
-+++ racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,86 +0,0 @@
--;;;
--;;; <let.rkt> ---- SRFI 5 A compatible let form with signatures and rest arguments
--;;; Time-stamp: <03/04/08 09:56:06 solsona>
--;;;
--;;; Usually, I would add a copyright notice, and the announce that
--;;; this code is under the LGPL licence. Nevertheless, I only did the
--;;; port to PLT Scheme v200, and here is the copyright notice,
--;;; comments, and licence from the original source:
--;;;
--;;; Copyright (C) Andy Gaynor (1999-2003)
--;;;
--;;; The version of my-let here was cleaned up by: Paul Schlie <schlie(a)attbi.com>.
--;;; Renamed to s:let by Eli Barzilay
--
--#lang scheme/base
--(provide s:let)
--
--(define-syntax s:let
-- (syntax-rules ()
-- ;; standard
-- ((s:let () body ...)
-- (let () body ...))
-- ((s:let ((var val) ...) body ...)
-- (let ((var val) ...) body ...))
--
-- ;; rest style
-- ((s:let ((var val) . bindings) body ...)
-- (let-loop #f bindings (var) (val) (body ...)))
--
-- ;; signature style
-- ((s:let (name bindings ...) body ...)
-- (let-loop name (bindings ...) () () (body ...)))
--
-- ;; standard named style
-- ((s:let name (bindings ...) body ...)
-- (let-loop name (bindings ...) () () (body ...)))
--
-- ))
--
--;; A loop to walk down the list of bindings.
--
--(define-syntax let-loop
-- (syntax-rules ()
--
-- ;; No more bindings - make a LETREC.
-- ((let-loop name () (vars ...) (vals ...) body)
-- ((letrec ((name (lambda (vars ...) . body)))
-- name)
-- vals ...))
--
-- ;; Rest binding, no name
-- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
-- (let ((var val) ... (rest-var (list rest-val ...))) . body))
--
-- ;; Process a (var val) pair.
-- ((let-loop name ((var val) more ...) (vars ...) (vals ...) body)
-- (let-loop name (more ...) (vars ... var) (vals ... val) body))
--
-- ;; End with a rest variable - make a LETREC.
-- ((let-loop name (rest-var rest-vals ...) (vars ...) (vals ...) body)
-- ((letrec ((name (lambda (vars ... . rest-var) . body)))
-- name)
-- vals ... rest-vals ...))))
--
--;; Four loops - normal and `signature-style', each with and without a rest
--;; binding.
--;;
--;;(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
--;; (if (= i n)
--;; f0
--;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
--;;
--;;(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
--;; (if (= i n)
--;; f0
--;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
--;;
--;;(let fibonacci ((n 10) (i 0) . (f 0 1))
--;; (if (= i n)
--;; (car f)
--;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
--;;
--;;(let (fibonacci (n 10) (i 0) . (f 0 1))
--;; (if (= i n)
--;; (car f)
--;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
-diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/5.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/5.rkt
---- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 2018-08-03 15:23:48.906563738 -0400
-+++ racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,2 +0,0 @@
--;; module loader for SRFI-5
--#lang s-exp srfi/provider srfi/5/let #:unprefix s:
diff --git a/racket-7.4-remove-nonfree.patch b/racket-7.4-remove-nonfree.patch
new file mode 100644
index 0000000..b670cbc
--- /dev/null
+++ b/racket-7.4-remove-nonfree.patch
@@ -0,0 +1,967 @@
+diff -urN racket-7.4-orig/share/links.rktd racket-7.4-remove-nonfree/share/links.rktd
+--- racket-7.4-orig/share/links.rktd 2019-08-03 23:31:24.000000000 -0400
++++ racket-7.4-remove-nonfree/share/links.rktd 2019-08-28 09:27:21.416018118 -0400
+@@ -177,7 +177,6 @@
+ (root "pkgs/slideshow-exe")
+ (root "pkgs/slideshow-plugin")
+ (root "pkgs/srfi-doc")
+- (root "pkgs/srfi-doc-nonfree")
+ (root "pkgs/syntax-color-doc")
+ (root "pkgs/web-server-lib")
+ (root "pkgs/unix-socket-lib")
+diff -urN racket-7.4-orig/share/pkgs/pkgs.rktd racket-7.4-remove-nonfree/share/pkgs/pkgs.rktd
+--- racket-7.4-orig/share/pkgs/pkgs.rktd 2019-08-03 23:31:24.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/pkgs.rktd 2019-08-28 09:28:17.804384118 -0400
+@@ -1 +1 @@
+-#hash(("2d" . #s(pkg-info (catalog "2d") "fc82a7bd227d7f3b8852351fc6bf34948a7750b8" #t)) ("2d-doc" . #s((sc-pkg-info pkg-info 3) (catalog "2d-doc") "209614ab3da685f46ece52c2efdf976f1e7697b1" #t "2d")) ("2d-lib" . #s((sc-pkg-info pkg-info 3) (catalog "2d-lib") "8f5dd908df23ee2a698b178971be4e18d1937393" #t "2d")) ("algol60" . #s((sc-pkg-info pkg-info 3) (catalog "algol60") "5a67faec1e3f59e98d5d5c4ee4687a9e9a34962f" #t "algol60")) ("at-exp-lib" . #s(pkg-info (catalog "at-exp-lib") "68787a39b1d862726969eb03e54c6fcbab05d8d4" #t)) ("base" . #s(pkg-info (catalog "base") "249d2a371f12382b1360dd7a77702fb28551133b" #t)) ("cext-lib" . #s(pkg-info (catalog "cext-lib") "1ce5c3f8ef512216a402de1e139a242cf6593999" #t)) ("class-iop-lib" . #s(pkg-info (catalog "class-iop-lib") "29c5747600fa93d2dac540e3381291e45fa09300" #t)) ("compatibility" . #s(pkg-info (catalog "compatibility") "0fd2da43b30b0f27aaafa5d67af21ddf7fe02dd6" #t)) ("compatibility-doc" . #s(pkg-info (catalog "compatibility-doc") "fee62d07a8e143615c24f365c7c48c30e1eebe8c" #t)) ("compatibility-lib" . #s(pkg-info (catalog "compatibility-lib") "8d1011f2f86192a07714e4088ff5e23ca794471a" #t)) ("compiler" . #s(pkg-info (catalog "compiler") "b1a38a648d3cb1adaca66e1d9fb2a3636421f4f8" #t)) ("compiler-lib" . #s(pkg-info (catalog "compiler-lib") "b60403b4873befa5811e5fabb65970a24e0bb950" #t)) ("contract-profile" . #s((sc-pkg-info pkg-info 3) (catalog "contract-profile") "001eec9d842dcd35b6f082934e614ba86a2ab4c0" #t "contract-profile")) ("data" . #s(pkg-info (catalog "data") "98ef519ebf74d40ba645d00933e47fa0a516c96f" #t)) ("data-doc" . #s(pkg-info (catalog "data-doc") "ebfdbebb77721a087efc803f30bec6afe2292097" #t)) ("data-enumerate-lib" . #s(pkg-info (catalog "data-enumerate-lib") "f70dcd6ce6d7b14d1f1cc76b908df7cb2fd61929" #t)) ("data-lib" . #s(pkg-info (catalog "data-lib") "7fb6940020f610c669df432877213bfe79caebc7" #t)) ("datalog" . #s((sc-pkg-info pkg-info 3) (catalog "datalog") "411342493d6022b7d74f7e13955dfdfcf6e62f91" #t "datalog")) ("db" . #s(pkg-info (catalog "db") "13af2037227b04af20e85e2fef78cc9686fc6e3d" #t)) ("db-doc" . #s(pkg-info (catalog "db-doc") "ed6cb9e0f165f5e390347d9a979f994c80e09e6a" #t)) ("db-lib" . #s(pkg-info (catalog "db-lib") "5c97b5ac2a3cf661d85cd7177029ce4686a9391e" #t)) ("deinprogramm" . #s(pkg-info (catalog "deinprogramm") "9e908294790f919de34f67ab3321f57a53f52e36" #t)) ("deinprogramm-signature" . #s(pkg-info (catalog "deinprogramm-signature") "433e0dc1f4f74ef73074ce1c387b06e9e260e212" #t)) ("distributed-places" . #s(pkg-info (catalog "distributed-places") "145c1cedf46768adf061fade24893965840f1643" #t)) ("distributed-places-doc" . #s(pkg-info (catalog "distributed-places-doc") "fda0badbab4441172b33ae31c3b2272ce59bcd3c" #t)) ("distributed-places-lib" . #s(pkg-info (catalog "distributed-places-lib") "db733a858f67c295196d3d5e62d4d1047dbe10c4" #t)) ("draw" . #s(pkg-info (catalog "draw") "1e57984e4a7e93fc30e6f42382b3bdf2d5162759" #t)) ("draw-doc" . #s(pkg-info (catalog "draw-doc") "e7348bde06b88e4261d46eeeb7a1b69cb1c4b5bb" #t)) ("draw-lib" . #s(pkg-info (catalog "draw-lib") "8343a0e4d9c082e2b5da7f36590f3d6f81a90815" #t)) ("drracket" . #s(pkg-info (catalog "drracket") "0233b83af527c6866ce458d5869c02f1c3148569" #t)) ("drracket-plugin-lib" . #s(pkg-info (catalog "drracket-plugin-lib") "c4715aa5984bf8dfe48d44038b4eb81525f7cac7" #t)) ("drracket-tool" . #s(pkg-info (catalog "drracket-tool") "93dcb297ed4ad62cf4605d632da64023bdfc1e69" #t)) ("drracket-tool-doc" . #s(pkg-info (catalog "drracket-tool-doc") "f44fa4ef2a14aaff04d3b26d5b4a701678e42b68" #t)) ("drracket-tool-lib" . #s(pkg-info (catalog "drracket-tool-lib") "f3ca7e15b2592b40c4aaf734cf00126d71e0876d" #t)) ("ds-store" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store") "f3b74900e431d9ca6ee1038fb7dd1e08d759b009" #t "ds-store")) ("ds-store-doc" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-doc") "06b754e0bc7ed6bd6ebf26b8ab4b3ae223ff9e3d" #t "ds-store")) ("ds-store-lib" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-lib") "517b5f727a5df1d7230cfeae5c208433d9717d2a" #t "ds-store")) ("dynext-lib" . #s(pkg-info (catalog "dynext-lib") "6327a91cf80c504524e1de84f2613263e62da80e" #t)) ("eli-tester" . #s(pkg-info (catalog "eli-tester") "0c9bfc31ad180898a7f10af252009084b0de30eb" #t)) ("eopl" . #s((sc-pkg-info pkg-info 3) (catalog "eopl") "b7725c60cac4f51be2fefef5bc393857c07dc0af" #t "eopl")) ("errortrace" . #s(pkg-info (catalog "errortrace") "f8d7f00c7dacc7d1bb2bc99c76129798319881e7" #t)) ("errortrace-doc" . #s(pkg-info (catalog "errortrace-doc") "aea79310a7f250d43325f82467b4c4126338a425" #t)) ("errortrace-lib" . #s(pkg-info (catalog "errortrace-lib") "0b7417f006208d6c8fb5f4fa61e1099a970f1fc2" #t)) ("frtime" . #s((sc-pkg-info pkg-info 3) (catalog "frtime") "83bf86eb4a5f6b1a2f53ac8f7b0c265ca8e27839" #t "frtime")) ("future-visualizer" . #s(pkg-info (catalog "future-visualizer") "76bc592353681f3d673841d65230deecd901ee8f" #t)) ("future-visualizer-typed" . #s(pkg-info (catalog "future-visualizer-typed") "a1698d4264a5267ac49b2451211e3391216a4e82" #t)) ("games" . #s((sc-pkg-info pkg-info 3) (catalog "games") "0ad78fb4ec37b6f19435b7599a566c1bb2e5847c" #t "games")) ("gui" . #s(pkg-info (catalog "gui") "a74759a9030789bdea8a324bd69cad5e162c5937" #t)) ("gui-doc" . #s(pkg-info (catalog "gui-doc") "e79b96b5ded5e81a5beeb33d905d7e7ccd893074" #t)) ("gui-lib" . #s(pkg-info (catalog "gui-lib") "35c5e9a5dd69ba6839210d49e6c967ba418e9cc4" #t)) ("gui-pkg-manager-lib" . #s(pkg-info (catalog "gui-pkg-manager-lib") "1e0d8a3f2a60642e785c0459108f1be6034dbcb1" #t)) ("htdp" . #s(pkg-info (catalog "htdp") "6e222eff85bae1b326f4282d8b82fc5c83202cfe" #t)) ("htdp-doc" . #s(pkg-info (catalog "htdp-doc") "e5892b0ae846f64e997e34ae2afb165b35f290b9" #t)) ("htdp-lib" . #s(pkg-info (catalog "htdp-lib") "1f18bce701e14d76fa2e4f14f8cded185b00a66d" #t)) ("html" . #s(pkg-info (catalog "html") "59ab0bddd4935969e2af0469ad48a9c30f33ef60" #t)) ("html-doc" . #s(pkg-info (catalog "html-doc") "3cd2a18da0b91b209d196f0cf669f2e59829d2bc" #t)) ("html-lib" . #s(pkg-info (catalog "html-lib") "2b17b0447932ee0a5287581269d24b5e3e9dcbb5" #t)) ("icons" . #s((sc-pkg-info pkg-info 3) (catalog "icons") "77e8f436f370ce8d88aa39622c5921664b56845b" #t "icons")) ("images" . #s(pkg-info (catalog "images") "98c6a0e120eb1115db9d376759b245db0591b07b" #t)) ("images-doc" . #s(pkg-info (catalog "images-doc") "99e114a7c7e234b6eaa23f99f863d03986bd62b5" #t)) ("images-gui-lib" . #s(pkg-info (catalog "images-gui-lib") "fef0ec840d82ed975370087fdcb049e0cce8e339" #t)) ("images-lib" . #s(pkg-info (catalog "images-lib") "9dcdc2e2388c63063a4a161e09585119d8d18e88" #t)) ("lazy" . #s((sc-pkg-info pkg-info 3) (catalog "lazy") "8038fc1a353a1618a5c19feecd7de1150719a9fc" #t "lazy")) ("macro-debugger" . #s(pkg-info (catalog "macro-debugger") "448277bb97132d25236deb785dce8c81933235d2" #t)) ("macro-debugger-text-lib" . #s(pkg-info (catalog "macro-debugger-text-lib") "0549dc476d9f071569d59359dbe6e4039f8af250" #t)) ("main-distribution" . #s(pkg-info (catalog "main-distribution") "3d0f4e0314c4b437feb7c3b86ff69cf20ad1e0f0" #f)) ("make" . #s((sc-pkg-info pkg-info 3) (catalog "make") "93e3f1b4144e3a04392b753cedc34c7c49e63fe5" #t "make")) ("math" . #s(pkg-info (catalog "math") "bc288b3ed293e90ef3a4eb05971d388265dc7065" #t)) ("math-doc" . #s(pkg-info (catalog "math-doc") "119b215101c0f1f82b6d28e06f5288812f38f2c3" #t)) ("math-lib" . #s(pkg-info (catalog "math-lib") "4e159abc47c306364ad02549853c1ddf82d6f8a2" #t)) ("mysterx" . #s((sc-pkg-info pkg-info 3) (catalog "mysterx") "23487c08b23cb7d965b97b0c45e6e3553854b869" #t "mysterx")) ("mzcom" . #s((sc-pkg-info pkg-info 3) (catalog "mzcom") "ac97bd1dc80a2f867d17f75254a8bbb9faa24afd" #t "mzcom")) ("mzscheme" . #s(pkg-info (catalog "mzscheme") "2a45b98e73f899324f2c5678d93df74f1792d23c" #t)) ("mzscheme-doc" . #s(pkg-info (catalog "mzscheme-doc") "de48e8b819047025177fac06b6f254e6f939fd23" #t)) ("mzscheme-lib" . #s(pkg-info (catalog "mzscheme-lib") "a6a2ec7fd0946a46c5368dbe1d7602419f8e7b53" #t)) ("net" . #s(pkg-info (catalog "net") "5df16fb466651bbb270a30296b1e8ee5f86af6fe" #t)) ("net-cookies" . #s(pkg-info (catalog "net-cookies") "51f6db09a36adbeb73e6bfc25bcd7d2123cc563e" #t)) ("net-cookies-doc" . #s(pkg-info (catalog "net-cookies-doc") "c1380af8407ce13dc993830db20250d7348117a8" #t)) ("net-cookies-lib" . #s(pkg-info (catalog "net-cookies-lib") "12f95b8fa1d9d562cd2bc7b499dd2fdc7111d122" #t)) ("net-doc" . #s(pkg-info (catalog "net-doc") "effd2e00136f037f9c524e25973ffa0b4b5f6ab8" #t)) ("net-lib" . #s(pkg-info (catalog "net-lib") "c0e7e3b3d55d067fa1fa3d13736877f33fe4fe76" #t)) ("optimization-coach" . #s(pkg-info (catalog "optimization-coach") "79ef3e4ec8de133f6f0b1838218b9478ba22d9bc" #t)) ("option-contract" . #s(pkg-info (catalog "option-contract") "14f8553d264972db98ecb25007f0c62f72c88837" #t)) ("option-contract-doc" . #s(pkg-info (catalog "option-contract-doc") "12d4da169785f5af1e8e38357713656385b4a75d" #t)) ("option-contract-lib" . #s(pkg-info (catalog "option-contract-lib") "f01bff6dccd0e6cf8721ac9cf3a819c5a9fd25b7" #t)) ("parser-tools" . #s(pkg-info (catalog "parser-tools") "7c90da6b7e8b13a5faed4d196f29f74d24c308a3" #t)) ("parser-tools-doc" . #s(pkg-info (catalog "parser-tools-doc") "d3d05e4f5f175f790775c835317034e8f6b6394e" #t)) ("parser-tools-lib" . #s(pkg-info (catalog "parser-tools-lib") "22eaaae7d2dc79755eaf96029554ebb48fb7ccaf" #t)) ("pconvert-lib" . #s(pkg-info (catalog "pconvert-lib") "cf75aa36ac881f36c9f845f9b3d5c75bb016caac" #t)) ("pict" . #s(pkg-info (catalog "pict") "b58b1e3ff96f16f62a8ca6e52efcf143d02c2552" #t)) ("pict-doc" . #s(pkg-info (catalog "pict-doc") "8e95db03fae67b105bd6afdce6c4dfcaf587c2c9" #t)) ("pict-lib" . #s(pkg-info (catalog "pict-lib") "2abed1569d91f15fa61d95e11f53d5cbbef610e1" #t)) ("pict-snip" . #s(pkg-info (catalog "pict-snip") "07039265dc698b136044724e4802b64517ba5209" #t)) ("pict-snip-doc" . #s(pkg-info (catalog "pict-snip-doc") "2453a4852fc2987b42f4ad4f6e92a1a448418db5" #t)) ("pict-snip-lib" . #s(pkg-info (catalog "pict-snip-lib") "28f4f45649589e010ab6c6cdc3e82ac9ff1fbe7f" #t)) ("picturing-programs" . #s(pkg-info (catalog "picturing-programs") "325870110f44e006c228f41619b5c77f331b82a1" #t)) ("plai" . #s(pkg-info (catalog "plai") "6ac6f533410efd33f655d51314228c77c83172ac" #t)) ("plai-doc" . #s((sc-pkg-info pkg-info 3) (catalog "plai-doc") "c8363060f66e1bd1ddc72c8271e86cf3fcbeff9e" #t "plai")) ("plai-lib" . #s((sc-pkg-info pkg-info 3) (catalog "plai-lib") "978f240e75c6ad1a4843a010fe250d9977e93339" #t "plai")) ("planet" . #s(pkg-info (catalog "planet") "e1a53854ddae4cf4eef667a91f3c944eb1481371" #t)) ("planet-doc" . #s(pkg-info (catalog "planet-doc") "0356d590361d2b909c717e97dc4f9eb2b567461a" #t)) ("planet-lib" . #s(pkg-info (catalog "planet-lib") "a0993c8b1c3ae0f08f75a6e70d785dfa3e7adf66" #t)) ("plot" . #s(pkg-info (catalog "plot") "898a4c570ed38396d684f260efa240d66accead9" #t)) ("plot-compat" . #s(pkg-info (catalog "plot-compat") "01b129e6ee41080f090c02054d07c7856ae2c06c" #t)) ("plot-doc" . #s(pkg-info (catalog "plot-doc") "70b006d5da401955e00000fcf6a3aacc296cd687" #t)) ("plot-gui-lib" . #s(pkg-info (catalog "plot-gui-lib") "57d49ac10de7a4d2520fe8a3c625eb91e6af8359" #t)) ("plot-lib" . #s(pkg-info (catalog "plot-lib") "84fecbb718ed024176c79f271f30579f5d753339" #t)) ("preprocessor" . #s((sc-pkg-info pkg-info 3) (catalog "preprocessor") "38fc7981a096322c67e4f7d9afac6f1fe664529e" #t "preprocessor")) ("profile" . #s(pkg-info (catalog "profile") "2183f9722eb2efbe2c8feb400b73602ad97fe221" #t)) ("profile-doc" . #s(pkg-info (catalog "profile-doc") "1d7c7dd2ad37e0d6c842cf30c7a01a631b18a39e" #t)) ("profile-lib" . #s((sc-pkg-info pkg-info 3) (catalog "profile-lib") "4eed8ba01f406d199604b3727c405c2bf368a617" #t "profile")) ("quickscript" . #s((sc-pkg-info pkg-info 3) (catalog "quickscript") "0c531a78067442fb5ac2b404f92c92427cff8bec" #t "quickscript")) ("r5rs" . #s(pkg-info (catalog "r5rs") "febae235a352df6df59a2e2c45b8658322793103" #t)) ("r5rs-doc" . #s(pkg-info (catalog "r5rs-doc") "3b842a310c928a0647b0c29cb3eabe215270f8e2" #t)) ("r5rs-lib" . #s(pkg-info (catalog "r5rs-lib") "9fcc4ebda67e44abd34e6c97a1448cd9a3947b77" #t)) ("r6rs" . #s(pkg-info (catalog "r6rs") "2ba0a84b06e7ab0ab49308fb6b58c23b29e39662" #t)) ("r6rs-doc" . #s(pkg-info (catalog "r6rs-doc") "972c5762a28dd773190c7aa46f9b972ac7c4c44e" #t)) ("r6rs-lib" . #s(pkg-info (catalog "r6rs-lib") "0a80a45a9666924b02b7e41002b3122b0b0606e3" #t)) ("racket-cheat" . #s((sc-pkg-info pkg-info 3) (catalog "racket-cheat") "11ef1c76f6459d0039e13cdc04326f5c54c28714" #t "racket-cheat")) ("racket-doc" . #s(pkg-info (catalog "racket-doc") "7c41f0b0ae91a7d77da4d4f15c2e5e2f6ab5c689" #t)) ("racket-index" . #s(pkg-info (catalog "racket-index") "ec294cafcf79f9a7034d02b4b3ff8c2e2a717622" #t)) ("racket-lib" . #s(pkg-info (catalog "racket-lib") "addde48592db0ba3db8686c37951f20c7112d368" #f)) ("racklog" . #s((sc-pkg-info pkg-info 3) (catalog "racklog") "a587b4aa82ff470e0646185cce033900e1bdafa8" #t "racklog")) ("rackunit" . #s(pkg-info (catalog "rackunit") "4b9de5253bfc93a4ba11e527bed3314d48ab0fc8" #t)) ("rackunit-doc" . #s(pkg-info (catalog "rackunit-doc") "26d22124d6eab4c79b73d778deef7b9bc73c2dec" #t)) ("rackunit-gui" . #s(pkg-info (catalog "rackunit-gui") "4cb8bc7487ff6bd55f653708d51f29fb75b490e2" #t)) ("rackunit-lib" . #s(pkg-info (catalog "rackunit-lib") "0069571fffeb268232fab1db7e9c6e8ea124f1ac" #t)) ("rackunit-plugin-lib" . #s(pkg-info (catalog "rackunit-plugin-lib") "a663951f3c13e3a6c0228949d97c6b2eef4a5b6c" #t)) ("rackunit-typed" . #s((sc-pkg-info pkg-info 3) (catalog "rackunit-typed") "d3ea39520e71e1fdcdaee0a4218575592c44a41a" #t "typed")) ("readline" . #s(pkg-info (catalog "readline") "4c7e66cd27cf4408832c87e3ee86df7a6eefa09d" #t)) ("readline-doc" . #s(pkg-info (catalog "readline-doc") "3bded5f74e621afb05b47f4fb05e455d8c2ee3f7" #t)) ("readline-lib" . #s(pkg-info (catalog "readline-lib") "a5182fa3edd32b9d63e6c355ccb372e0310a9d6d" #t)) ("realm" . #s((sc-pkg-info pkg-info 3) (catalog "realm") "f013fc3db6882ece583015d48f0ad8e1e971601d" #t "realm")) ("redex" . #s(pkg-info (catalog "redex") "57c8ddc62fd86b0ede08e92a7e47d35527768e99" #t)) ("redex-benchmark" . #s(pkg-info (catalog "redex-benchmark") "2433d94442a5f32f16d152656b168d1e6218aaa7" #t)) ("redex-doc" . #s(pkg-info (catalog "redex-doc") "6cedd1cfdc891d7ac3b46fcfe7767a4681443515" #t)) ("redex-examples" . #s(pkg-info (catalog "redex-examples") "98a38101bd790fa6bd8ff16ce8e2fb65245cb87c" #t)) ("redex-gui-lib" . #s(pkg-info (catalog "redex-gui-lib") "80083d5cded16afb0d45a59cdd655ddd396b8685" #t)) ("redex-lib" . #s(pkg-info (catalog "redex-lib") "04c6bc3954bf30293e0b5cfe76294a799e2f1aae" #t)) ("redex-pict-lib" . #s(pkg-info (catalog "redex-pict-lib") "9b13a5976edd63728d8914fc20bffb5ad981302f" #t)) ("sandbox-lib" . #s(pkg-info (catalog "sandbox-lib") "5b6080ff4052f881c343f6ccc847f860acb501a9" #t)) ("sasl" . #s((sc-pkg-info pkg-info 3) (catalog "sasl") "8dc49968c1ef11c5dd77f56c5979453a36d2c750" #t "sasl")) ("sasl-doc" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-doc") "02b6cf131a97af9caa622a77592bb851f5d58fa3" #t "sasl")) ("sasl-lib" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-lib") "d4ecdad04e42658a69d70d2f7d5eadae7ed7d16e" #t "sasl")) ("scheme-lib" . #s(pkg-info (catalog "scheme-lib") "22e71c59ac20b09cd156062ce0fb0afb86aaa851" #t)) ("schemeunit" . #s((sc-pkg-info pkg-info 3) (catalog "schemeunit") "03986b499744194a9e06a66dfe988bed9fb8cc40" #t "schemeunit")) ("scribble" . #s(pkg-info (catalog "scribble") "862cac10d6934b0dca35b4ebace9ffa0faa3a381" #t)) ("scribble-doc" . #s(pkg-info (catalog "scribble-doc") "fc38088b2924e7d902ceafc94243fd3ca2a52b45" #t)) ("scribble-html-lib" . #s(pkg-info (catalog "scribble-html-lib") "13105ce2064fa963c535187a657792e1ec95d284" #t)) ("scribble-lib" . #s(pkg-info (catalog "scribble-lib") "9be1c71d1c0f3f0d41031416689f012a16ba535a" #t)) ("scribble-text-lib" . #s(pkg-info (catalog "scribble-text-lib") "1d816dcc95b5f6d77ff6633b82a6dd40f7effe4e" #t)) ("serialize-cstruct-lib" . #s(pkg-info (catalog "serialize-cstruct-lib") "caeab596cb494273bcb84b917205a66bd06d0528" #t)) ("sgl" . #s((sc-pkg-info pkg-info 3) (catalog "sgl") "a2feb4952e01c7e02af068978ade81d0a213e035" #t "sgl")) ("shell-completion" . #s((sc-pkg-info pkg-info 3) (catalog "shell-completion") "900d6f81d7f78d17ac1789436c36a3314f09fcec" #t "shell-completion")) ("slatex" . #s((sc-pkg-info pkg-info 3) (catalog "slatex") "7a36270767b37d0336b4d72c7ca89140f395f9af" #t "slatex")) ("slideshow" . #s(pkg-info (catalog "slideshow") "62d9fa5b5fc8f1b82fb7acae427e474488fb1c2a" #t)) ("slideshow-doc" . #s(pkg-info (catalog "slideshow-doc") "d023178269517583e08ea3afc13bd8e867e86eaa" #t)) ("slideshow-exe" . #s(pkg-info (catalog "slideshow-exe") "4764478f8f62ba0a9d66ef064945af605cac48cc" #t)) ("slideshow-lib" . #s(pkg-info (catalog "slideshow-lib") "b7d301d8496d23dd950606d50a2c9565067f77f5" #t)) ("slideshow-plugin" . #s(pkg-info (catalog "slideshow-plugin") "50fe3549998180cf9391d355fce67c1b95fee846" #t)) ("snip" . #s(pkg-info (catalog "snip") "f6401933decce0674344953461fc80be6b600748" #t)) ("snip-lib" . #s(pkg-info (catalog "snip-lib") "8cf6a919d5d9021f782423b3712a0e73cf93842a" #t)) ("source-syntax" . #s((sc-pkg-info pkg-info 3) (catalog "source-syntax") "b6dde72b228b3e8e7da35fbc25cce395c8dce9cb" #t "syntax")) ("srfi" . #s(pkg-info (catalog "srfi") "810795b1c70213bba3e3f02c29c0ec0be774d551" #t)) ("srfi-doc" . #s(pkg-info (catalog "srfi-doc") "9bcb860c00d8023421c3ab3e2785ab8ee92b8f9d" #t)) ("srfi-doc-nonfree" . #s(pkg-info (catalog "srfi-doc-nonfree") "6ac01197bd6a33c21ff69684704e73739708d92c" #t)) ("srfi-lib" . #s(pkg-info (catalog "srfi-lib") "8dd9d951c94054ec60a4e1d59fa2c1a462e8fff6" #t)) ("srfi-lite-lib" . #s(pkg-info (catalog "srfi-lite-lib") "2a40a8ecf4a2368b6c84d8f0bdd1c72df4f3cc7f" #t)) ("string-constants" . #s(pkg-info (catalog "string-constants") "602234aee270ea040b993f8146548aa0c835ee41" #t)) ("string-constants-doc" . #s(pkg-info (catalog "string-constants-doc") "627c9a564c187d9dbd2a1c6de302e38ed8cd105e" #t)) ("string-constants-lib" . #s(pkg-info (catalog "string-constants-lib") "85764e7ecf8df819142221a84380340c23607e18" #t)) ("swindle" . #s((sc-pkg-info pkg-info 3) (catalog "swindle") "56793a3d43336a0dfc1fb6d4933a6a7d0a6f18a6" #t "swindle")) ("syntax-color" . #s(pkg-info (catalog "syntax-color") "0ab7c010c146aacbc26f81d73050e5dcb1ec44a4" #t)) ("syntax-color-doc" . #s(pkg-info (catalog "syntax-color-doc") "ebc23963c2f235893a2ae998311c439ca5f2de5e" #t)) ("syntax-color-lib" . #s(pkg-info (catalog "syntax-color-lib") "c496941837238109ebf69e6a2a3740136baf077e" #t)) ("testing-util-lib" . #s(pkg-info (catalog "testing-util-lib") "6ad76708f90cc3938a72d556458f92cde3e30578" #t)) ("tex-table" . #s((sc-pkg-info pkg-info 3) (catalog "tex-table") "c6127491120f723f26dbba30d217e4f2aeb12084" #t "mrlib")) ("trace" . #s((sc-pkg-info pkg-info 3) (catalog "trace") "953c7b5e344cfc8859006ffbfce4fdf360647d81" #t "trace")) ("typed-racket" . #s(pkg-info (catalog "typed-racket") "7896fb7492e6230f58d73d202ce9e6f77e3f98b7" #t)) ("typed-racket-compatibility" . #s(pkg-info (catalog "typed-racket-compatibility") "1bf2425d25d54c653d693290f41e9587847357a6" #t)) ("typed-racket-doc" . #s(pkg-info (catalog "typed-racket-doc") "d338099f40c47dbfb62f699206e99cfdfa7e32d6" #t)) ("typed-racket-lib" . #s(pkg-info (catalog "typed-racket-lib") "3eff82ebcceeab467c35cf19044013c83a47bd32" #t)) ("typed-racket-more" . #s(pkg-info (catalog "typed-racket-more") "600a695a0f59fe2740cf9e2080a13e25310a5114" #t)) ("unix-socket" . #s(pkg-info (catalog "unix-socket") "c015b6081883e19b3f1d2343bddca9895499832c" #t)) ("unix-socket-doc" . #s(pkg-info (catalog "unix-socket-doc") "b5d7f058cd0984aef1d8214968e79c202b972636" #t)) ("unix-socket-lib" . #s(pkg-info (catalog "unix-socket-lib") "e8d16e6cf98e03dc141ce410e7fddb83eb420e54" #t)) ("web-server" . #s(pkg-info (catalog "web-server") "9e01035046e279382ab2c1aa5c3f68d7533afd64" #t)) ("web-server-doc" . #s(pkg-info (catalog "web-server-doc") "afb48732580aaf70f2d13dc0f3115f25672a0fb6" #t)) ("web-server-lib" . #s(pkg-info (catalog "web-server-lib") "1fb4a0c9718b0e835d730f92289f9855018dfee3" #t)) ("wxme" . #s(pkg-info (catalog "wxme") "a56f70bd66b595d03baa8fb60046c3826b3abaaa" #t)) ("wxme-lib" . #s(pkg-info (catalog "wxme-lib") "75d7ad58da6d6fe5e3b5d81fe3f1e73b37460ae5" #t)) ("xrepl" . #s(pkg-info (catalog "xrepl") "c577bf792fde613ada8dc08f3b76b9daf3fc6814" #t)) ("xrepl-doc" . #s(pkg-info (catalog "xrepl-doc") "1724207363217dc4e931ac92e017c594a7a2a44b" #t)) ("xrepl-lib" . #s(pkg-info (catalog "xrepl-lib") "829e38b7ffcd0508842871b5aa354a531ddee4fa" #t)) ("zo-lib" . #s(pkg-info (catalog "zo-lib") "0f00c96ccaf933002e5c1e9f6b9e8856cbcd04eb" #t)))
++#hash(("2d" . #s(pkg-info (catalog "2d") "fc82a7bd227d7f3b8852351fc6bf34948a7750b8" #t)) ("2d-doc" . #s((sc-pkg-info pkg-info 3) (catalog "2d-doc") "209614ab3da685f46ece52c2efdf976f1e7697b1" #t "2d")) ("2d-lib" . #s((sc-pkg-info pkg-info 3) (catalog "2d-lib") "8f5dd908df23ee2a698b178971be4e18d1937393" #t "2d")) ("algol60" . #s((sc-pkg-info pkg-info 3) (catalog "algol60") "5a67faec1e3f59e98d5d5c4ee4687a9e9a34962f" #t "algol60")) ("at-exp-lib" . #s(pkg-info (catalog "at-exp-lib") "68787a39b1d862726969eb03e54c6fcbab05d8d4" #t)) ("base" . #s(pkg-info (catalog "base") "249d2a371f12382b1360dd7a77702fb28551133b" #t)) ("cext-lib" . #s(pkg-info (catalog "cext-lib") "1ce5c3f8ef512216a402de1e139a242cf6593999" #t)) ("class-iop-lib" . #s(pkg-info (catalog "class-iop-lib") "29c5747600fa93d2dac540e3381291e45fa09300" #t)) ("compatibility" . #s(pkg-info (catalog "compatibility") "0fd2da43b30b0f27aaafa5d67af21ddf7fe02dd6" #t)) ("compatibility-doc" . #s(pkg-info (catalog "compatibility-doc") "fee62d07a8e143615c24f365c7c48c30e1eebe8c" #t)) ("compatibility-lib" . #s(pkg-info (catalog "compatibility-lib") "8d1011f2f86192a07714e4088ff5e23ca794471a" #t)) ("compiler" . #s(pkg-info (catalog "compiler") "b1a38a648d3cb1adaca66e1d9fb2a3636421f4f8" #t)) ("compiler-lib" . #s(pkg-info (catalog "compiler-lib") "b60403b4873befa5811e5fabb65970a24e0bb950" #t)) ("contract-profile" . #s((sc-pkg-info pkg-info 3) (catalog "contract-profile") "001eec9d842dcd35b6f082934e614ba86a2ab4c0" #t "contract-profile")) ("data" . #s(pkg-info (catalog "data") "98ef519ebf74d40ba645d00933e47fa0a516c96f" #t)) ("data-doc" . #s(pkg-info (catalog "data-doc") "ebfdbebb77721a087efc803f30bec6afe2292097" #t)) ("data-enumerate-lib" . #s(pkg-info (catalog "data-enumerate-lib") "f70dcd6ce6d7b14d1f1cc76b908df7cb2fd61929" #t)) ("data-lib" . #s(pkg-info (catalog "data-lib") "7fb6940020f610c669df432877213bfe79caebc7" #t)) ("datalog" . #s((sc-pkg-info pkg-info 3) (catalog "datalog") "411342493d6022b7d74f7e13955dfdfcf6e62f91" #t "datalog")) ("db" . #s(pkg-info (catalog "db") "13af2037227b04af20e85e2fef78cc9686fc6e3d" #t)) ("db-doc" . #s(pkg-info (catalog "db-doc") "ed6cb9e0f165f5e390347d9a979f994c80e09e6a" #t)) ("db-lib" . #s(pkg-info (catalog "db-lib") "5c97b5ac2a3cf661d85cd7177029ce4686a9391e" #t)) ("deinprogramm" . #s(pkg-info (catalog "deinprogramm") "9e908294790f919de34f67ab3321f57a53f52e36" #t)) ("deinprogramm-signature" . #s(pkg-info (catalog "deinprogramm-signature") "433e0dc1f4f74ef73074ce1c387b06e9e260e212" #t)) ("distributed-places" . #s(pkg-info (catalog "distributed-places") "145c1cedf46768adf061fade24893965840f1643" #t)) ("distributed-places-doc" . #s(pkg-info (catalog "distributed-places-doc") "fda0badbab4441172b33ae31c3b2272ce59bcd3c" #t)) ("distributed-places-lib" . #s(pkg-info (catalog "distributed-places-lib") "db733a858f67c295196d3d5e62d4d1047dbe10c4" #t)) ("draw" . #s(pkg-info (catalog "draw") "1e57984e4a7e93fc30e6f42382b3bdf2d5162759" #t)) ("draw-doc" . #s(pkg-info (catalog "draw-doc") "e7348bde06b88e4261d46eeeb7a1b69cb1c4b5bb" #t)) ("draw-lib" . #s(pkg-info (catalog "draw-lib") "8343a0e4d9c082e2b5da7f36590f3d6f81a90815" #t)) ("drracket" . #s(pkg-info (catalog "drracket") "0233b83af527c6866ce458d5869c02f1c3148569" #t)) ("drracket-plugin-lib" . #s(pkg-info (catalog "drracket-plugin-lib") "c4715aa5984bf8dfe48d44038b4eb81525f7cac7" #t)) ("drracket-tool" . #s(pkg-info (catalog "drracket-tool") "93dcb297ed4ad62cf4605d632da64023bdfc1e69" #t)) ("drracket-tool-doc" . #s(pkg-info (catalog "drracket-tool-doc") "f44fa4ef2a14aaff04d3b26d5b4a701678e42b68" #t)) ("drracket-tool-lib" . #s(pkg-info (catalog "drracket-tool-lib") "f3ca7e15b2592b40c4aaf734cf00126d71e0876d" #t)) ("ds-store" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store") "f3b74900e431d9ca6ee1038fb7dd1e08d759b009" #t "ds-store")) ("ds-store-doc" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-doc") "06b754e0bc7ed6bd6ebf26b8ab4b3ae223ff9e3d" #t "ds-store")) ("ds-store-lib" . #s((sc-pkg-info pkg-info 3) (catalog "ds-store-lib") "517b5f727a5df1d7230cfeae5c208433d9717d2a" #t "ds-store")) ("dynext-lib" . #s(pkg-info (catalog "dynext-lib") "6327a91cf80c504524e1de84f2613263e62da80e" #t)) ("eli-tester" . #s(pkg-info (catalog "eli-tester") "0c9bfc31ad180898a7f10af252009084b0de30eb" #t)) ("eopl" . #s((sc-pkg-info pkg-info 3) (catalog "eopl") "b7725c60cac4f51be2fefef5bc393857c07dc0af" #t "eopl")) ("errortrace" . #s(pkg-info (catalog "errortrace") "f8d7f00c7dacc7d1bb2bc99c76129798319881e7" #t)) ("errortrace-doc" . #s(pkg-info (catalog "errortrace-doc") "aea79310a7f250d43325f82467b4c4126338a425" #t)) ("errortrace-lib" . #s(pkg-info (catalog "errortrace-lib") "0b7417f006208d6c8fb5f4fa61e1099a970f1fc2" #t)) ("frtime" . #s((sc-pkg-info pkg-info 3) (catalog "frtime") "83bf86eb4a5f6b1a2f53ac8f7b0c265ca8e27839" #t "frtime")) ("future-visualizer" . #s(pkg-info (catalog "future-visualizer") "76bc592353681f3d673841d65230deecd901ee8f" #t)) ("future-visualizer-typed" . #s(pkg-info (catalog "future-visualizer-typed") "a1698d4264a5267ac49b2451211e3391216a4e82" #t)) ("games" . #s((sc-pkg-info pkg-info 3) (catalog "games") "0ad78fb4ec37b6f19435b7599a566c1bb2e5847c" #t "games")) ("gui" . #s(pkg-info (catalog "gui") "a74759a9030789bdea8a324bd69cad5e162c5937" #t)) ("gui-doc" . #s(pkg-info (catalog "gui-doc") "e79b96b5ded5e81a5beeb33d905d7e7ccd893074" #t)) ("gui-lib" . #s(pkg-info (catalog "gui-lib") "35c5e9a5dd69ba6839210d49e6c967ba418e9cc4" #t)) ("gui-pkg-manager-lib" . #s(pkg-info (catalog "gui-pkg-manager-lib") "1e0d8a3f2a60642e785c0459108f1be6034dbcb1" #t)) ("htdp" . #s(pkg-info (catalog "htdp") "6e222eff85bae1b326f4282d8b82fc5c83202cfe" #t)) ("htdp-doc" . #s(pkg-info (catalog "htdp-doc") "e5892b0ae846f64e997e34ae2afb165b35f290b9" #t)) ("htdp-lib" . #s(pkg-info (catalog "htdp-lib") "1f18bce701e14d76fa2e4f14f8cded185b00a66d" #t)) ("html" . #s(pkg-info (catalog "html") "59ab0bddd4935969e2af0469ad48a9c30f33ef60" #t)) ("html-doc" . #s(pkg-info (catalog "html-doc") "3cd2a18da0b91b209d196f0cf669f2e59829d2bc" #t)) ("html-lib" . #s(pkg-info (catalog "html-lib") "2b17b0447932ee0a5287581269d24b5e3e9dcbb5" #t)) ("icons" . #s((sc-pkg-info pkg-info 3) (catalog "icons") "77e8f436f370ce8d88aa39622c5921664b56845b" #t "icons")) ("images" . #s(pkg-info (catalog "images") "98c6a0e120eb1115db9d376759b245db0591b07b" #t)) ("images-doc" . #s(pkg-info (catalog "images-doc") "99e114a7c7e234b6eaa23f99f863d03986bd62b5" #t)) ("images-gui-lib" . #s(pkg-info (catalog "images-gui-lib") "fef0ec840d82ed975370087fdcb049e0cce8e339" #t)) ("images-lib" . #s(pkg-info (catalog "images-lib") "9dcdc2e2388c63063a4a161e09585119d8d18e88" #t)) ("lazy" . #s((sc-pkg-info pkg-info 3) (catalog "lazy") "8038fc1a353a1618a5c19feecd7de1150719a9fc" #t "lazy")) ("macro-debugger" . #s(pkg-info (catalog "macro-debugger") "448277bb97132d25236deb785dce8c81933235d2" #t)) ("macro-debugger-text-lib" . #s(pkg-info (catalog "macro-debugger-text-lib") "0549dc476d9f071569d59359dbe6e4039f8af250" #t)) ("main-distribution" . #s(pkg-info (catalog "main-distribution") "3d0f4e0314c4b437feb7c3b86ff69cf20ad1e0f0" #f)) ("make" . #s((sc-pkg-info pkg-info 3) (catalog "make") "93e3f1b4144e3a04392b753cedc34c7c49e63fe5" #t "make")) ("math" . #s(pkg-info (catalog "math") "bc288b3ed293e90ef3a4eb05971d388265dc7065" #t)) ("math-doc" . #s(pkg-info (catalog "math-doc") "119b215101c0f1f82b6d28e06f5288812f38f2c3" #t)) ("math-lib" . #s(pkg-info (catalog "math-lib") "4e159abc47c306364ad02549853c1ddf82d6f8a2" #t)) ("mysterx" . #s((sc-pkg-info pkg-info 3) (catalog "mysterx") "23487c08b23cb7d965b97b0c45e6e3553854b869" #t "mysterx")) ("mzcom" . #s((sc-pkg-info pkg-info 3) (catalog "mzcom") "ac97bd1dc80a2f867d17f75254a8bbb9faa24afd" #t "mzcom")) ("mzscheme" . #s(pkg-info (catalog "mzscheme") "2a45b98e73f899324f2c5678d93df74f1792d23c" #t)) ("mzscheme-doc" . #s(pkg-info (catalog "mzscheme-doc") "de48e8b819047025177fac06b6f254e6f939fd23" #t)) ("mzscheme-lib" . #s(pkg-info (catalog "mzscheme-lib") "a6a2ec7fd0946a46c5368dbe1d7602419f8e7b53" #t)) ("net" . #s(pkg-info (catalog "net") "5df16fb466651bbb270a30296b1e8ee5f86af6fe" #t)) ("net-cookies" . #s(pkg-info (catalog "net-cookies") "51f6db09a36adbeb73e6bfc25bcd7d2123cc563e" #t)) ("net-cookies-doc" . #s(pkg-info (catalog "net-cookies-doc") "c1380af8407ce13dc993830db20250d7348117a8" #t)) ("net-cookies-lib" . #s(pkg-info (catalog "net-cookies-lib") "12f95b8fa1d9d562cd2bc7b499dd2fdc7111d122" #t)) ("net-doc" . #s(pkg-info (catalog "net-doc") "effd2e00136f037f9c524e25973ffa0b4b5f6ab8" #t)) ("net-lib" . #s(pkg-info (catalog "net-lib") "c0e7e3b3d55d067fa1fa3d13736877f33fe4fe76" #t)) ("optimization-coach" . #s(pkg-info (catalog "optimization-coach") "79ef3e4ec8de133f6f0b1838218b9478ba22d9bc" #t)) ("option-contract" . #s(pkg-info (catalog "option-contract") "14f8553d264972db98ecb25007f0c62f72c88837" #t)) ("option-contract-doc" . #s(pkg-info (catalog "option-contract-doc") "12d4da169785f5af1e8e38357713656385b4a75d" #t)) ("option-contract-lib" . #s(pkg-info (catalog "option-contract-lib") "f01bff6dccd0e6cf8721ac9cf3a819c5a9fd25b7" #t)) ("parser-tools" . #s(pkg-info (catalog "parser-tools") "7c90da6b7e8b13a5faed4d196f29f74d24c308a3" #t)) ("parser-tools-doc" . #s(pkg-info (catalog "parser-tools-doc") "d3d05e4f5f175f790775c835317034e8f6b6394e" #t)) ("parser-tools-lib" . #s(pkg-info (catalog "parser-tools-lib") "22eaaae7d2dc79755eaf96029554ebb48fb7ccaf" #t)) ("pconvert-lib" . #s(pkg-info (catalog "pconvert-lib") "cf75aa36ac881f36c9f845f9b3d5c75bb016caac" #t)) ("pict" . #s(pkg-info (catalog "pict") "b58b1e3ff96f16f62a8ca6e52efcf143d02c2552" #t)) ("pict-doc" . #s(pkg-info (catalog "pict-doc") "8e95db03fae67b105bd6afdce6c4dfcaf587c2c9" #t)) ("pict-lib" . #s(pkg-info (catalog "pict-lib") "2abed1569d91f15fa61d95e11f53d5cbbef610e1" #t)) ("pict-snip" . #s(pkg-info (catalog "pict-snip") "07039265dc698b136044724e4802b64517ba5209" #t)) ("pict-snip-doc" . #s(pkg-info (catalog "pict-snip-doc") "2453a4852fc2987b42f4ad4f6e92a1a448418db5" #t)) ("pict-snip-lib" . #s(pkg-info (catalog "pict-snip-lib") "28f4f45649589e010ab6c6cdc3e82ac9ff1fbe7f" #t)) ("picturing-programs" . #s(pkg-info (catalog "picturing-programs") "325870110f44e006c228f41619b5c77f331b82a1" #t)) ("plai" . #s(pkg-info (catalog "plai") "6ac6f533410efd33f655d51314228c77c83172ac" #t)) ("plai-doc" . #s((sc-pkg-info pkg-info 3) (catalog "plai-doc") "c8363060f66e1bd1ddc72c8271e86cf3fcbeff9e" #t "plai")) ("plai-lib" . #s((sc-pkg-info pkg-info 3) (catalog "plai-lib") "978f240e75c6ad1a4843a010fe250d9977e93339" #t "plai")) ("planet" . #s(pkg-info (catalog "planet") "e1a53854ddae4cf4eef667a91f3c944eb1481371" #t)) ("planet-doc" . #s(pkg-info (catalog "planet-doc") "0356d590361d2b909c717e97dc4f9eb2b567461a" #t)) ("planet-lib" . #s(pkg-info (catalog "planet-lib") "a0993c8b1c3ae0f08f75a6e70d785dfa3e7adf66" #t)) ("plot" . #s(pkg-info (catalog "plot") "898a4c570ed38396d684f260efa240d66accead9" #t)) ("plot-compat" . #s(pkg-info (catalog "plot-compat") "01b129e6ee41080f090c02054d07c7856ae2c06c" #t)) ("plot-doc" . #s(pkg-info (catalog "plot-doc") "70b006d5da401955e00000fcf6a3aacc296cd687" #t)) ("plot-gui-lib" . #s(pkg-info (catalog "plot-gui-lib") "57d49ac10de7a4d2520fe8a3c625eb91e6af8359" #t)) ("plot-lib" . #s(pkg-info (catalog "plot-lib") "84fecbb718ed024176c79f271f30579f5d753339" #t)) ("preprocessor" . #s((sc-pkg-info pkg-info 3) (catalog "preprocessor") "38fc7981a096322c67e4f7d9afac6f1fe664529e" #t "preprocessor")) ("profile" . #s(pkg-info (catalog "profile") "2183f9722eb2efbe2c8feb400b73602ad97fe221" #t)) ("profile-doc" . #s(pkg-info (catalog "profile-doc") "1d7c7dd2ad37e0d6c842cf30c7a01a631b18a39e" #t)) ("profile-lib" . #s((sc-pkg-info pkg-info 3) (catalog "profile-lib") "4eed8ba01f406d199604b3727c405c2bf368a617" #t "profile")) ("quickscript" . #s((sc-pkg-info pkg-info 3) (catalog "quickscript") "0c531a78067442fb5ac2b404f92c92427cff8bec" #t "quickscript")) ("r5rs" . #s(pkg-info (catalog "r5rs") "febae235a352df6df59a2e2c45b8658322793103" #t)) ("r5rs-doc" . #s(pkg-info (catalog "r5rs-doc") "3b842a310c928a0647b0c29cb3eabe215270f8e2" #t)) ("r5rs-lib" . #s(pkg-info (catalog "r5rs-lib") "9fcc4ebda67e44abd34e6c97a1448cd9a3947b77" #t)) ("r6rs" . #s(pkg-info (catalog "r6rs") "2ba0a84b06e7ab0ab49308fb6b58c23b29e39662" #t)) ("r6rs-doc" . #s(pkg-info (catalog "r6rs-doc") "972c5762a28dd773190c7aa46f9b972ac7c4c44e" #t)) ("r6rs-lib" . #s(pkg-info (catalog "r6rs-lib") "0a80a45a9666924b02b7e41002b3122b0b0606e3" #t)) ("racket-cheat" . #s((sc-pkg-info pkg-info 3) (catalog "racket-cheat") "11ef1c76f6459d0039e13cdc04326f5c54c28714" #t "racket-cheat")) ("racket-doc" . #s(pkg-info (catalog "racket-doc") "7c41f0b0ae91a7d77da4d4f15c2e5e2f6ab5c689" #t)) ("racket-index" . #s(pkg-info (catalog "racket-index") "ec294cafcf79f9a7034d02b4b3ff8c2e2a717622" #t)) ("racket-lib" . #s(pkg-info (catalog "racket-lib") "addde48592db0ba3db8686c37951f20c7112d368" #f)) ("racklog" . #s((sc-pkg-info pkg-info 3) (catalog "racklog") "a587b4aa82ff470e0646185cce033900e1bdafa8" #t "racklog")) ("rackunit" . #s(pkg-info (catalog "rackunit") "4b9de5253bfc93a4ba11e527bed3314d48ab0fc8" #t)) ("rackunit-doc" . #s(pkg-info (catalog "rackunit-doc") "26d22124d6eab4c79b73d778deef7b9bc73c2dec" #t)) ("rackunit-gui" . #s(pkg-info (catalog "rackunit-gui") "4cb8bc7487ff6bd55f653708d51f29fb75b490e2" #t)) ("rackunit-lib" . #s(pkg-info (catalog "rackunit-lib") "0069571fffeb268232fab1db7e9c6e8ea124f1ac" #t)) ("rackunit-plugin-lib" . #s(pkg-info (catalog "rackunit-plugin-lib") "a663951f3c13e3a6c0228949d97c6b2eef4a5b6c" #t)) ("rackunit-typed" . #s((sc-pkg-info pkg-info 3) (catalog "rackunit-typed") "d3ea39520e71e1fdcdaee0a4218575592c44a41a" #t "typed")) ("readline" . #s(pkg-info (catalog "readline") "4c7e66cd27cf4408832c87e3ee86df7a6eefa09d" #t)) ("readline-doc" . #s(pkg-info (catalog "readline-doc") "3bded5f74e621afb05b47f4fb05e455d8c2ee3f7" #t)) ("readline-lib" . #s(pkg-info (catalog "readline-lib") "a5182fa3edd32b9d63e6c355ccb372e0310a9d6d" #t)) ("realm" . #s((sc-pkg-info pkg-info 3) (catalog "realm") "f013fc3db6882ece583015d48f0ad8e1e971601d" #t "realm")) ("redex" . #s(pkg-info (catalog "redex") "57c8ddc62fd86b0ede08e92a7e47d35527768e99" #t)) ("redex-benchmark" . #s(pkg-info (catalog "redex-benchmark") "2433d94442a5f32f16d152656b168d1e6218aaa7" #t)) ("redex-doc" . #s(pkg-info (catalog "redex-doc") "6cedd1cfdc891d7ac3b46fcfe7767a4681443515" #t)) ("redex-examples" . #s(pkg-info (catalog "redex-examples") "98a38101bd790fa6bd8ff16ce8e2fb65245cb87c" #t)) ("redex-gui-lib" . #s(pkg-info (catalog "redex-gui-lib") "80083d5cded16afb0d45a59cdd655ddd396b8685" #t)) ("redex-lib" . #s(pkg-info (catalog "redex-lib") "04c6bc3954bf30293e0b5cfe76294a799e2f1aae" #t)) ("redex-pict-lib" . #s(pkg-info (catalog "redex-pict-lib") "9b13a5976edd63728d8914fc20bffb5ad981302f" #t)) ("sandbox-lib" . #s(pkg-info (catalog "sandbox-lib") "5b6080ff4052f881c343f6ccc847f860acb501a9" #t)) ("sasl" . #s((sc-pkg-info pkg-info 3) (catalog "sasl") "8dc49968c1ef11c5dd77f56c5979453a36d2c750" #t "sasl")) ("sasl-doc" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-doc") "02b6cf131a97af9caa622a77592bb851f5d58fa3" #t "sasl")) ("sasl-lib" . #s((sc-pkg-info pkg-info 3) (catalog "sasl-lib") "d4ecdad04e42658a69d70d2f7d5eadae7ed7d16e" #t "sasl")) ("scheme-lib" . #s(pkg-info (catalog "scheme-lib") "22e71c59ac20b09cd156062ce0fb0afb86aaa851" #t)) ("schemeunit" . #s((sc-pkg-info pkg-info 3) (catalog "schemeunit") "03986b499744194a9e06a66dfe988bed9fb8cc40" #t "schemeunit")) ("scribble" . #s(pkg-info (catalog "scribble") "862cac10d6934b0dca35b4ebace9ffa0faa3a381" #t)) ("scribble-doc" . #s(pkg-info (catalog "scribble-doc") "fc38088b2924e7d902ceafc94243fd3ca2a52b45" #t)) ("scribble-html-lib" . #s(pkg-info (catalog "scribble-html-lib") "13105ce2064fa963c535187a657792e1ec95d284" #t)) ("scribble-lib" . #s(pkg-info (catalog "scribble-lib") "9be1c71d1c0f3f0d41031416689f012a16ba535a" #t)) ("scribble-text-lib" . #s(pkg-info (catalog "scribble-text-lib") "1d816dcc95b5f6d77ff6633b82a6dd40f7effe4e" #t)) ("serialize-cstruct-lib" . #s(pkg-info (catalog "serialize-cstruct-lib") "caeab596cb494273bcb84b917205a66bd06d0528" #t)) ("sgl" . #s((sc-pkg-info pkg-info 3) (catalog "sgl") "a2feb4952e01c7e02af068978ade81d0a213e035" #t "sgl")) ("shell-completion" . #s((sc-pkg-info pkg-info 3) (catalog "shell-completion") "900d6f81d7f78d17ac1789436c36a3314f09fcec" #t "shell-completion")) ("slatex" . #s((sc-pkg-info pkg-info 3) (catalog "slatex") "7a36270767b37d0336b4d72c7ca89140f395f9af" #t "slatex")) ("slideshow" . #s(pkg-info (catalog "slideshow") "62d9fa5b5fc8f1b82fb7acae427e474488fb1c2a" #t)) ("slideshow-doc" . #s(pkg-info (catalog "slideshow-doc") "d023178269517583e08ea3afc13bd8e867e86eaa" #t)) ("slideshow-exe" . #s(pkg-info (catalog "slideshow-exe") "4764478f8f62ba0a9d66ef064945af605cac48cc" #t)) ("slideshow-lib" . #s(pkg-info (catalog "slideshow-lib") "b7d301d8496d23dd950606d50a2c9565067f77f5" #t)) ("slideshow-plugin" . #s(pkg-info (catalog "slideshow-plugin") "50fe3549998180cf9391d355fce67c1b95fee846" #t)) ("snip" . #s(pkg-info (catalog "snip") "f6401933decce0674344953461fc80be6b600748" #t)) ("snip-lib" . #s(pkg-info (catalog "snip-lib") "8cf6a919d5d9021f782423b3712a0e73cf93842a" #t)) ("source-syntax" . #s((sc-pkg-info pkg-info 3) (catalog "source-syntax") "b6dde72b228b3e8e7da35fbc25cce395c8dce9cb" #t "syntax")) ("srfi" . #s(pkg-info (catalog "srfi") "810795b1c70213bba3e3f02c29c0ec0be774d551" #t)) ("srfi-doc" . #s(pkg-info (catalog "srfi-doc") "9bcb860c00d8023421c3ab3e2785ab8ee92b8f9d" #t)) ("srfi-lib" . #s(pkg-info (catalog "srfi-lib") "8dd9d951c94054ec60a4e1d59fa2c1a462e8fff6" #t)) ("srfi-lite-lib" . #s(pkg-info (catalog "srfi-lite-lib") "2a40a8ecf4a2368b6c84d8f0bdd1c72df4f3cc7f" #t)) ("string-constants" . #s(pkg-info (catalog "string-constants") "602234aee270ea040b993f8146548aa0c835ee41" #t)) ("string-constants-doc" . #s(pkg-info (catalog "string-constants-doc") "627c9a564c187d9dbd2a1c6de302e38ed8cd105e" #t)) ("string-constants-lib" . #s(pkg-info (catalog "string-constants-lib") "85764e7ecf8df819142221a84380340c23607e18" #t)) ("swindle" . #s((sc-pkg-info pkg-info 3) (catalog "swindle") "56793a3d43336a0dfc1fb6d4933a6a7d0a6f18a6" #t "swindle")) ("syntax-color" . #s(pkg-info (catalog "syntax-color") "0ab7c010c146aacbc26f81d73050e5dcb1ec44a4" #t)) ("syntax-color-doc" . #s(pkg-info (catalog "syntax-color-doc") "ebc23963c2f235893a2ae998311c439ca5f2de5e" #t)) ("syntax-color-lib" . #s(pkg-info (catalog "syntax-color-lib") "c496941837238109ebf69e6a2a3740136baf077e" #t)) ("testing-util-lib" . #s(pkg-info (catalog "testing-util-lib") "6ad76708f90cc3938a72d556458f92cde3e30578" #t)) ("tex-table" . #s((sc-pkg-info pkg-info 3) (catalog "tex-table") "c6127491120f723f26dbba30d217e4f2aeb12084" #t "mrlib")) ("trace" . #s((sc-pkg-info pkg-info 3) (catalog "trace") "953c7b5e344cfc8859006ffbfce4fdf360647d81" #t "trace")) ("typed-racket" . #s(pkg-info (catalog "typed-racket") "7896fb7492e6230f58d73d202ce9e6f77e3f98b7" #t)) ("typed-racket-compatibility" . #s(pkg-info (catalog "typed-racket-compatibility") "1bf2425d25d54c653d693290f41e9587847357a6" #t)) ("typed-racket-doc" . #s(pkg-info (catalog "typed-racket-doc") "d338099f40c47dbfb62f699206e99cfdfa7e32d6" #t)) ("typed-racket-lib" . #s(pkg-info (catalog "typed-racket-lib") "3eff82ebcceeab467c35cf19044013c83a47bd32" #t)) ("typed-racket-more" . #s(pkg-info (catalog "typed-racket-more") "600a695a0f59fe2740cf9e2080a13e25310a5114" #t)) ("unix-socket" . #s(pkg-info (catalog "unix-socket") "c015b6081883e19b3f1d2343bddca9895499832c" #t)) ("unix-socket-doc" . #s(pkg-info (catalog "unix-socket-doc") "b5d7f058cd0984aef1d8214968e79c202b972636" #t)) ("unix-socket-lib" . #s(pkg-info (catalog "unix-socket-lib") "e8d16e6cf98e03dc141ce410e7fddb83eb420e54" #t)) ("web-server" . #s(pkg-info (catalog "web-server") "9e01035046e279382ab2c1aa5c3f68d7533afd64" #t)) ("web-server-doc" . #s(pkg-info (catalog "web-server-doc") "afb48732580aaf70f2d13dc0f3115f25672a0fb6" #t)) ("web-server-lib" . #s(pkg-info (catalog "web-server-lib") "1fb4a0c9718b0e835d730f92289f9855018dfee3" #t)) ("wxme" . #s(pkg-info (catalog "wxme") "a56f70bd66b595d03baa8fb60046c3826b3abaaa" #t)) ("wxme-lib" . #s(pkg-info (catalog "wxme-lib") "75d7ad58da6d6fe5e3b5d81fe3f1e73b37460ae5" #t)) ("xrepl" . #s(pkg-info (catalog "xrepl") "c577bf792fde613ada8dc08f3b76b9daf3fc6814" #t)) ("xrepl-doc" . #s(pkg-info (catalog "xrepl-doc") "1724207363217dc4e931ac92e017c594a7a2a44b" #t)) ("xrepl-lib" . #s(pkg-info (catalog "xrepl-lib") "829e38b7ffcd0508842871b5aa354a531ddee4fa" #t)) ("zo-lib" . #s(pkg-info (catalog "zo-lib") "0f00c96ccaf933002e5c1e9f6b9e8856cbcd04eb" #t)))
+diff -urN racket-7.4-orig/share/pkgs/srfi/info.rkt racket-7.4-remove-nonfree/share/pkgs/srfi/info.rkt
+--- racket-7.4-orig/share/pkgs/srfi/info.rkt 2019-08-03 23:24:08.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi/info.rkt 2019-08-28 09:26:35.582382386 -0400
+@@ -1 +1 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.4"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc" "srfi-doc-nonfree"))) (define implies (quote ("srfi-lib" "srfi-doc" "srfi-doc-nonfree"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
++(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.4"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc"))) (define implies (quote ("srfi-lib" "srfi-doc"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/info.rkt racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/info.rkt
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/info.rkt 2019-08-03 23:24:10.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1 +0,0 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.4"))) (define collection (quote multi)) (define build-deps (quote ("mzscheme-doc" "scheme-lib" "base" "scribble-lib" "srfi-doc" "racket-doc" "r5rs-doc" "r6rs-doc" "compatibility-lib"))) (define pkg-desc "non-free documentation for \"srfi-lib\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 2019-08-03 21:32:26.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,3 +0,0 @@
+-#lang info
+-
+-(define scribblings '(("srfi-nf.scrbl" (multi-page) (library 100))))
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 2019-08-03 21:32:26.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 1969-12-31 19:00:00.000000000 -0500
+@@ -1,68 +0,0 @@
+-#lang scribble/doc
+-@(require srfi/scribblings/util
+- scribble/manual
+- scribble/eval
+- scriblib/render-cond
+- scribble/core
+- scribble/html-properties
+- (for-syntax scheme/base)
+- (for-label scheme/base
+- racket/stream))
+-
+-@; ----------------------------------------------------------------------
+-
+-@title{SRFI Nonfree Libraries and Documentation}
+-
+-The @link[#:style srfi-std "http://srfi.schemers.org/"]{Scheme Requests for
+-Implementation} (a.k.a. @deftech{SRFI}) process allows individual
+-members of the Scheme community to propose libraries and extensions to
+-be supported by multiple Scheme implementations.
+-
+-Racket is distributed with implementations of many SRFIs, most of
+-which can be implemented as libraries. To import the bindings of SRFI
+-@math{n}, use
+-
+-@racketblock[
+-(require @#,elem{@racketidfont{srfi/}@math{n}})
+-]
+-
+-This document lists the SRFIs that are supported by Racket and
+-provides a link to the original SRFI specification (which is also
+-distributed as part of Racket's documentation).
+-
+-The following SRFI specification documents are licensed restrictively.
+-
+-@table-of-contents[]
+-
+-
+-@; ----------------------------------------
+-
+-@srfi[5]{A compatible let form with signatures and rest arguments}
+-
+-@redirect[5 '(
+- (let #t "unnamed")
+-)]
+-
+-Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package.
+-Only the SRFI specification document is nonfree.
+-
+-@; ----------------------------------------
+-
+-@srfi[29]{Localization}
+-
+-@redirect[29 '(
+- (current-language #f "current-language")
+- (current-country #f "current-country")
+- (current-locale-details #f "current-locale-details")
+- (declare-bundle! #f "declare-bundle!")
+- (store-bundle #f "store-bundle")
+- (load-bundle! #f "load-bundle!")
+- (localized-template #f "localized-template")
+-)]
+-
+-Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package.
+-Only the SRFI specification document is nonfree.
+-
+-@; ----------------------------------------
+-
+-@index-section[]
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 2019-08-03 21:32:26.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
+@@ -1,507 +0,0 @@
+-<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
+-<html>
+- <head>
+- <meta name="generator" content="HTML Tidy, see www.w3.org">
+- <title>SRFI 29: Localization</title>
+- <meta name="author" content="Scott G. Miller">
+- <meta name="description" content="Localization">
+- </head>
+- <body>
+- <H1>Title</H1>
+-
+- SRFI 29: Localization
+-
+- <H1>Author</H1>
+-
+- Scott G. Miller
+-
+- <H1>Abstract</H1>
+-
+- This document specifies an interface to retrieving and
+- displaying locale sensitive messages. A Scheme program can
+- register one or more translations of templated messages, and
+- then write Scheme code that can transparently retrieve the
+- appropriate message for the locale under which the Scheme
+- system is running. <br>
+-
+-
+- <H1>Rationale</H1>
+-
+- <p>As any programmer that has ever had to deal with making his
+- or her code readable in more than one locale, the process of
+- sufficiently abstracting program messages from their
+- presentation to the user is non-trivial without help from the
+- programming language. Most modern programming language
+- libraries do provide some mechanism for performing this
+- separation.</p>
+-
+- <p>A portable API that allows a piece of code to run without
+- modification in different countries and under different
+- languages is a must for any non-trivial software project.
+- The interface should separate the logic of a program from
+- the myriad of translations that may be necessary.</p>
+-
+- <p>The interface described in this document provides such
+- functionality. The underlying implementation is also allowed to
+- use whatever datastructures it likes to provide access to the
+- translations in the most efficient manner possible. In
+- addition, the implementation is provided with standardized
+- functions that programs will use for accessing an external,
+- unspecified repository of translations.</p>
+-
+- <p>This interface <i>does not</i> cover all aspects of
+- localization, including support for non-latin characters,
+- number and date formatting, etc. Such functionality is the
+- scope of a future SRFI that may extend this one.</p>
+-
+- <H1>Dependencies</H1>
+-
+- An SRFI-29 conformant implementation must also implement
+- SRFI-28, Basic Format Strings. Message templates are strings
+- that must be processed by the <tt>format</tt> function
+- specified in that SRFI.
+-
+- <H1>Specification</H1>
+-
+- <h3>Message Bundles</h3>
+-
+- <p>A Message Bundle is a set of message templates and their
+- identifying keys. Each bundle contains one or more such
+- key/value pairs. The bundle itself is associated with a
+- <i>bundle specifier</i> which uniquely identifies the
+- bundle.</p>
+-
+- <h3>Bundle Specifiers</h3>
+-
+- <p>A Bundle Specifier is a Scheme list that describes, in order
+- of importance, the package and locale of a message bundle.
+- In most cases, a locale specifier will have between one
+- and three elements. The first element is a symbol denoting the
+- package for which this bundle applies. The second and third
+- elements denote a <i>locale</i>. The second element (first
+- element of the locale) if present, is the two letter, ISO 639-1
+- language code for the bundle. The third element, if present, is
+- a two letter ISO 3166-1 country code. In some cases, a
+- fourth element may be present, specifying the encoding used for
+- the bundle. All bundle specifier elements are Scheme
+- symbols.</p>
+-
+- <p>If only one translation is provided, it should be designated
+- only by a package name, for example <tt>(mathlib)</tt>. This
+- translation is called the <i>default</i> translation.</p>
+-
+- <h3>Bundle Searching</h3>
+-
+- <p>When a message template is retrieved from a bundle, the
+- Scheme implementation will provide the locale under which the
+- system is currently running. When the template is retrieved,
+- the package name will be specified. The Scheme system should
+- construct a Bundle Specifier from the provided package name and
+- the active locale. For example, when retrieving a message
+- template for French Canadian, in the <tt>mathlib</tt> package,
+- the bundle specifier '<tt>(mathlib fr ca)</tt>' is used. A
+- program may also retrieve the elements of the current locale
+- using the no-argument procedures:</p>
+-
+- <p><b><a name="current-language"></a><tt>current-language</tt></b> <tt>->
+- <i>symbol</i></tt><br>
+- <tt><b>current-language</b> <i>symbol</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- When given no arguments, returns the current ISO 639-1
+- language code as a symbol. If provided with an
+- argument, the current language is set to that named by the
+- symbol for the currently executing Scheme thread (or for the
+- entire Scheme system if such a distinction is not possible).
+-
+- </blockquote>
+-
+- <p><b><a name="current-country"></a><tt>current-country</tt></b> <tt>->
+- <i>symbol</i></tt><br>
+- <tt><b>current-country</b> <i>symbol</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- returns the current ISO 3166-1 country code as a symbol.
+- If provided with an argument, the current country is
+- set to that named by the symbol for the currently executing
+- Scheme thread (or for the entire Scheme system if such a
+- distinction is not possible).
+- </blockquote>
+-
+- <p><b><a name="current-locale-details"></a><tt>current-locale-details</tt></b> <tt>-> <i>list of
+- symbol</i></tt>s<br>
+- <tt><b>current-locale-details</b> <i>list-of-symbols</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- Returns a list of additional locale details as a list of
+- symbols. This list may contain information about
+- encodings or other more specific information. If
+- provided with an argument, the current locale details are set
+- to those given in the currently executing Scheme thread (or
+- for the entire Scheme system if such a distinction is not
+- possible).
+- </blockquote>
+-
+- <p>The Scheme System should first check for a bundle with the
+- exact name provided. If no such bundle is found, the last
+- element from the list is removed and a search is tried for a
+- bundle with that name. If no bundle is then found, the list is
+- shortened by removing the last element again. If no message is
+- found and the bundle specifier is now the empty list, an error
+- should be raised.</p>
+-
+- <p>The reason for this search order is to provide the most
+- locale sensitive template possible, but to fall back on more
+- general templates if a translation has not yet been provided
+- for the given locale.</p>
+-
+- <h3>Message Templates</h3>
+-
+- <p>A message template is a localized message that may or may
+- not contain one of a number of formatting codes. A message
+- template is a Scheme string. The string is of a form that can
+- be processed by the <tt>format</tt> procedure found in many
+- Scheme systems and formally specified in SRFI-28 (Basic Format
+- Strings).</p>
+-
+- <p>This SRFI also extends SRFI-28 to provide an additional
+- <tt>format</tt> escape code:</p>
+-
+- <blockquote>
+- <tt>~[n]@*</tt> - Causes a value-requiring escape code that
+- follows this code immediately to reference the [N]'th
+- optional value absolutely, rather than the next unconsumed
+- value. The referenced value is <i>not</i> consumed.
+- </blockquote>
+- This extension allows optional values to be positionally
+- referenced, so that message templates can be constructed that
+- can produce the proper word ordering for a language.
+-
+- <h3>Preparing Bundles</h3>
+- Before a bundle may be used by the Scheme system to retrieve
+- localized template messages, they must be made available to the
+- Scheme system. This SRFI specifies a way to portably
+- define the bundles, as well as store them in and retrieve them
+- from an unspecified system which may be provided by resources
+- outside the Scheme system.<br>
+-
+-
+- <p><b><a name="declare-bundle!"></a><tt>declare-bundle!</tt></b> <tt><i>bundle-specifier
+- association-list</i> -> undefined<br>
+- </tt></p>
+-
+- <blockquote>
+- Declares a new bundle named by the given bundle-specifier.
+- The contents of the bundle are defined by the provided
+- association list. The list contains associations
+- between Scheme symbols and the message templates (Scheme
+- strings) they name. If a bundle already exists with the
+- given name, it is overwritten with the newly declared
+- bundle.<br>
+- </blockquote>
+- <tt><a name="store-bundle"></a><b>store-bundle</b> <i>bundle-specifier</i> ->
+- boolean</tt><br>
+-
+-
+- <blockquote>
+- Attempts to store a bundle named by the given bundle
+- specifier, and previously made available using
+- <tt>declare-bundle!</tt> or <tt>load-bundle!</tt>, in an
+- unspecified mechanism that may be persistent across Scheme
+- system restarts. If successful, a non-false value is
+- returned. If unsuccessful, <tt>#f</tt> is returned.<br>
+- </blockquote>
+- <tt><a name="load-bundle!"></a><b>load-bundle!</b> <i>bundle-specifier</i> ->
+- boolean</tt><br>
+-
+-
+- <blockquote>
+- Attempts to retrieve a bundle from an unspecified mechanism
+- which stores bundles outside the Scheme system. If the
+- bundle was retrieved successfully, the function returns a
+- non-false value, and the bundle is immediately available to
+- the Scheme system. If the bundle could not be found or loaded
+- successfully, the function returns <tt>#f</tt>, and the
+- Scheme system's bundle registry remains unaffected.<br>
+- </blockquote>
+- A compliant Scheme system may choose not to provide any
+- external mechanism to store localized bundles. If it does
+- not, it must still provide implementations for
+- <tt>store-bundle</tt> and <tt>load-bundle!</tt>. In such a
+- case, both functions must return <tt>#f</tt> regardless of the
+- arguments given. Users of this SRFI should recognize that the
+- inability to load or store a localized bundle in an external
+- repository is <i>not</i> a fatal error.<br>
+-
+-
+- <h3>Retrieving Localized Message Templates</h3>
+-
+- <p><a name="localized-template"></a><b><tt>localized-template</tt></b> <i><tt>package-name
+- message-template-name</tt></i> <tt>-> <i>string or #f<br>
+- </i></tt></p>
+-
+- <blockquote>
+- Retrieves a localized message template for the given package
+- name and the given message template name (both symbols).
+- If no such message could be found, false (#f) is
+- returned.<br>
+- <br>
+- </blockquote>
+- After retrieving a template, the calling program can use
+- <tt>format</tt> to produce a string that can be displayed to
+- the user.<br>
+-
+-
+- <h2>Examples</h2>
+- The below example makes use of SRFI-29 to display simple,
+- localized messages. It also defines its bundles in such a
+- way that the Scheme system may store and retrieve the bundles
+- from a more efficient system catalog, if available.<br>
+-
+-<pre>
+-(let ((translations
+- '(((en) . ((time . "Its ~a, ~a.")
+- (goodbye . "Goodbye, ~a.")))
+- ((fr) . ((time . "~1@*~a, c'est ~a.")
+- (goodbye . "Au revoir, ~a."))))))
+- (for-each (lambda (translation)
+- (let ((bundle-name (cons 'hello-program (car translation))))
+- (if (not (load-bundle! bundle-name))
+- (begin
+- (declare-bundle! bundle-name (cdr translation))
+- (store-bundle! bundle-name)))))
+- translations))
+-
+-(define localized-message
+- (lambda (message-name . args)
+- (apply format (cons (localized-template 'hello-program
+- message-name)
+- args))))
+-
+-(let ((myname "Fred"))
+- (display (localized-message 'time "12:00" myname))
+- (display #\newline)
+-
+- (display (localized-message 'goodbye myname))
+- (display #\newline))
+-
+-;; Displays (English):
+-;; Its 12:00, Fred.
+-;; Goodbye, Fred.
+-;;
+-;; French:
+-;; Fred, c'est 12:00.
+-;; Au revoir, Fred.
+-</pre>
+-
+- <H1>Implementation</H1>
+-
+- <p>The implementation requires that the Scheme system provide a
+- definition for <tt>current-language</tt> and
+- <tt>current-country</tt> capable of distinguishing the correct
+- locale present during a Scheme session. The definitions of
+- those functions in the reference implementation are not capable
+- of that distinction. Their implementation is provided only so
+- that the following code can run in any R4RS scheme system.
+- <br>
+- </p>
+-
+- <p>In addition, the below implementation of a compliant
+- <tt>format</tt> requires SRFI-6 (Basic String Ports) and
+- SRFI-23 (Error reporting)</p>
+-<pre>
+-;; The association list in which bundles will be stored
+-(define *localization-bundles* '())
+-
+-;; The current-language and current-country functions provided
+-;; here must be rewritten for each Scheme system to default to the
+-;; actual locale of the session
+-(define current-language
+- (let ((current-language-value 'en))
+- (lambda args
+- (if (null? args)
+- current-language-value
+- (set! current-language-value (car args))))))
+-
+-(define current-country
+- (let ((current-country-value 'us))
+- (lambda args
+- (if (null? args)
+- current-country-value
+- (set! current-country-value (car args))))))
+-
+-;; The load-bundle! and store-bundle! both return #f in this
+-;; reference implementation. A compliant implementation need
+-;; not rewrite these procedures.
+-(define load-bundle!
+- (lambda (bundle-specifier)
+- #f))
+-
+-(define store-bundle!
+- (lambda (bundle-specifier)
+- #f))
+-
+-;; Declare a bundle of templates with a given bundle specifier
+-(define declare-bundle!
+- (letrec ((remove-old-bundle
+- (lambda (specifier bundle)
+- (cond ((null? bundle) '())
+- ((equal? (caar bundle) specifier)
+- (cdr bundle))
+- (else (cons (car bundle)
+- (remove-old-bundle specifier
+- (cdr bundle))))))))
+- (lambda (bundle-specifier bundle-assoc-list)
+- (set! *localization-bundles*
+- (cons (cons bundle-specifier bundle-assoc-list)
+- (remove-old-bundle bundle-specifier
+- *localization-bundles*))))))
+-
+-;;Retrieve a localized template given its package name and a template name
+-(define localized-template
+- (letrec ((rdc
+- (lambda (ls)
+- (if (null? (cdr ls))
+- '()
+- (cons (car ls) (rdc (cdr ls))))))
+- (find-bundle
+- (lambda (specifier template-name)
+- (cond ((assoc specifier *localization-bundles*) =>
+- (lambda (bundle) bundle))
+- ((null? specifier) #f)
+- (else (find-bundle (rdc specifier)
+- template-name))))))
+- (lambda (package-name template-name)
+- (let loop ((specifier (cons package-name
+- (list (current-language)
+- (current-country)))))
+- (and (not (null? specifier))
+- (let ((bundle (find-bundle specifier template-name)))
+- (and bundle
+- (cond ((assq template-name bundle) => cdr)
+- ((null? (cdr specifier)) #f)
+- (else (loop (rdc specifier)))))))))))
+-
+-;;An SRFI-28 and SRFI-29 compliant version of format. It requires
+-;;SRFI-23 for error reporting.
+-(define format
+- (lambda (format-string . objects)
+- (let ((buffer (open-output-string)))
+- (let loop ((format-list (string->list format-string))
+- (objects objects)
+- (object-override #f))
+- (cond ((null? format-list) (get-output-string buffer))
+- ((char=? (car format-list) #\~)
+- (cond ((null? (cdr format-list))
+- (error 'format "Incomplete escape sequence"))
+- ((char-numeric? (cadr format-list))
+- (let posloop ((fl (cddr format-list))
+- (pos (string->number
+- (string (cadr format-list)))))
+- (cond ((null? fl)
+- (error 'format "Incomplete escape sequence"))
+- ((and (eq? (car fl) '#\@)
+- (null? (cdr fl)))
+- (error 'format "Incomplete escape sequence"))
+- ((and (eq? (car fl) '#\@)
+- (eq? (cadr fl) '#\*))
+- (loop (cddr fl) objects (list-ref objects pos)))
+- (else
+- (posloop (cdr fl)
+- (+ (* 10 pos)
+- (string->number
+- (string (car fl)))))))))
+- (else
+- (case (cadr format-list)
+- ((#\a)
+- (cond (object-override
+- (begin
+- (display object-override buffer)
+- (loop (cddr format-list) objects #f)))
+- ((null? objects)
+- (error 'format "No value for escape sequence"))
+- (else
+- (begin
+- (display (car objects) buffer)
+- (loop (cddr format-list)
+- (cdr objects) #f)))))
+- ((#\s)
+- (cond (object-override
+- (begin
+- (display object-override buffer)
+- (loop (cddr format-list) objects #f)))
+- ((null? objects)
+- (error 'format "No value for escape sequence"))
+- (else
+- (begin
+- (write (car objects) buffer)
+- (loop (cddr format-list)
+- (cdr objects) #f)))))
+- ((#\%)
+- (if object-override
+- (error 'format "Escape sequence following positional override does not require a value"))
+- (display #\newline buffer)
+- (loop (cddr format-list) objects #f))
+- ((#\~)
+- (if object-override
+- (error 'format "Escape sequence following positional override does not require a value"))
+- (display #\~ buffer)
+- (loop (cddr format-list) objects #f))
+- (else
+- (error 'format "Unrecognized escape sequence"))))))
+- (else (display (car format-list) buffer)
+- (loop (cdr format-list) objects #f)))))))
+-
+-</pre>
+-
+- <H1>Copyright</H1>
+-
+- Copyright (C) Scott G. Miller (2002). All Rights Reserved.
+-
+- <p>This document and translations of it may be copied and
+- furnished to others, and derivative works that comment on or
+- otherwise explain it or assist in its implementation may be
+- prepared, copied, published and distributed, in whole or in
+- part, without restriction of any kind, provided that the above
+- copyright notice and this paragraph are included on all such
+- copies and derivative works. However, this document itself may
+- not be modified in any way, such as by removing the copyright
+- notice or references to the Scheme Request For Implementation
+- process or editors, except as needed for the purpose of
+- developing SRFIs in which case the procedures for copyrights
+- defined in the SRFI process must be followed, or as required to
+- translate it into languages other than English.</p>
+-
+- <p>The limited permissions granted above are perpetual and will
+- not be revoked by the authors or their successors or
+- assigns.</p>
+-
+- <p>This document and the information contained herein is
+- provided on an "AS IS" basis and THE AUTHOR AND THE SRFI
+- EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+- BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+- HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
+- OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
+- <hr>
+-
+- <address>
+- Editor: <a href="mailto:srfi-editors@srfi.schemers.org">David
+- Rush</a>
+- </address>
+-
+- <address>
+- Author: <a href="mailto:scgmille@freenetproject.org">Scott G.
+- Miller</a>
+- </address>
+- <!-- Created: Tue Sep 29 19:20:08 EDT 1998 -->
+- <!-- hhmts start -->Last modified: Mon Jun 17 12:00:08 Pacific
+- Daylight Time 2002 <!-- hhmts end --> <br>
+- </body>
+-</html>
+-
+diff -urN racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html
+--- racket-7.4-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 2019-08-03 21:32:26.000000000 -0400
++++ racket-7.4-remove-nonfree/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
+@@ -1,345 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
+-<html>
+-<head>
+- <title>SRFI 5: A compatible let form with signatures and rest arguments</title>
+-</head>
+-<body>
+-
+-<H1>Title</H1>
+-
+-SRFI-5: A compatible <code>let</code> form with signatures and rest arguments
+-
+-<H1>Author</H1>
+-
+-Andy Gaynor
+-
+-<H1>Status</H1>
+-
+-This SRFI is currently in ``final'' status. To see an explanation of each status that a SRFI can hold, see <A HREF="http://srfi.schemers.org/srfi-process.html">here</A>.
+-You can access the discussion on this SRFI via <A HREF="http://srfi.schemers.org/srfi-5/mail-archive/maillist.html">the archive of the mailing list</A>.
+-<P><UL>
+-<LI>Received: 1999/2/2
+-<LI>Draft: 1999/2/10-1999/04/12
+-<LI>Final: 1999/4/26
+-<LI>Revised reference implementation: 2003/01/27
+-</UL>
+-
+-<H1>Abstract</H1>
+-
+-The <i>named-let</i> incarnation of the <code>let</code> form has two slight
+-inconsistencies with the <code>define</code> form. As defined, the <code>let</code>
+-form makes no accommodation for rest arguments, an issue of functionality
+-and consistency. As defined, the <code>let</code> form does not accommodate
+-signature-style syntax, an issue of aesthetics and consistency. Both
+-issues are addressed here in a manner which is compatible with the traditional
+-<code>let</code> form but for minor extensions.
+-
+-<H1>Rationale</H1>
+-
+-<H2>Signature-style Syntax</H2>
+-
+-Consider the following two equivalent definitions:
+-
+-<p><pre>
+-(define fibonacci
+- (lambda (n i f0 f1)
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1)))))
+-
+-(define (fibonacci n i f0 f1)
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-</pre>
+-
+-Although there is a named-let analog for the former form, there is none
+-for the latter. To wit, suppose one wished to compute the 10th element
+-of the Fibonacci sequence using a named let:
+-
+-<p>
+-<pre>
+-(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-Values: 55
+-</pre>
+-
+-As it stands, one cannot equivalently write
+-
+-<p>
+-<pre>
+-(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-</pre>
+-
+-which is consistent with <code>define</code>'s signature-style form.
+-<p>Those that favor the signature style may prefer this extension.
+-In any case, it may be more appropriate to include all bound names within
+-the binding section. As presented, this straightforward extension
+-introduces no ambiguity or incompatibility with the existing definition
+-of let.
+-
+-<H2>Rest Arguments</H2>
+-
+-As it stands, one cannot write a named let with rest arguments, as in
+-
+-<p>
+-<pre>
+-(let (blast (port (current-output-port)) . (x (+ 1 2) 4 5))
+- (if (null? x)
+- 'just-a-silly-contrived-example
+- (begin
+- (write (car x) port)
+- (apply blast port (cdr x)))))
+-</pre>
+-
+-otherwise equivalent to
+-
+-<p>
+-<pre>
+-(letrec ((blast (lambda (port . x)
+- (if (null? x)
+- 'just-a-silly-contrived-example
+- (begin
+- (write (car x) port)
+- (apply blast port (cdr x)))))))
+- (blast (current-output-port) (+ 1 2) 4 5))
+-</pre>
+-
+-While this example is rather contrived, the functionality is not.
+-There are several times when the author has used this construct in practice.
+-Regardless, there is little reason to deny the <code>let</code> form access to
+-all the features of lambda functionality.
+-
+-<H2>Symbols in Binding Sections</H2>
+-
+-Both the features above rely upon the placement of symbols in <code>let</code>
+-binding lists (this statement is intentially simplistic). The only
+-other apparent use of such symbol placement is to tersely bind variables
+-to unspecified values. For example, one might desire to use
+-<code>(let (foo bar baz) ...)</code>
+-to bind <code>foo</code>, <code>bar</code>, and <code>baz</code> to
+-unspecified values.
+-
+-<p>This usage is considered less important in light of the rationales
+-presented above, and an alternate syntax is immediately apparent, as
+-in <code>(let ((foo) (bar) (baz)) ...)</code> This may even
+-be preferable, consistently parenthesizing normal binding clauses.
+-
+-<H1>Specification</H1>
+-
+-<H2>Syntax</H2>
+-
+-<p>
+-A formal specification of the syntax follows. Below, body, expression,
+-and identifier are free. Each instantiation of binding-name must be
+-unique.
+-</p>
+-
+-<p>
+-<pre>
+- let = "(" "let" let-bindings body ")"
+- expressions = nothing | expression expressions
+- let-bindings = let-name bindings
+- | "(" let-name "." bindings ")"
+- let-name = identifier
+- bindings = "(" ")"
+- | rest-binding
+- | "(" normal-bindings ["." rest-binding] ")"
+-normal-bindings = nothing
+- | normal-binding normal-bindings
+- normal-binding = "(" binding-name expression ")"
+- binding-name = identifier
+- rest-binding = "(" binding-name expressions ")"
+-</pre>
+-
+-<p>
+-For clarity and convenience, an informal specification follows.
+-</p>
+-
+-<ol>
+-<li><a name="unnamed">Unnamed</a>
+-
+-<p><pre>
+-(let ((<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-non-sig">
+-Named, non-signature-style, no rest argument</a>
+-
+-<p><pre>
+-(let <name> ((<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-sig">Named, signature-style, no rest argument</a>
+-
+-<p><pre>
+-(let (<name> (<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-non-sig-rest">Named, non-signature-style, rest argument</a>
+-
+-<p><pre>
+-(let <name> ((<parameter> <argument>)...
+-
+-. (<rest-parameter> <rest-argument>...))
+- <body>...)
+-</pre>
+-
+-<li><a name="named-sig-rest">Named, signature-style, rest argument</a>
+-
+-<p><pre>
+-(let (<name> (<parameter> <argument>)...
+-
+-. (<rest-parameter> <rest-argument>...))
+- <body>...)
+-</pre>
+-</li>
+-</ol>
+-
+-<H2>Semantics</H2>
+-
+-Let <code>$lambda</code> and <code>$letrec</code> be hygienic bindings for the <code>lambda</code>
+-and <code>letrec</code> forms, respectively.
+-
+-<ul>
+-<li>For informal syntax 1:
+-
+-<p><pre>
+-(($lambda (<parameter>...) <body>...) <argument>...)
+-</pre>
+-</li>
+-
+-<li>For informal syntaxes 2 and 3:
+-
+-<p>
+-<pre>
+-($letrec ((<name> ($lambda (<parameter>...) <body>...)))
+- (<name> <argument>...))
+-</pre>
+-</li>
+-
+-<li>For informal syntaxes 4 and 5:
+-
+-<p>
+-<pre>
+-($letrec ((<name> ($lambda (<parameter>...
+-
+-. <rest-parameter>) <body>...)))
+- (<name> <argument>... <rest-argument>...))
+-</pre>
+-</li>
+-</ul>
+-
+-<H1>Implementation</H1>
+-
+-Here is an implementation using <code>SYNTAX-RULES</code>.
+-
+-<p>
+-<pre>
+-;; Use your own standard let.
+-;; Or call a lambda.
+-;; (define-syntax standard-let
+-;;
+-;; (syntax-rules ()
+-;;
+-;; ((let ((var val) ...) body ...)
+-;; ((lambda (var ...) body ...) val ...))))
+-
+-(define-syntax let
+-
+- (syntax-rules ()
+-
+- ;; No bindings: use standard-let.
+- ((let () body ...)
+- (standard-let () body ...))
+- ;; Or call a lambda.
+- ;; ((lambda () body ...))
+-
+- ;; All standard bindings: use standard-let.
+- ((let ((var val) ...) body ...)
+- (standard-let ((var val) ...) body ...))
+- ;; Or call a lambda.
+- ;; ((lambda (var ...) body ...) val ...)
+-
+- ;; One standard binding: loop.
+- ;; The all-standard-bindings clause didn't match,
+- ;; so there must be a rest binding.
+- ((let ((var val) . bindings) body ...)
+- (let-loop #f bindings (var) (val) (body ...)))
+-
+- ;; Signature-style name: loop.
+- ((let (name binding ...) body ...)
+- (let-loop name (binding ...) () () (body ...)))
+-
+- ;; defun-style name: loop.
+- ((let name bindings body ...)
+- (let-loop name bindings () () (body ...)))))
+-
+-(define-syntax let-loop
+-
+- (syntax-rules ()
+-
+- ;; Standard binding: destructure and loop.
+- ((let-loop name ((var0 val0) binding ...) (var ... ) (val ... ) body)
+- (let-loop name ( binding ...) (var ... var0) (val ... val0) body))
+-
+- ;; Rest binding, no name: use standard-let, listing the rest values.
+- ;; Because of let's first clause, there is no "no bindings, no name" clause.
+- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
+- (standard-let ((var val) ... (rest-var (list rest-val ...))) . body))
+- ;; Or call a lambda with a rest parameter on all values.
+- ;; ((lambda (var ... . rest-var) . body) val ... rest-val ...))
+- ;; Or use one of several other reasonable alternatives.
+-
+- ;; No bindings, name: call a letrec'ed lambda.
+- ((let-loop name () (var ...) (val ...) body)
+- ((letrec ((name (lambda (var ...) . body)))
+- name)
+- val ...))
+-
+- ;; Rest binding, name: call a letrec'ed lambda.
+- ((let-loop name (rest-var rest-val ...) (var ...) (val ...) body)
+- ((letrec ((name (lambda (var ... . rest-var) . body)))
+- name)
+- val ... rest-val ...))))
+-</pre>
+-
+-
+-<H1>Copyright</H1>
+-
+-Copyright (C) Andy Gaynor (1999). All Rights Reserved.
+-<p>This document and translations of it may be copied and furnished to
+-others, and derivative works that comment on or otherwise explain it or
+-assist in its implementation may be prepared, copied, published and distributed,
+-in whole or in part, without restriction of any kind, provided that the
+-above copyright notice and this paragraph are included on all such copies
+-and derivative works. However, this document itself may not be modified
+-in any way, such as by removing the copyright notice or references to the
+-Scheme Request For Implementation process or editors, except as needed
+-for the purpose of developing SRFIs in which case the procedures for copyrights
+-defined in the SRFI process must be followed, or as required to translate
+-it into languages other than English.
+-<p>The limited permissions granted above are perpetual and will not be
+-revoked by the authors or their successors or assigns.
+-<p>This document and the information contained herein is provided on an
+-"AS IS" basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES,
+-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
+-USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+-WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+-
+- <hr>
+- <address>Editor: <a href="mailto:srfi-editors@srfi.schemers.org">Mike Sperber</a></address>
+-
+-</body>
+-</html>
diff --git a/racket.spec b/racket.spec
index c3d1235..7a76a0b 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
-Version: 7.0
-Release: 8%{?dist}
+Version: 7.4
+Release: 1%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -13,15 +13,12 @@ Source0: https://mirror.racket-lang.org/installers/%{version}/%{name}-%{v
# is safe, since the removed components are
# extra elements which nothing else in the
# package depends on.
-Patch0: racket-7.0-remove-nonfree.patch
+# Note: SRFI 5 was replaced with a FOSS implementation. Only
+# nonfree docs need to be removed by this patch now.
+Patch0: racket-7.4-remove-nonfree.patch
-# Update racket-doc/search to use https://docs.racket-lang.org
-# when no docs exist locally
-# https://github.com/racket/scribble/pull/164 (open)
-Patch1: racket-7.0-fix-doc-open-url.patch
-
-# Issue Building for s390x, armv7hl, and ppc64 in koji
-ExcludeArch: s390x %{arm} ppc64
+# Issue Building for armv7hl in koji
+ExcludeArch: %{arm} s390x
# To compile the program
BuildRequires: gcc
@@ -81,7 +78,14 @@ cd src
export CFLAGS=$(echo $CFLAGS | sed -e "s/-mfpmath=sse *//")
%endif
+# do not use generations on architectures
+# where it is broken
+# (this is currently a no-op, since arm and s390x are not enabled yet.
+# It is art of a fix that will land in a future release)
%configure \
+%ifarch %{arm} s390x
+ --disable-generations \
+%endif
--enable-pthread \
--enable-shared \
--enable-libffi \
@@ -244,6 +248,11 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Wed Aug 28 2019 David Benoit <dbenoit(a)redhat.com> - 7.4.1
+- Update package version
+- Remove doc-open-url patch (fixed upstream)
+- Update remove-nonfree patch
+
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.0-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
diff --git a/sources b/sources
index e43e6a3..433eb3e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (racket-7.0-src.tgz) = 98be3a7f0fbe38ae5febd2a9a3c81baede7dd7b3f3a9ed3ce68321389a68f74c6a8e24170013f7ca4fd725a79a3d5cfbda2e26f0f75163076e3b98f43094507f
+SHA512 (racket-7.4-src.tgz) = a5ef2ce3157bee3b12abcaeeb4c1ec3b41e78fb6ec04d399e3505a38234a73a098398bb762a99ffef7bc01301aef8db559cbd47c043365df8711fccdc3386df0
commit 562f367be1ad56b5be12c502fc13176e6260ed35
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 26 18:07:11 2019 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index b9d50b3..c3d1235 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.0
-Release: 7%{?dist}
+Release: 8%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -244,6 +244,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.0-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.0-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
commit 0974446b75718abdb6399502344df4f0397d092a
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Feb 2 10:58:40 2019 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/racket.spec b/racket.spec
index e75fb10..b9d50b3 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.0
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -244,6 +244,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.0-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
* Mon Sep 24 2018 David Benoit <dbenoit(a)redhat.com> 7.0-6
- Fix buildarch
commit 180703ce957846d830089f56519bbebb57bfc3d4
Author: dbenoit <dbenoit(a)redhat.com>
Date: Mon Sep 24 07:33:13 2018 -0400
fix buildarch
diff --git a/racket.spec b/racket.spec
index facbca7..e75fb10 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.0
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -244,6 +244,9 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Mon Sep 24 2018 David Benoit <dbenoit(a)redhat.com> 7.0-6
+- Fix buildarch
+
* Sat Sep 22 2018 David Benoit <dbenoit(a)redhat.com> 7.0-5
- Remove links.rktd scriptlets and instead make docs
a weak dependency
commit 524418d78d07709b85c64845aabc86e6f036712c
Author: dbenoit <dbenoit(a)redhat.com>
Date: Mon Sep 24 07:31:59 2018 -0400
fix buildarch
diff --git a/racket.spec b/racket.spec
index 361f5ae..facbca7 100644
--- a/racket.spec
+++ b/racket.spec
@@ -21,8 +21,7 @@ Patch0: racket-7.0-remove-nonfree.patch
Patch1: racket-7.0-fix-doc-open-url.patch
# Issue Building for s390x, armv7hl, and ppc64 in koji
-# ExcludeArch: s390x %{arm} ppc64
-ExclusiveArch: x86_64
+ExcludeArch: s390x %{arm} ppc64
# To compile the program
BuildRequires: gcc
commit a95a85d39de81c551bc7e2a6a739993313fc20c2
Author: dbenoit <dbenoit(a)redhat.com>
Date: Sun Sep 23 18:05:57 2018 -0400
revert links.rktd and make racket-doc a weak dependency
diff --git a/racket.spec b/racket.spec
index 6457aee..361f5ae 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -21,7 +21,8 @@ Patch0: racket-7.0-remove-nonfree.patch
Patch1: racket-7.0-fix-doc-open-url.patch
# Issue Building for s390x, armv7hl, and ppc64 in koji
-ExcludeArch: s390x %{arm} ppc64
+# ExcludeArch: s390x %{arm} ppc64
+ExclusiveArch: x86_64
# To compile the program
BuildRequires: gcc
@@ -56,6 +57,7 @@ BuildRequires: git
# Require the subpackages
Requires: racket-minimal%{?_isa} = %{version}-%{release}
Requires: racket-pkgs = %{version}-%{release}
+Recommends: racket-doc = %{version}-%{release}
%description
Racket is a general-purpose programming language as well as
@@ -63,109 +65,6 @@ the world's first ecosystem for developing and deploying new
languages. Make your dream language, or use one of the dozens
already available.
-# Since the full distribution of racket is built,
-# links.rktd does not contain the correct data
-# for racket-minimal.
-# The following entries must be removed from links.rktd
-# for distribution with racket minimal,
-# and added to links.rktd when racket-pkgs is installed
-%global pkg_links (\
- '(root "pkgs\\\/main-distribution")' '(root "pkgs\\\/2d")' \
- '("algol60" "pkgs\\\/algol60")' '(root "pkgs\\\/at-exp-lib")'\
- '(root "pkgs\\\/compatibility")' '("contract-profile" "pkgs\\\/contract-profile")'\
- '(root "pkgs\\\/compiler")' '(root "pkgs\\\/data")' '("datalog" "pkgs\\\/datalog")'\
- '(root "pkgs\\\/db")' '(root "pkgs\\\/deinprogramm")' '(root "pkgs\\\/draw")'\
- '(root "pkgs\\\/draw-doc")' '(root "pkgs\\\/draw-lib")' '(root "pkgs\\\/drracket")'\
- '(root "pkgs\\\/drracket-tool")' '("eopl" "pkgs\\\/eopl")' '(root "pkgs\\\/errortrace")'\
- '(root "pkgs\\\/future-visualizer")' '(root "pkgs\\\/future-visualizer-typed")'\
- '("frtime" "pkgs\\\/frtime")' '("games" "pkgs\\\/games")' '(root "pkgs\\\/gui")'\
- '(root "pkgs\\\/htdp")' '(root "pkgs\\\/html")' '("icons" "pkgs\\\/icons")'\
- '(root "pkgs\\\/images")' '("lazy" "pkgs\\\/lazy")' '(root "pkgs\\\/macro-debugger")'\
- '(root "pkgs\\\/macro-debugger-text-lib")' '("make" "pkgs\\\/make")'\
- '(root "pkgs\\\/math")' '("mysterx" "pkgs\\\/mysterx")' '("mzcom" "pkgs\\\/mzcom")'\
- '(root "pkgs\\\/mzscheme")' '(root "pkgs\\\/net")' '(root "pkgs\\\/net-cookies")'\
- '(root "pkgs\\\/optimization-coach")' '(root "pkgs\\\/option-contract")'\
- '(root "pkgs\\\/parser-tools")' '(root "pkgs\\\/pconvert-lib")'\
- '(root "pkgs\\\/pict")' '(root "pkgs\\\/pict-snip")' '(root "pkgs\\\/picturing-programs")'\
- '(root "pkgs\\\/plai")' '(root "pkgs\\\/planet")' '(root "pkgs\\\/plot")'\
- '("preprocessor" "pkgs\\\/preprocessor")' '(root "pkgs\\\/profile")' '(root "pkgs\\\/r5rs")'\
- '(root "pkgs\\\/r6rs")' '(root "pkgs\\\/racket-doc")' '(root "pkgs\\\/distributed-places")' \
- '("racket-cheat" "pkgs\\\/racket-cheat")' '(root "pkgs\\\/racket-index")'\
- '("racklog" "pkgs\\\/racklog")' '(root "pkgs\\\/rackunit")'\
- '("typed" "pkgs\\\/rackunit-typed")' '(root "pkgs\\\/readline")' '("realm" "pkgs\\\/realm")'\
- '(root "pkgs\\\/redex")' '(root "pkgs\\\/sandbox-lib")' '("sasl" "pkgs\\\/sasl")'\
- '("schemeunit" "pkgs\\\/schemeunit")' '(root "pkgs\\\/scribble")'\
- '(root "pkgs\\\/serialize-cstruct-lib")' '("sgl" "pkgs\\\/sgl")'\
- '("shell-completion" "pkgs\\\/shell-completion")' '("slatex" "pkgs\\\/slatex")'\
- '(root "pkgs\\\/slideshow")' '(root "pkgs\\\/snip")' '(root "pkgs\\\/srfi")'\
- '(root "pkgs\\\/string-constants")' '("swindle" "pkgs\\\/swindle")'\
- '(root "pkgs\\\/syntax-color")' '("trace" "pkgs\\\/trace")' '(root "pkgs\\\/typed-racket")'\
- '(root "pkgs\\\/typed-racket-more")' '(root "pkgs\\\/unix-socket")' \
- '(root "pkgs\\\/web-server")' '(root "pkgs\\\/wxme")' '(root "pkgs\\\/xrepl")'\
- '("ds-store" "pkgs\\\/ds-store")' '("2d" "pkgs\\\/2d-lib")' '("2d" "pkgs\\\/2d-doc")'\
- '(root "pkgs\\\/base")' '(root "pkgs\\\/compatibility-lib")' \
- '(root "pkgs\\\/drracket-plugin-lib")' '(root "pkgs\\\/errortrace-lib")'\
- '(root "pkgs\\\/gui-lib")' '(root "pkgs\\\/parser-tools-lib")' \
- '(root "pkgs\\\/string-constants-lib")' '(root "pkgs\\\/rackunit-lib")'\
- '(root "pkgs\\\/scribble-doc")' '(root "pkgs\\\/scribble-lib")'\
- '(root "pkgs\\\/drracket-tool-lib")' '(root "pkgs\\\/compatibility-doc")' \
- '(root "pkgs\\\/math-lib")' '("profile" "pkgs\\\/profile-lib")' '(root "pkgs\\\/compiler-lib")'\
- '(root "pkgs\\\/data-lib")' '(root "pkgs\\\/data-enumerate-lib")' '(root "pkgs\\\/data-doc")'\
- '(root "pkgs\\\/db-lib")' '(root "pkgs\\\/db-doc")' '(root "pkgs\\\/deinprogramm-signature")'\
- '(root "pkgs\\\/htdp-lib")' '(root "pkgs\\\/scheme-lib")' '(root "pkgs\\\/wxme-lib")'\
- '(root "pkgs\\\/htdp-doc")' '(root "pkgs\\\/gui-doc")' '(root "pkgs\\\/pict-doc")'\
- '(root "pkgs\\\/pict-lib")' '(root "pkgs\\\/planet-lib")' '(root "pkgs\\\/snip-lib")'\
- '(root "pkgs\\\/typed-racket-lib")' '(root "pkgs\\\/html-lib")' '(root "pkgs\\\/images-lib")'\
- '(root "pkgs\\\/net-lib")' '("mrlib" "pkgs\\\/tex-table")'\
- '(root "pkgs\\\/gui-pkg-manager-lib")' '(root "pkgs\\\/drracket-tool-doc")'\
- '(root "pkgs\\\/pict-snip-lib")' '(root "pkgs\\\/option-contract-lib")'\
- '(root "pkgs\\\/syntax-color-lib")' '(root "pkgs\\\/mzscheme-doc")' '(root "pkgs\\\/net-doc")'\
- '(root "pkgs\\\/planet-doc")' '(root "pkgs\\\/string-constants-doc")' \
- '(root "pkgs\\\/errortrace-doc")' '(root "pkgs\\\/profile-doc")' '(root "pkgs\\\/r5rs-doc")'\
- '(root "pkgs\\\/srfi-lite-lib")' '(root "pkgs\\\/srfi-lib")' '(root "pkgs\\\/html-doc")'\
- '(root "pkgs\\\/images-gui-lib")' '(root "pkgs\\\/images-doc")' '(root "pkgs\\\/eli-tester")'\
- '(root "pkgs\\\/class-iop-lib")' '(root "pkgs\\\/cext-lib")' '(root "pkgs\\\/math-doc")'\
- '(root "pkgs\\\/mzscheme-lib")' '(root "pkgs\\\/net-cookies-lib")' \
- '(root "pkgs\\\/net-cookies-doc")' '("syntax" "pkgs\\\/source-syntax")'\
- '(root "pkgs\\\/option-contract-doc")' '(root "pkgs\\\/parser-tools-doc")'\
- '(root "pkgs\\\/pict-snip-doc")' '("plai" "pkgs\\\/plai-doc")' '("plai" "pkgs\\\/plai-lib")'\
- '(root "pkgs\\\/plot-lib")' '(root "pkgs\\\/plot-gui-lib")'\
- '(root "pkgs\\\/plot-doc")' '(root "pkgs\\\/r5rs-lib")' '(root "pkgs\\\/r6rs-lib")' \
- '(root "pkgs\\\/r6rs-doc")' '(root "pkgs\\\/rackunit-doc")'\
- '(root "pkgs\\\/typed-racket-doc")' '(root "pkgs\\\/web-server-doc")'\
- '(root "pkgs\\\/slideshow-doc")' '(root "pkgs\\\/distributed-places-lib")'\
- '(root "pkgs\\\/distributed-places-doc")' '(root "pkgs\\\/slideshow-lib")'\
- '(root "pkgs\\\/rackunit-gui")' '(root "pkgs\\\/rackunit-plugin-lib")'\
- '(root "pkgs\\\/testing-util-lib")' '(root "pkgs\\\/readline-lib")'\
- '(root "pkgs\\\/readline-doc")' '(root "pkgs\\\/redex-doc")' '(root "pkgs\\\/redex-examples")'\
- '(root "pkgs\\\/redex-lib")' '(root "pkgs\\\/redex-gui-lib")' '("sasl" "pkgs\\\/sasl-lib")'\
- '("sasl" "pkgs\\\/sasl-doc")' '(root "pkgs\\\/slideshow-exe")' \
- '(root "pkgs\\\/slideshow-plugin")' '(root "pkgs\\\/srfi-doc")' \
- '(root "pkgs\\\/syntax-color-doc")' '(root "pkgs\\\/web-server-lib")' \
- '(root "pkgs\\\/unix-socket-lib")' '(root "pkgs\\\/unix-socket-doc")'\
- '(root "pkgs\\\/xrepl-lib")' '(root "pkgs\\\/xrepl-doc")'\
- '("ds-store" "pkgs\\\/ds-store-lib")' '("ds-store" "pkgs\\\/ds-store-doc")' \
- '(root "pkgs\\\/scribble-text-lib")' '(root "pkgs\\\/scribble-html-lib")'\
- '(root "pkgs\\\/zo-lib")' '(root "pkgs\\\/dynext-lib")'\
- '(root "pkgs\\\/plot-compat")' '(root "pkgs\\\/typed-racket-compatibility")'\
- '(root "pkgs\\\/redex-benchmark")' '(root "pkgs\\\/redex-pict-lib")')\
-
-# Remove the links from links.rktd
-%global remove_pkgs_links() \
-LOCAL_PKGS_LINKS=%pkg_links \
-for ((i = 0; i < ${#LOCAL_PKGS_LINKS[@]}; i++)); do \
- sed -i "s/${LOCAL_PKGS_LINKS[$i]}//" %1 \
-done \
-sed -i '/^\\s*$/d' %1 \
-
-# Add the links to links.rktd
-%global add_pkgs_links() \
-LOCAL_PKGS_LINKS=%pkg_links \
-for ((i = ${#LOCAL_PKGS_LINKS[@]} - 1; i >= 0; i--)); do \
- grep "${LOCAL_PKGS_LINKS[$i]}" %1 || \
- sed -i "s/(root \\\"pkgs\\\/racket-lib\\\")/(root \\\"pkgs\\\/racket-lib\\\")\\\n ${LOCAL_PKGS_LINKS[$i]}/" %1 \
-done
-
%prep
%autosetup -v -p1
@@ -236,8 +135,6 @@ chmod -x ${RPM_BUILD_ROOT}%{_libdir}/racket/starter-sh
%ldconfig_scriptlets
-%remove_pkgs_links %{buildroot}/%{_datadir}/racket/links.rktd
-
# Equivalent to upstream's minimal-racket release
%package minimal
Summary: A minimal Racket installation
@@ -265,10 +162,6 @@ Requires: racket-minimal = %{version}-%{release}
BuildArch: noarch
%description pkgs
Additional packages and libraries for Racket
-%post pkgs
- %add_pkgs_links %{_datadir}/racket/links.rktd
-%postun pkgs
- %remove_pkgs_links %{_datadir}/racket/links.rktd
# Development headers and links
%package devel
@@ -352,6 +245,10 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Sat Sep 22 2018 David Benoit <dbenoit(a)redhat.com> 7.0-5
+- Remove links.rktd scriptlets and instead make docs
+ a weak dependency
+
* Fri Sep 21 2018 David Benoit <dbenoit(a)redhat.com> 7.0-4
- Add scriptlets to handle updating links.rktd based on
whether racket-pkgs is installed
commit 144d15c30da60aef64c297ba8a2cf85f9e209c73
Author: dbenoit <dbenoit(a)redhat.com>
Date: Fri Sep 21 16:16:06 2018 -0400
update docs patch
diff --git a/racket-7.0-fix-doc-open-url.patch b/racket-7.0-fix-doc-open-url.patch
index 7c497f5..93f5f98 100644
--- a/racket-7.0-fix-doc-open-url.patch
+++ b/racket-7.0-fix-doc-open-url.patch
@@ -1,7 +1,14 @@
-diff -urN racket-6.12-wbsvr/share/pkgs/scribble-lib/help/search.rkt racket-6.12/share/pkgs/scribble-lib/help/search.rkt
---- racket-6.12-wbsvr/share/pkgs/scribble-lib/help/search.rkt 2018-03-19 17:14:56.017273013 -0400
-+++ racket-6.12/share/pkgs/scribble-lib/help/search.rkt 2018-03-19 17:15:37.839113929 -0400
-@@ -17,33 +17,38 @@
+diff -ruN racket-7.0/doc/racket-doc-installed racket-7.0.docfix/doc/racket-doc-installed
+--- racket-7.0/doc/racket-doc-installed 1969-12-31 19:00:00.000000000 -0500
++++ racket-7.0.docfix/doc/racket-doc-installed 2018-09-21 14:57:42.002194864 -0400
+@@ -0,0 +1,3 @@
++# do not modify this file
++# racket uses this file to determine whether
++# the racket-doc package is installed
+diff -ruN racket-7.0/share/pkgs/scribble-lib/help/search.rkt racket-7.0.docfix/share/pkgs/scribble-lib/help/search.rkt
+--- racket-7.0/share/pkgs/scribble-lib/help/search.rkt 2018-07-27 11:33:46.000000000 -0400
++++ racket-7.0.docfix/share/pkgs/scribble-lib/help/search.rkt 2018-09-21 15:25:16.110996675 -0400
+@@ -17,33 +17,39 @@
#:notify [notify void])
(define open-url (get-doc-open-url))
(cond
@@ -58,7 +65,8 @@ diff -urN racket-6.12-wbsvr/share/pkgs/scribble-lib/help/search.rkt racket-6.12/
+ (let* ([path (build-path (find-user-doc-dir) sub)]
+ [path (if (file-exists? path) path (build-path (find-doc-dir) sub))])
+ (notify path)
-+ (if (file-exists? path)
++ (if (and (file-exists? path)
++ (file-exists? (build-path (find-doc-dir) "racket-doc-installed")))
+ (send-url/file path #:fragment fragment #:query query)
+ (let ([part (lambda (pfx x) (if x (string-append pfx x) ""))])
+ (send-url (string-append
diff --git a/racket.spec b/racket.spec
index cc5e3d1..6457aee 100644
--- a/racket.spec
+++ b/racket.spec
@@ -356,6 +356,7 @@ A local installation of the Racket documentation system.
- Add scriptlets to handle updating links.rktd based on
whether racket-pkgs is installed
- fix owenership of docs dir
+- update docs patch
* Thu Sep 6 2018 David Benoit <dbenoit(a)redhat.com> 7.0-3
- use arm macro instead of armv7hl
commit 8f064904f24c93fc83fa5bcbbc0b42125a318cfe
Author: dbenoit <dbenoit(a)redhat.com>
Date: Fri Sep 21 12:52:01 2018 -0400
fix build arch
diff --git a/racket.spec b/racket.spec
index 5fa1ccc..cc5e3d1 100644
--- a/racket.spec
+++ b/racket.spec
@@ -21,8 +21,7 @@ Patch0: racket-7.0-remove-nonfree.patch
Patch1: racket-7.0-fix-doc-open-url.patch
# Issue Building for s390x, armv7hl, and ppc64 in koji
-#ExcludeArch: s390x %{arm} ppc64
-ExclusiveArch: x86_64
+ExcludeArch: s390x %{arm} ppc64
# To compile the program
BuildRequires: gcc
commit af6d1581024057e55a022dbbb5a09086e56f9419
Author: dbenoit <dbenoit(a)redhat.com>
Date: Fri Sep 21 12:50:20 2018 -0400
fix links.rktd scriptlets
diff --git a/racket.spec b/racket.spec
index 4cf399f..5fa1ccc 100644
--- a/racket.spec
+++ b/racket.spec
@@ -21,7 +21,8 @@ Patch0: racket-7.0-remove-nonfree.patch
Patch1: racket-7.0-fix-doc-open-url.patch
# Issue Building for s390x, armv7hl, and ppc64 in koji
-ExcludeArch: s390x %{arm} ppc64
+#ExcludeArch: s390x %{arm} ppc64
+ExclusiveArch: x86_64
# To compile the program
BuildRequires: gcc
@@ -70,100 +71,100 @@ already available.
# for distribution with racket minimal,
# and added to links.rktd when racket-pkgs is installed
%global pkg_links (\
- '(root "pkgs\\/main-distribution")' '(root "pkgs\\/2d")' \
- '("algol60" "pkgs\\/algol60")' '(root "pkgs\\/at-exp-lib")'\
- '(root "pkgs\\/compatibility")' '("contract-profile" "pkgs\\/contract-profile")'\
- '(root "pkgs\\/compiler")' '(root "pkgs\\/data")' '("datalog" "pkgs\\/datalog")'\
- '(root "pkgs\\/db")' '(root "pkgs\\/deinprogramm")' '(root "pkgs\\/draw")'\
- '(root "pkgs\\/draw-doc")' '(root "pkgs\\/draw-lib")' '(root "pkgs\\/drracket")'\
- '(root "pkgs\\/drracket-tool")' '("eopl" "pkgs\\/eopl")' '(root "pkgs\\/errortrace")'\
- '(root "pkgs\\/future-visualizer")' '(root "pkgs\\/future-visualizer-typed")'\
- '("frtime" "pkgs\\/frtime")' '("games" "pkgs\\/games")' '(root "pkgs\\/gui")'\
- '(root "pkgs\\/htdp")' '(root "pkgs\\/html")' '("icons" "pkgs\\/icons")'\
- '(root "pkgs\\/images")' '("lazy" "pkgs\\/lazy")' '(root "pkgs\\/macro-debugger")'\
- '(root "pkgs\\/macro-debugger-text-lib")' '("make" "pkgs\\/make")'\
- '(root "pkgs\\/math")' '("mysterx" "pkgs\\/mysterx")' '("mzcom" "pkgs\\/mzcom")'\
- '(root "pkgs\\/mzscheme")' '(root "pkgs\\/net")' '(root "pkgs\\/net-cookies")'\
- '(root "pkgs\\/optimization-coach")' '(root "pkgs\\/option-contract")'\
- '(root "pkgs\\/parser-tools")' '(root "pkgs\\/pconvert-lib")'\
- '(root "pkgs\\/pict")' '(root "pkgs\\/pict-snip")' '(root "pkgs\\/picturing-programs")'\
- '(root "pkgs\\/plai")' '(root "pkgs\\/planet")' '(root "pkgs\\/plot")'\
- '("preprocessor" "pkgs\\/preprocessor")' '(root "pkgs\\/profile")' '(root "pkgs\\/r5rs")'\
- '(root "pkgs\\/r6rs")' '(root "pkgs\\/racket-doc")' '(root "pkgs\\/distributed-places")' \
- '("racket-cheat" "pkgs\\/racket-cheat")' '(root "pkgs\\/racket-index")'\
- '("racklog" "pkgs\\/racklog")' '(root "pkgs\\/rackunit")'\
- '("typed" "pkgs\\/rackunit-typed")' '(root "pkgs\\/readline")' '("realm" "pkgs\\/realm")'\
- '(root "pkgs\\/redex")' '(root "pkgs\\/sandbox-lib")' '("sasl" "pkgs\\/sasl")'\
- '("schemeunit" "pkgs\\/schemeunit")' '(root "pkgs\\/scribble")'\
- '(root "pkgs\\/serialize-cstruct-lib")' '("sgl" "pkgs\\/sgl")'\
- '("shell-completion" "pkgs\\/shell-completion")' '("slatex" "pkgs\\/slatex")'\
- '(root "pkgs\\/slideshow")' '(root "pkgs\\/snip")' '(root "pkgs\\/srfi")'\
- '(root "pkgs\\/string-constants")' '("swindle" "pkgs\\/swindle")'\
- '(root "pkgs\\/syntax-color")' '("trace" "pkgs\\/trace")' '(root "pkgs\\/typed-racket")'\
- '(root "pkgs\\/typed-racket-more")' '(root "pkgs\\/unix-socket")' \
- '(root "pkgs\\/web-server")' '(root "pkgs\\/wxme")' '(root "pkgs\\/xrepl")'\
- '("ds-store" "pkgs\\/ds-store")' '("2d" "pkgs\\/2d-lib")' '("2d" "pkgs\\/2d-doc")'\
- '(root "pkgs\\/base")' '(root "pkgs\\/compatibility-lib")' \
- '(root "pkgs\\/drracket-plugin-lib")' '(root "pkgs\\/errortrace-lib")'\
- '(root "pkgs\\/gui-lib")' '(root "pkgs\\/parser-tools-lib")' \
- '(root "pkgs\\/string-constants-lib")' '(root "pkgs\\/rackunit-lib")'\
- '(root "pkgs\\/scribble-doc")' '(root "pkgs\\/scribble-lib")'\
- '(root "pkgs\\/drracket-tool-lib")' '(root "pkgs\\/compatibility-doc")' \
- '(root "pkgs\\/math-lib")' '("profile" "pkgs\\/profile-lib")' '(root "pkgs\\/compiler-lib")'\
- '(root "pkgs\\/data-lib")' '(root "pkgs\\/data-enumerate-lib")' '(root "pkgs\\/data-doc")'\
- '(root "pkgs\\/db-lib")' '(root "pkgs\\/db-doc")' '(root "pkgs\\/deinprogramm-signature")'\
- '(root "pkgs\\/htdp-lib")' '(root "pkgs\\/scheme-lib")' '(root "pkgs\\/wxme-lib")'\
- '(root "pkgs\\/htdp-doc")' '(root "pkgs\\/gui-doc")' '(root "pkgs\\/pict-doc")'\
- '(root "pkgs\\/pict-lib")' '(root "pkgs\\/planet-lib")' '(root "pkgs\\/snip-lib")'\
- '(root "pkgs\\/typed-racket-lib")' '(root "pkgs\\/html-lib")' '(root "pkgs\\/images-lib")'\
- '(root "pkgs\\/net-lib")' '("mrlib" "pkgs\\/tex-table")'\
- '(root "pkgs\\/gui-pkg-manager-lib")' '(root "pkgs\\/drracket-tool-doc")'\
- '(root "pkgs\\/pict-snip-lib")' '(root "pkgs\\/option-contract-lib")'\
- '(root "pkgs\\/syntax-color-lib")' '(root "pkgs\\/mzscheme-doc")' '(root "pkgs\\/net-doc")'\
- '(root "pkgs\\/planet-doc")' '(root "pkgs\\/string-constants-doc")' \
- '(root "pkgs\\/errortrace-doc")' '(root "pkgs\\/profile-doc")' '(root "pkgs\\/r5rs-doc")'\
- '(root "pkgs\\/srfi-lite-lib")' '(root "pkgs\\/srfi-lib")' '(root "pkgs\\/html-doc")'\
- '(root "pkgs\\/images-gui-lib")' '(root "pkgs\\/images-doc")' '(root "pkgs\\/eli-tester")'\
- '(root "pkgs\\/class-iop-lib")' '(root "pkgs\\/cext-lib")' '(root "pkgs\\/math-doc")'\
- '(root "pkgs\\/mzscheme-lib")' '(root "pkgs\\/net-cookies-lib")' \
- '(root "pkgs\\/net-cookies-doc")' '("syntax" "pkgs\\/source-syntax")'\
- '(root "pkgs\\/option-contract-doc")' '(root "pkgs\\/parser-tools-doc")'\
- '(root "pkgs\\/pict-snip-doc")' '("plai" "pkgs\\/plai-doc")' '("plai" "pkgs\\/plai-lib")'\
- '(root "pkgs\\/plot-lib")' '(root "pkgs\\/plot-gui-lib")'\
- '(root "pkgs\\/plot-doc")' '(root "pkgs\\/r5rs-lib")' '(root "pkgs\\/r6rs-lib")' \
- '(root "pkgs\\/r6rs-doc")' '(root "pkgs\\/rackunit-doc")'\
- '(root "pkgs\\/typed-racket-doc")' '(root "pkgs\\/web-server-doc")'\
- '(root "pkgs\\/slideshow-doc")' '(root "pkgs\\/distributed-places-lib")'\
- '(root "pkgs\\/distributed-places-doc")' '(root "pkgs\\/slideshow-lib")'\
- '(root "pkgs\\/rackunit-gui")' '(root "pkgs\\/rackunit-plugin-lib")'\
- '(root "pkgs\\/testing-util-lib")' '(root "pkgs\\/readline-lib")'\
- '(root "pkgs\\/readline-doc")' '(root "pkgs\\/redex-doc")' '(root "pkgs\\/redex-examples")'\
- '(root "pkgs\\/redex-lib")' '(root "pkgs\\/redex-gui-lib")' '("sasl" "pkgs\\/sasl-lib")'\
- '("sasl" "pkgs\\/sasl-doc")' '(root "pkgs\\/slideshow-exe")' \
- '(root "pkgs\\/slideshow-plugin")' '(root "pkgs\\/srfi-doc")' \
- '(root "pkgs\\/syntax-color-doc")' '(root "pkgs\\/web-server-lib")' \
- '(root "pkgs\\/unix-socket-lib")' '(root "pkgs\\/unix-socket-doc")'\
- '(root "pkgs\\/xrepl-lib")' '(root "pkgs\\/xrepl-doc")'\
- '("ds-store" "pkgs\\/ds-store-lib")' '("ds-store" "pkgs\\/ds-store-doc")' \
- '(root "pkgs\\/scribble-text-lib")' '(root "pkgs\\/scribble-html-lib")'\
- '(root "pkgs\\/zo-lib")' '(root "pkgs\\/dynext-lib")'\
- '(root "pkgs\\/plot-compat")' '(root "pkgs\\/typed-racket-compatibility")'\
- '(root "pkgs\\/redex-benchmark")' '(root "pkgs\\/redex-pict-lib")')\
+ '(root "pkgs\\\/main-distribution")' '(root "pkgs\\\/2d")' \
+ '("algol60" "pkgs\\\/algol60")' '(root "pkgs\\\/at-exp-lib")'\
+ '(root "pkgs\\\/compatibility")' '("contract-profile" "pkgs\\\/contract-profile")'\
+ '(root "pkgs\\\/compiler")' '(root "pkgs\\\/data")' '("datalog" "pkgs\\\/datalog")'\
+ '(root "pkgs\\\/db")' '(root "pkgs\\\/deinprogramm")' '(root "pkgs\\\/draw")'\
+ '(root "pkgs\\\/draw-doc")' '(root "pkgs\\\/draw-lib")' '(root "pkgs\\\/drracket")'\
+ '(root "pkgs\\\/drracket-tool")' '("eopl" "pkgs\\\/eopl")' '(root "pkgs\\\/errortrace")'\
+ '(root "pkgs\\\/future-visualizer")' '(root "pkgs\\\/future-visualizer-typed")'\
+ '("frtime" "pkgs\\\/frtime")' '("games" "pkgs\\\/games")' '(root "pkgs\\\/gui")'\
+ '(root "pkgs\\\/htdp")' '(root "pkgs\\\/html")' '("icons" "pkgs\\\/icons")'\
+ '(root "pkgs\\\/images")' '("lazy" "pkgs\\\/lazy")' '(root "pkgs\\\/macro-debugger")'\
+ '(root "pkgs\\\/macro-debugger-text-lib")' '("make" "pkgs\\\/make")'\
+ '(root "pkgs\\\/math")' '("mysterx" "pkgs\\\/mysterx")' '("mzcom" "pkgs\\\/mzcom")'\
+ '(root "pkgs\\\/mzscheme")' '(root "pkgs\\\/net")' '(root "pkgs\\\/net-cookies")'\
+ '(root "pkgs\\\/optimization-coach")' '(root "pkgs\\\/option-contract")'\
+ '(root "pkgs\\\/parser-tools")' '(root "pkgs\\\/pconvert-lib")'\
+ '(root "pkgs\\\/pict")' '(root "pkgs\\\/pict-snip")' '(root "pkgs\\\/picturing-programs")'\
+ '(root "pkgs\\\/plai")' '(root "pkgs\\\/planet")' '(root "pkgs\\\/plot")'\
+ '("preprocessor" "pkgs\\\/preprocessor")' '(root "pkgs\\\/profile")' '(root "pkgs\\\/r5rs")'\
+ '(root "pkgs\\\/r6rs")' '(root "pkgs\\\/racket-doc")' '(root "pkgs\\\/distributed-places")' \
+ '("racket-cheat" "pkgs\\\/racket-cheat")' '(root "pkgs\\\/racket-index")'\
+ '("racklog" "pkgs\\\/racklog")' '(root "pkgs\\\/rackunit")'\
+ '("typed" "pkgs\\\/rackunit-typed")' '(root "pkgs\\\/readline")' '("realm" "pkgs\\\/realm")'\
+ '(root "pkgs\\\/redex")' '(root "pkgs\\\/sandbox-lib")' '("sasl" "pkgs\\\/sasl")'\
+ '("schemeunit" "pkgs\\\/schemeunit")' '(root "pkgs\\\/scribble")'\
+ '(root "pkgs\\\/serialize-cstruct-lib")' '("sgl" "pkgs\\\/sgl")'\
+ '("shell-completion" "pkgs\\\/shell-completion")' '("slatex" "pkgs\\\/slatex")'\
+ '(root "pkgs\\\/slideshow")' '(root "pkgs\\\/snip")' '(root "pkgs\\\/srfi")'\
+ '(root "pkgs\\\/string-constants")' '("swindle" "pkgs\\\/swindle")'\
+ '(root "pkgs\\\/syntax-color")' '("trace" "pkgs\\\/trace")' '(root "pkgs\\\/typed-racket")'\
+ '(root "pkgs\\\/typed-racket-more")' '(root "pkgs\\\/unix-socket")' \
+ '(root "pkgs\\\/web-server")' '(root "pkgs\\\/wxme")' '(root "pkgs\\\/xrepl")'\
+ '("ds-store" "pkgs\\\/ds-store")' '("2d" "pkgs\\\/2d-lib")' '("2d" "pkgs\\\/2d-doc")'\
+ '(root "pkgs\\\/base")' '(root "pkgs\\\/compatibility-lib")' \
+ '(root "pkgs\\\/drracket-plugin-lib")' '(root "pkgs\\\/errortrace-lib")'\
+ '(root "pkgs\\\/gui-lib")' '(root "pkgs\\\/parser-tools-lib")' \
+ '(root "pkgs\\\/string-constants-lib")' '(root "pkgs\\\/rackunit-lib")'\
+ '(root "pkgs\\\/scribble-doc")' '(root "pkgs\\\/scribble-lib")'\
+ '(root "pkgs\\\/drracket-tool-lib")' '(root "pkgs\\\/compatibility-doc")' \
+ '(root "pkgs\\\/math-lib")' '("profile" "pkgs\\\/profile-lib")' '(root "pkgs\\\/compiler-lib")'\
+ '(root "pkgs\\\/data-lib")' '(root "pkgs\\\/data-enumerate-lib")' '(root "pkgs\\\/data-doc")'\
+ '(root "pkgs\\\/db-lib")' '(root "pkgs\\\/db-doc")' '(root "pkgs\\\/deinprogramm-signature")'\
+ '(root "pkgs\\\/htdp-lib")' '(root "pkgs\\\/scheme-lib")' '(root "pkgs\\\/wxme-lib")'\
+ '(root "pkgs\\\/htdp-doc")' '(root "pkgs\\\/gui-doc")' '(root "pkgs\\\/pict-doc")'\
+ '(root "pkgs\\\/pict-lib")' '(root "pkgs\\\/planet-lib")' '(root "pkgs\\\/snip-lib")'\
+ '(root "pkgs\\\/typed-racket-lib")' '(root "pkgs\\\/html-lib")' '(root "pkgs\\\/images-lib")'\
+ '(root "pkgs\\\/net-lib")' '("mrlib" "pkgs\\\/tex-table")'\
+ '(root "pkgs\\\/gui-pkg-manager-lib")' '(root "pkgs\\\/drracket-tool-doc")'\
+ '(root "pkgs\\\/pict-snip-lib")' '(root "pkgs\\\/option-contract-lib")'\
+ '(root "pkgs\\\/syntax-color-lib")' '(root "pkgs\\\/mzscheme-doc")' '(root "pkgs\\\/net-doc")'\
+ '(root "pkgs\\\/planet-doc")' '(root "pkgs\\\/string-constants-doc")' \
+ '(root "pkgs\\\/errortrace-doc")' '(root "pkgs\\\/profile-doc")' '(root "pkgs\\\/r5rs-doc")'\
+ '(root "pkgs\\\/srfi-lite-lib")' '(root "pkgs\\\/srfi-lib")' '(root "pkgs\\\/html-doc")'\
+ '(root "pkgs\\\/images-gui-lib")' '(root "pkgs\\\/images-doc")' '(root "pkgs\\\/eli-tester")'\
+ '(root "pkgs\\\/class-iop-lib")' '(root "pkgs\\\/cext-lib")' '(root "pkgs\\\/math-doc")'\
+ '(root "pkgs\\\/mzscheme-lib")' '(root "pkgs\\\/net-cookies-lib")' \
+ '(root "pkgs\\\/net-cookies-doc")' '("syntax" "pkgs\\\/source-syntax")'\
+ '(root "pkgs\\\/option-contract-doc")' '(root "pkgs\\\/parser-tools-doc")'\
+ '(root "pkgs\\\/pict-snip-doc")' '("plai" "pkgs\\\/plai-doc")' '("plai" "pkgs\\\/plai-lib")'\
+ '(root "pkgs\\\/plot-lib")' '(root "pkgs\\\/plot-gui-lib")'\
+ '(root "pkgs\\\/plot-doc")' '(root "pkgs\\\/r5rs-lib")' '(root "pkgs\\\/r6rs-lib")' \
+ '(root "pkgs\\\/r6rs-doc")' '(root "pkgs\\\/rackunit-doc")'\
+ '(root "pkgs\\\/typed-racket-doc")' '(root "pkgs\\\/web-server-doc")'\
+ '(root "pkgs\\\/slideshow-doc")' '(root "pkgs\\\/distributed-places-lib")'\
+ '(root "pkgs\\\/distributed-places-doc")' '(root "pkgs\\\/slideshow-lib")'\
+ '(root "pkgs\\\/rackunit-gui")' '(root "pkgs\\\/rackunit-plugin-lib")'\
+ '(root "pkgs\\\/testing-util-lib")' '(root "pkgs\\\/readline-lib")'\
+ '(root "pkgs\\\/readline-doc")' '(root "pkgs\\\/redex-doc")' '(root "pkgs\\\/redex-examples")'\
+ '(root "pkgs\\\/redex-lib")' '(root "pkgs\\\/redex-gui-lib")' '("sasl" "pkgs\\\/sasl-lib")'\
+ '("sasl" "pkgs\\\/sasl-doc")' '(root "pkgs\\\/slideshow-exe")' \
+ '(root "pkgs\\\/slideshow-plugin")' '(root "pkgs\\\/srfi-doc")' \
+ '(root "pkgs\\\/syntax-color-doc")' '(root "pkgs\\\/web-server-lib")' \
+ '(root "pkgs\\\/unix-socket-lib")' '(root "pkgs\\\/unix-socket-doc")'\
+ '(root "pkgs\\\/xrepl-lib")' '(root "pkgs\\\/xrepl-doc")'\
+ '("ds-store" "pkgs\\\/ds-store-lib")' '("ds-store" "pkgs\\\/ds-store-doc")' \
+ '(root "pkgs\\\/scribble-text-lib")' '(root "pkgs\\\/scribble-html-lib")'\
+ '(root "pkgs\\\/zo-lib")' '(root "pkgs\\\/dynext-lib")'\
+ '(root "pkgs\\\/plot-compat")' '(root "pkgs\\\/typed-racket-compatibility")'\
+ '(root "pkgs\\\/redex-benchmark")' '(root "pkgs\\\/redex-pict-lib")')\
# Remove the links from links.rktd
%global remove_pkgs_links() \
LOCAL_PKGS_LINKS=%pkg_links \
for ((i = 0; i < ${#LOCAL_PKGS_LINKS[@]}; i++)); do \
sed -i "s/${LOCAL_PKGS_LINKS[$i]}//" %1 \
- sed -i '/^\s*$/d' %1 \
-done
+done \
+sed -i '/^\\s*$/d' %1 \
# Add the links to links.rktd
%global add_pkgs_links() \
LOCAL_PKGS_LINKS=%pkg_links \
for ((i = ${#LOCAL_PKGS_LINKS[@]} - 1; i >= 0; i--)); do \
grep "${LOCAL_PKGS_LINKS[$i]}" %1 || \
- sed -i "s/(root \"pkgs\/racket-lib\")/(root \"pkgs\/racket-lib\")\n ${LOCAL_PKGS_LINKS[$i]}/" %1 \
+ sed -i "s/(root \\\"pkgs\\\/racket-lib\\\")/(root \\\"pkgs\\\/racket-lib\\\")\\\n ${LOCAL_PKGS_LINKS[$i]}/" %1 \
done
%prep
commit 9c7ebf998adc5d0da9a388c02a76adf8142c1a72
Author: dbenoit <dbenoit(a)redhat.com>
Date: Fri Sep 21 09:04:02 2018 -0400
fix raco docs issue via links.rktd
diff --git a/racket.spec b/racket.spec
index 7970c15..4cf399f 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -63,8 +63,113 @@ the world's first ecosystem for developing and deploying new
languages. Make your dream language, or use one of the dozens
already available.
+# Since the full distribution of racket is built,
+# links.rktd does not contain the correct data
+# for racket-minimal.
+# The following entries must be removed from links.rktd
+# for distribution with racket minimal,
+# and added to links.rktd when racket-pkgs is installed
+%global pkg_links (\
+ '(root "pkgs\\/main-distribution")' '(root "pkgs\\/2d")' \
+ '("algol60" "pkgs\\/algol60")' '(root "pkgs\\/at-exp-lib")'\
+ '(root "pkgs\\/compatibility")' '("contract-profile" "pkgs\\/contract-profile")'\
+ '(root "pkgs\\/compiler")' '(root "pkgs\\/data")' '("datalog" "pkgs\\/datalog")'\
+ '(root "pkgs\\/db")' '(root "pkgs\\/deinprogramm")' '(root "pkgs\\/draw")'\
+ '(root "pkgs\\/draw-doc")' '(root "pkgs\\/draw-lib")' '(root "pkgs\\/drracket")'\
+ '(root "pkgs\\/drracket-tool")' '("eopl" "pkgs\\/eopl")' '(root "pkgs\\/errortrace")'\
+ '(root "pkgs\\/future-visualizer")' '(root "pkgs\\/future-visualizer-typed")'\
+ '("frtime" "pkgs\\/frtime")' '("games" "pkgs\\/games")' '(root "pkgs\\/gui")'\
+ '(root "pkgs\\/htdp")' '(root "pkgs\\/html")' '("icons" "pkgs\\/icons")'\
+ '(root "pkgs\\/images")' '("lazy" "pkgs\\/lazy")' '(root "pkgs\\/macro-debugger")'\
+ '(root "pkgs\\/macro-debugger-text-lib")' '("make" "pkgs\\/make")'\
+ '(root "pkgs\\/math")' '("mysterx" "pkgs\\/mysterx")' '("mzcom" "pkgs\\/mzcom")'\
+ '(root "pkgs\\/mzscheme")' '(root "pkgs\\/net")' '(root "pkgs\\/net-cookies")'\
+ '(root "pkgs\\/optimization-coach")' '(root "pkgs\\/option-contract")'\
+ '(root "pkgs\\/parser-tools")' '(root "pkgs\\/pconvert-lib")'\
+ '(root "pkgs\\/pict")' '(root "pkgs\\/pict-snip")' '(root "pkgs\\/picturing-programs")'\
+ '(root "pkgs\\/plai")' '(root "pkgs\\/planet")' '(root "pkgs\\/plot")'\
+ '("preprocessor" "pkgs\\/preprocessor")' '(root "pkgs\\/profile")' '(root "pkgs\\/r5rs")'\
+ '(root "pkgs\\/r6rs")' '(root "pkgs\\/racket-doc")' '(root "pkgs\\/distributed-places")' \
+ '("racket-cheat" "pkgs\\/racket-cheat")' '(root "pkgs\\/racket-index")'\
+ '("racklog" "pkgs\\/racklog")' '(root "pkgs\\/rackunit")'\
+ '("typed" "pkgs\\/rackunit-typed")' '(root "pkgs\\/readline")' '("realm" "pkgs\\/realm")'\
+ '(root "pkgs\\/redex")' '(root "pkgs\\/sandbox-lib")' '("sasl" "pkgs\\/sasl")'\
+ '("schemeunit" "pkgs\\/schemeunit")' '(root "pkgs\\/scribble")'\
+ '(root "pkgs\\/serialize-cstruct-lib")' '("sgl" "pkgs\\/sgl")'\
+ '("shell-completion" "pkgs\\/shell-completion")' '("slatex" "pkgs\\/slatex")'\
+ '(root "pkgs\\/slideshow")' '(root "pkgs\\/snip")' '(root "pkgs\\/srfi")'\
+ '(root "pkgs\\/string-constants")' '("swindle" "pkgs\\/swindle")'\
+ '(root "pkgs\\/syntax-color")' '("trace" "pkgs\\/trace")' '(root "pkgs\\/typed-racket")'\
+ '(root "pkgs\\/typed-racket-more")' '(root "pkgs\\/unix-socket")' \
+ '(root "pkgs\\/web-server")' '(root "pkgs\\/wxme")' '(root "pkgs\\/xrepl")'\
+ '("ds-store" "pkgs\\/ds-store")' '("2d" "pkgs\\/2d-lib")' '("2d" "pkgs\\/2d-doc")'\
+ '(root "pkgs\\/base")' '(root "pkgs\\/compatibility-lib")' \
+ '(root "pkgs\\/drracket-plugin-lib")' '(root "pkgs\\/errortrace-lib")'\
+ '(root "pkgs\\/gui-lib")' '(root "pkgs\\/parser-tools-lib")' \
+ '(root "pkgs\\/string-constants-lib")' '(root "pkgs\\/rackunit-lib")'\
+ '(root "pkgs\\/scribble-doc")' '(root "pkgs\\/scribble-lib")'\
+ '(root "pkgs\\/drracket-tool-lib")' '(root "pkgs\\/compatibility-doc")' \
+ '(root "pkgs\\/math-lib")' '("profile" "pkgs\\/profile-lib")' '(root "pkgs\\/compiler-lib")'\
+ '(root "pkgs\\/data-lib")' '(root "pkgs\\/data-enumerate-lib")' '(root "pkgs\\/data-doc")'\
+ '(root "pkgs\\/db-lib")' '(root "pkgs\\/db-doc")' '(root "pkgs\\/deinprogramm-signature")'\
+ '(root "pkgs\\/htdp-lib")' '(root "pkgs\\/scheme-lib")' '(root "pkgs\\/wxme-lib")'\
+ '(root "pkgs\\/htdp-doc")' '(root "pkgs\\/gui-doc")' '(root "pkgs\\/pict-doc")'\
+ '(root "pkgs\\/pict-lib")' '(root "pkgs\\/planet-lib")' '(root "pkgs\\/snip-lib")'\
+ '(root "pkgs\\/typed-racket-lib")' '(root "pkgs\\/html-lib")' '(root "pkgs\\/images-lib")'\
+ '(root "pkgs\\/net-lib")' '("mrlib" "pkgs\\/tex-table")'\
+ '(root "pkgs\\/gui-pkg-manager-lib")' '(root "pkgs\\/drracket-tool-doc")'\
+ '(root "pkgs\\/pict-snip-lib")' '(root "pkgs\\/option-contract-lib")'\
+ '(root "pkgs\\/syntax-color-lib")' '(root "pkgs\\/mzscheme-doc")' '(root "pkgs\\/net-doc")'\
+ '(root "pkgs\\/planet-doc")' '(root "pkgs\\/string-constants-doc")' \
+ '(root "pkgs\\/errortrace-doc")' '(root "pkgs\\/profile-doc")' '(root "pkgs\\/r5rs-doc")'\
+ '(root "pkgs\\/srfi-lite-lib")' '(root "pkgs\\/srfi-lib")' '(root "pkgs\\/html-doc")'\
+ '(root "pkgs\\/images-gui-lib")' '(root "pkgs\\/images-doc")' '(root "pkgs\\/eli-tester")'\
+ '(root "pkgs\\/class-iop-lib")' '(root "pkgs\\/cext-lib")' '(root "pkgs\\/math-doc")'\
+ '(root "pkgs\\/mzscheme-lib")' '(root "pkgs\\/net-cookies-lib")' \
+ '(root "pkgs\\/net-cookies-doc")' '("syntax" "pkgs\\/source-syntax")'\
+ '(root "pkgs\\/option-contract-doc")' '(root "pkgs\\/parser-tools-doc")'\
+ '(root "pkgs\\/pict-snip-doc")' '("plai" "pkgs\\/plai-doc")' '("plai" "pkgs\\/plai-lib")'\
+ '(root "pkgs\\/plot-lib")' '(root "pkgs\\/plot-gui-lib")'\
+ '(root "pkgs\\/plot-doc")' '(root "pkgs\\/r5rs-lib")' '(root "pkgs\\/r6rs-lib")' \
+ '(root "pkgs\\/r6rs-doc")' '(root "pkgs\\/rackunit-doc")'\
+ '(root "pkgs\\/typed-racket-doc")' '(root "pkgs\\/web-server-doc")'\
+ '(root "pkgs\\/slideshow-doc")' '(root "pkgs\\/distributed-places-lib")'\
+ '(root "pkgs\\/distributed-places-doc")' '(root "pkgs\\/slideshow-lib")'\
+ '(root "pkgs\\/rackunit-gui")' '(root "pkgs\\/rackunit-plugin-lib")'\
+ '(root "pkgs\\/testing-util-lib")' '(root "pkgs\\/readline-lib")'\
+ '(root "pkgs\\/readline-doc")' '(root "pkgs\\/redex-doc")' '(root "pkgs\\/redex-examples")'\
+ '(root "pkgs\\/redex-lib")' '(root "pkgs\\/redex-gui-lib")' '("sasl" "pkgs\\/sasl-lib")'\
+ '("sasl" "pkgs\\/sasl-doc")' '(root "pkgs\\/slideshow-exe")' \
+ '(root "pkgs\\/slideshow-plugin")' '(root "pkgs\\/srfi-doc")' \
+ '(root "pkgs\\/syntax-color-doc")' '(root "pkgs\\/web-server-lib")' \
+ '(root "pkgs\\/unix-socket-lib")' '(root "pkgs\\/unix-socket-doc")'\
+ '(root "pkgs\\/xrepl-lib")' '(root "pkgs\\/xrepl-doc")'\
+ '("ds-store" "pkgs\\/ds-store-lib")' '("ds-store" "pkgs\\/ds-store-doc")' \
+ '(root "pkgs\\/scribble-text-lib")' '(root "pkgs\\/scribble-html-lib")'\
+ '(root "pkgs\\/zo-lib")' '(root "pkgs\\/dynext-lib")'\
+ '(root "pkgs\\/plot-compat")' '(root "pkgs\\/typed-racket-compatibility")'\
+ '(root "pkgs\\/redex-benchmark")' '(root "pkgs\\/redex-pict-lib")')\
+
+# Remove the links from links.rktd
+%global remove_pkgs_links() \
+LOCAL_PKGS_LINKS=%pkg_links \
+for ((i = 0; i < ${#LOCAL_PKGS_LINKS[@]}; i++)); do \
+ sed -i "s/${LOCAL_PKGS_LINKS[$i]}//" %1 \
+ sed -i '/^\s*$/d' %1 \
+done
+
+# Add the links to links.rktd
+%global add_pkgs_links() \
+LOCAL_PKGS_LINKS=%pkg_links \
+for ((i = ${#LOCAL_PKGS_LINKS[@]} - 1; i >= 0; i--)); do \
+ grep "${LOCAL_PKGS_LINKS[$i]}" %1 || \
+ sed -i "s/(root \"pkgs\/racket-lib\")/(root \"pkgs\/racket-lib\")\n ${LOCAL_PKGS_LINKS[$i]}/" %1 \
+done
+
%prep
+
%autosetup -v -p1
+
# Remove bundled libffi
rm -r src/foreign/libffi
@@ -131,6 +236,8 @@ chmod -x ${RPM_BUILD_ROOT}%{_libdir}/racket/starter-sh
%ldconfig_scriptlets
+%remove_pkgs_links %{buildroot}/%{_datadir}/racket/links.rktd
+
# Equivalent to upstream's minimal-racket release
%package minimal
Summary: A minimal Racket installation
@@ -158,6 +265,10 @@ Requires: racket-minimal = %{version}-%{release}
BuildArch: noarch
%description pkgs
Additional packages and libraries for Racket
+%post pkgs
+ %add_pkgs_links %{_datadir}/racket/links.rktd
+%postun pkgs
+ %remove_pkgs_links %{_datadir}/racket/links.rktd
# Development headers and links
%package devel
@@ -212,6 +323,7 @@ A local installation of the Racket documentation system.
%{_datadir}/man/man1/racket*
%{_datadir}/man/man1/raco*
%dir %{_datadir}/racket
+%dir %{_datadir}/doc/racket
%dir %{_sysconfdir}/racket/
%config %{_sysconfdir}/racket/config.rktd
%exclude %{_libdir}/libracket3m.so
@@ -240,6 +352,11 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Fri Sep 21 2018 David Benoit <dbenoit(a)redhat.com> 7.0-4
+- Add scriptlets to handle updating links.rktd based on
+ whether racket-pkgs is installed
+- fix owenership of docs dir
+
* Thu Sep 6 2018 David Benoit <dbenoit(a)redhat.com> 7.0-3
- use arm macro instead of armv7hl
commit 81883d64120b7a68bf0854ca908d0d438443755d
Author: dbenoit <dbenoit(a)redhat.com>
Date: Thu Sep 6 11:57:19 2018 -0400
fix changelog and release number
diff --git a/racket.spec b/racket.spec
index 485f2ae..7970c15 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -240,11 +240,13 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Thu Sep 6 2018 David Benoit <dbenoit(a)redhat.com> 7.0-3
+- use arm macro instead of armv7hl
+
* Wed Sep 5 2018 David Benoit <dbenoit(a)redhat.com> 7.0-2
- Disable SSE math on i686 until issue is fixed upstream
- Exclude ppc due to issue building Racket v7.0 and
arch being deprecated in next release
-- use arm macro instead of armv7hl
* Fri Aug 17 2018 David Benoit <dbenoit(a)redhat.com> 7.0-1
- Update sources to Racket v7.0
commit 6a0eaba3f29d2321c06289e9857cf26d87106e2d
Author: dbenoit <dbenoit(a)redhat.com>
Date: Thu Sep 6 11:55:00 2018 -0400
use arm macro
diff --git a/racket.spec b/racket.spec
index bb31acd..485f2ae 100644
--- a/racket.spec
+++ b/racket.spec
@@ -20,9 +20,8 @@ Patch0: racket-7.0-remove-nonfree.patch
# https://github.com/racket/scribble/pull/164 (open)
Patch1: racket-7.0-fix-doc-open-url.patch
-# Issue Building for s390x and armv7hl in koji
-#ExcludeArch: s390x armv7hl
-ExcludeArch: s390x armv7hl ppc64
+# Issue Building for s390x, armv7hl, and ppc64 in koji
+ExcludeArch: s390x %{arm} ppc64
# To compile the program
BuildRequires: gcc
@@ -245,6 +244,7 @@ A local installation of the Racket documentation system.
- Disable SSE math on i686 until issue is fixed upstream
- Exclude ppc due to issue building Racket v7.0 and
arch being deprecated in next release
+- use arm macro instead of armv7hl
* Fri Aug 17 2018 David Benoit <dbenoit(a)redhat.com> 7.0-1
- Update sources to Racket v7.0
commit b8569a44d31acfcec836302dff9ae178d3957c0b
Author: dbenoit <dbenoit(a)redhat.com>
Date: Wed Sep 5 15:37:42 2018 -0400
fix i686 and remove ppc64
diff --git a/racket.spec b/racket.spec
index 5fb06c9..bb31acd 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,6 +1,6 @@
Name: racket
Version: 7.0
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
@@ -21,7 +21,8 @@ Patch0: racket-7.0-remove-nonfree.patch
Patch1: racket-7.0-fix-doc-open-url.patch
# Issue Building for s390x and armv7hl in koji
-ExcludeArch: s390x armv7hl
+#ExcludeArch: s390x armv7hl
+ExcludeArch: s390x armv7hl ppc64
# To compile the program
BuildRequires: gcc
@@ -70,11 +71,20 @@ rm -r src/foreign/libffi
%build
cd src
+
+# Disable SSE on i686 until fixed upstream
+# https://github.com/racket/racket/issues/2245
+%ifarch %{ix86}
+ %set_build_flags
+ export CFLAGS=$(echo $CFLAGS | sed -e "s/-mfpmath=sse *//")
+%endif
+
%configure \
--enable-pthread \
--enable-shared \
--enable-libffi \
--disable-strip
+
%make_build
%install
@@ -231,7 +241,13 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
-* Fri Aug 3 2018 David Benoit <dbenoit(a)redhat.com> 7.0-1
+* Wed Sep 5 2018 David Benoit <dbenoit(a)redhat.com> 7.0-2
+- Disable SSE math on i686 until issue is fixed upstream
+- Exclude ppc due to issue building Racket v7.0 and
+ arch being deprecated in next release
+
+* Fri Aug 17 2018 David Benoit <dbenoit(a)redhat.com> 7.0-1
+- Update sources to Racket v7.0
- Remove 6.12 patches and add update remove nonfree
srfi patch to 7.0
commit ee22cb0e92daba659fd9d9fd4855d952e21cc53f
Author: dbenoit <dbenoit(a)redhat.com>
Date: Fri Aug 31 15:39:51 2018 -0400
update package to v7.0
diff --git a/.gitignore b/.gitignore
index d013960..4fd1ad5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-/racket-6.12-src.tgz
+/racket-7.0-src.tgz
diff --git a/racket-6.12-fix-rpaths.patch b/racket-6.12-fix-rpaths.patch
deleted file mode 100644
index f76730e..0000000
--- a/racket-6.12-fix-rpaths.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -urN racket-6.12-f/collects/racket/runtime-path.rkt racket-6.12/collects/racket/runtime-path.rkt
---- racket-6.12-f/collects/racket/runtime-path.rkt 2018-02-06 16:04:29.969878308 -0500
-+++ racket-6.12/collects/racket/runtime-path.rkt 2018-02-06 16:07:10.549176282 -0500
-@@ -186,7 +186,8 @@
- (path-of
- #,(datum->syntax
- #'orig-stx
-- `(,#'this-expression-source-file))))
-+ `(,#'this-expression-source-file)
-+ #'orig-stx)))
- #'void)])
- (apply to-values (resolve-paths (#%variable-reference)
- get-dir
diff --git a/racket-6.12-fix-webserver-rpaths.patch b/racket-6.12-fix-webserver-rpaths.patch
deleted file mode 100644
index 78614cf..0000000
--- a/racket-6.12-fix-webserver-rpaths.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff -urN racket-6.12-rp/share/pkgs/web-server-lib/web-server/formlets/lib.rkt racket-6.12-wbsvr/share/pkgs/web-server-lib/web-server/formlets/lib.rkt
---- racket-6.12-rp/share/pkgs/web-server-lib/web-server/formlets/lib.rkt 2018-02-22 18:42:06.131455756 -0500
-+++ racket-6.12-wbsvr/share/pkgs/web-server-lib/web-server/formlets/lib.rkt 2018-03-20 15:07:09.666222028 -0400
-@@ -7,6 +7,7 @@
- racket/function
- racket/serialize
- syntax/location
-+ setup/collects
- (for-syntax racket/base
- syntax/parse))
-
-@@ -70,20 +71,20 @@
- #:range-contracts (map (curry coerce-contract 'formlet/c)
- contracts)))]))
- (define quote-this-module-path
-- (quote-module-path))
-+ (path->collects-relative (quote-module-path)))
- (define-syntax formlet/c
- (syntax-parser
- [(_ range ...)
- #:declare range (expr/c #'contract?
- #:name "range contract argument")
- #'(formlet/c** (-> listof-binding
-- (values (coerce-contract 'formlet/c range.c) ...)))]
-+ (values (coerce-contract 'formlet/c range #;.c) ...)))]
- [name:id
- #`(contract
- (-> contract? (... ...) contract?)
- dynamic-formlet/c
- quote-this-module-path
-- (quote-module-path)
-+ (path->collects-relative (quote-module-path))
- "formlet/c"
- #'name)]))
-
diff --git a/racket-6.12-update-srfi.patch b/racket-6.12-update-srfi.patch
deleted file mode 100644
index 1894e32..0000000
--- a/racket-6.12-update-srfi.patch
+++ /dev/null
@@ -1,4369 +0,0 @@
-diff -urN racket-6.12-orig/share/links.rktd racket-6.12/share/links.rktd
---- racket-6.12-orig/share/links.rktd 2018-01-26 16:12:13.000000000 -0500
-+++ racket-6.12/share/links.rktd 2018-01-31 12:22:57.600504036 -0500
-@@ -133,6 +133,7 @@
- (root "pkgs/r5rs-doc")
- (root "pkgs/srfi-lite-lib")
- (root "pkgs/srfi-lib")
-+ (root "pkgs/srfi-lib-nonfree")
- (root "pkgs/html-doc")
- (root "pkgs/images-gui-lib")
- (root "pkgs/images-doc")
-@@ -176,6 +177,7 @@
- (root "pkgs/slideshow-exe")
- (root "pkgs/slideshow-plugin")
- (root "pkgs/srfi-doc")
-+ (root "pkgs/srfi-doc-nonfree")
- (root "pkgs/syntax-color-doc")
- (root "pkgs/web-server-lib")
- (root "pkgs/unix-socket-lib")
-diff -urN racket-6.12-orig/share/pkgs/srfi/info.rkt racket-6.12/share/pkgs/srfi/info.rkt
---- racket-6.12-orig/share/pkgs/srfi/info.rkt 2018-01-26 16:10:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi/info.rkt 2018-01-31 12:22:58.139502019 -0500
-@@ -1 +1,16 @@
--(module info setup/infotab (#%module-begin (define package-content-state (quote (built "6.12"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc"))) (define implies (quote ("srfi-lib" "srfi-doc"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-+#lang info
-+
-+(define collection 'multi)
-+
-+(define deps '("srfi-lib"
-+ "srfi-lib-nonfree"
-+ "srfi-doc"
-+ "srfi-doc-nonfree"))
-+(define implies '("srfi-lib"
-+ "srfi-lib-nonfree"
-+ "srfi-doc"
-+ "srfi-foc-nonfree"))
-+
-+(define pkg-desc "Legacy SRFI (Scheme) libraries")
-+
-+(define pkg-authors '(mflatt noel chongkai jay))
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc/info.rkt racket-6.12/share/pkgs/srfi-doc/info.rkt
---- racket-6.12-orig/share/pkgs/srfi-doc/info.rkt 2018-01-26 16:10:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc/info.rkt 2018-01-31 12:22:58.139502019 -0500
-@@ -1 +1,24 @@
--(module info setup/infotab (#%module-begin (define package-content-state (quote (built "6.12"))) (define collection (quote multi)) (define build-deps (quote ("mzscheme-doc" "scheme-lib" "base" "scribble-lib" "srfi-lib" "racket-doc" "r5rs-doc" "r6rs-doc" "compatibility-lib"))) (define update-implies (quote ("srfi-lib"))) (define pkg-desc "documentation part of \"srfi\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-+#lang info
-+
-+(define collection 'multi)
-+
-+(define build-deps '("mzscheme-doc"
-+ "scheme-lib"
-+ "base"
-+ "scribble-lib"
-+ "srfi-lib"
-+ "racket-doc"
-+ "r5rs-doc"
-+ "r6rs-doc"
-+ "compatibility-lib"))
-+
-+(define deps '("scheme-lib"
-+ "base"
-+ "scribble-lib"
-+ "compatibility-lib"))
-+
-+(define update-implies '("srfi-lib"))
-+
-+(define pkg-desc "documentation part of \"srfi\"")
-+
-+(define pkg-authors '(mflatt noel chongkai jay))
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi.scrbl racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi.scrbl
---- racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi.scrbl 2018-01-26 15:34:52.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi.scrbl 2018-01-31 12:22:58.144502000 -0500
-@@ -1,5 +1,6 @@
- #lang scribble/doc
--@(require scribble/manual
-+@(require srfi/scribblings/util
-+ scribble/manual
- scribble/eval
- scriblib/render-cond
- scribble/core
-@@ -8,54 +9,6 @@
- (for-label scheme/base
- racket/stream))
-
--@(define-syntax (srfi stx)
-- (syntax-case stx ()
-- [(_ num #:subdir subdir? . title)
-- (with-syntax ([srfi/n (string->symbol (format "srfi/~a" (syntax-e #'num)))])
-- #'(begin
-- (section #:tag (format "srfi-~a" num)
-- #:style 'unnumbered
-- (format "SRFI ~a: " num)
-- . title)
-- (defmodule srfi/n)
-- "Original specification: "
-- (let* ([label (format "SRFI ~a" num)]
-- [sub (if subdir? (format "srfi-~a/" num) "")]
-- [url (λ (b) (format "~a/srfi-std/~asrfi-~a.html" b sub num))])
-- (cond-element
-- [(or latex text) @link[(url "http://docs.racket-lang.org") label]]
-- [else @link[(url ".") label]]))))]
-- [(_ num . title) #'(srfi num #:subdir #f . title)]))
--
--@;{ The `lst' argument is a list of
-- (list sym syntactic-form? html-anchor) }
--@(define (redirect n lst #:subdir [subdir? #f])
-- (let ([file (if subdir?
-- (format "srfi-~a/srfi-~a.html" n n)
-- (format "srfi-~a.html" n))]
-- [mod-path (string->symbol (format "srfi/~a" n))])
-- (make-binding-redirect-elements mod-path
-- (map (lambda (b)
-- (list (car b) (cadr b)
-- (build-path "srfi-std" file)
-- (caddr b)))
-- lst))))
--
--@(define in-core
-- (case-lambda
-- [() (in-core ".")]
-- [(k) @elem{This SRFI's bindings are also available in
-- @racketmodname[racket/base]@|k|}]))
--
--@(begin
-- (define-syntax-rule (def-mz mz-if)
-- (begin
-- (require (for-label mzscheme))
-- (define mz-if (racket if))))
-- (def-mz mz-if))
--
--@(define srfi-std (style #f (list (install-resource "srfi-std"))))
--
- @; ----------------------------------------------------------------------
-
- @title{SRFIs: Libraries}
-@@ -245,14 +198,6 @@
-
- @; ----------------------------------------
-
--@srfi[5]{A compatible let form with signatures and rest arguments}
--
--@redirect[5 '(
-- (let #t "unnamed")
--)]
--
--@; ----------------------------------------
--
- @srfi[6]{Basic String Ports}
-
- @redirect[6 '(
-@@ -671,20 +616,6 @@
-
- @; ----------------------------------------
-
--@srfi[29]{Localization}
--
--@redirect[29 '(
-- (current-language #f "current-language")
-- (current-country #f "current-country")
-- (current-locale-details #f "current-locale-details")
-- (declare-bundle! #f "declare-bundle!")
-- (store-bundle #f "store-bundle")
-- (load-bundle! #f "load-bundle!")
-- (localized-template #f "localized-template")
--)]
--
--@; ----------------------------------------
--
- @srfi[30]{Nested Multi-line Comments}
-
- This SRFI's syntax is part of Racket's default reader.
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-29.html racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-29.html
---- racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-29.html 2018-01-26 15:34:52.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
-@@ -1,507 +0,0 @@
--<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
--<html>
-- <head>
-- <meta name="generator" content="HTML Tidy, see www.w3.org">
-- <title>SRFI 29: Localization</title>
-- <meta name="author" content="Scott G. Miller">
-- <meta name="description" content="Localization">
-- </head>
-- <body>
-- <H1>Title</H1>
--
-- SRFI 29: Localization
--
-- <H1>Author</H1>
--
-- Scott G. Miller
--
-- <H1>Abstract</H1>
--
-- This document specifies an interface to retrieving and
-- displaying locale sensitive messages. A Scheme program can
-- register one or more translations of templated messages, and
-- then write Scheme code that can transparently retrieve the
-- appropriate message for the locale under which the Scheme
-- system is running. <br>
--
--
-- <H1>Rationale</H1>
--
-- <p>As any programmer that has ever had to deal with making his
-- or her code readable in more than one locale, the process of
-- sufficiently abstracting program messages from their
-- presentation to the user is non-trivial without help from the
-- programming language. Most modern programming language
-- libraries do provide some mechanism for performing this
-- separation.</p>
--
-- <p>A portable API that allows a piece of code to run without
-- modification in different countries and under different
-- languages is a must for any non-trivial software project.
-- The interface should separate the logic of a program from
-- the myriad of translations that may be necessary.</p>
--
-- <p>The interface described in this document provides such
-- functionality. The underlying implementation is also allowed to
-- use whatever datastructures it likes to provide access to the
-- translations in the most efficient manner possible. In
-- addition, the implementation is provided with standardized
-- functions that programs will use for accessing an external,
-- unspecified repository of translations.</p>
--
-- <p>This interface <i>does not</i> cover all aspects of
-- localization, including support for non-latin characters,
-- number and date formatting, etc. Such functionality is the
-- scope of a future SRFI that may extend this one.</p>
--
-- <H1>Dependencies</H1>
--
-- An SRFI-29 conformant implementation must also implement
-- SRFI-28, Basic Format Strings. Message templates are strings
-- that must be processed by the <tt>format</tt> function
-- specified in that SRFI.
--
-- <H1>Specification</H1>
--
-- <h3>Message Bundles</h3>
--
-- <p>A Message Bundle is a set of message templates and their
-- identifying keys. Each bundle contains one or more such
-- key/value pairs. The bundle itself is associated with a
-- <i>bundle specifier</i> which uniquely identifies the
-- bundle.</p>
--
-- <h3>Bundle Specifiers</h3>
--
-- <p>A Bundle Specifier is a Scheme list that describes, in order
-- of importance, the package and locale of a message bundle.
-- In most cases, a locale specifier will have between one
-- and three elements. The first element is a symbol denoting the
-- package for which this bundle applies. The second and third
-- elements denote a <i>locale</i>. The second element (first
-- element of the locale) if present, is the two letter, ISO 639-1
-- language code for the bundle. The third element, if present, is
-- a two letter ISO 3166-1 country code. In some cases, a
-- fourth element may be present, specifying the encoding used for
-- the bundle. All bundle specifier elements are Scheme
-- symbols.</p>
--
-- <p>If only one translation is provided, it should be designated
-- only by a package name, for example <tt>(mathlib)</tt>. This
-- translation is called the <i>default</i> translation.</p>
--
-- <h3>Bundle Searching</h3>
--
-- <p>When a message template is retrieved from a bundle, the
-- Scheme implementation will provide the locale under which the
-- system is currently running. When the template is retrieved,
-- the package name will be specified. The Scheme system should
-- construct a Bundle Specifier from the provided package name and
-- the active locale. For example, when retrieving a message
-- template for French Canadian, in the <tt>mathlib</tt> package,
-- the bundle specifier '<tt>(mathlib fr ca)</tt>' is used. A
-- program may also retrieve the elements of the current locale
-- using the no-argument procedures:</p>
--
-- <p><b><a name="current-language"></a><tt>current-language</tt></b> <tt>->
-- <i>symbol</i></tt><br>
-- <tt><b>current-language</b> <i>symbol</i> ->
-- undefined</tt><br>
-- </p>
--
-- <blockquote>
-- When given no arguments, returns the current ISO 639-1
-- language code as a symbol. If provided with an
-- argument, the current language is set to that named by the
-- symbol for the currently executing Scheme thread (or for the
-- entire Scheme system if such a distinction is not possible).
--
-- </blockquote>
--
-- <p><b><a name="current-country"></a><tt>current-country</tt></b> <tt>->
-- <i>symbol</i></tt><br>
-- <tt><b>current-country</b> <i>symbol</i> ->
-- undefined</tt><br>
-- </p>
--
-- <blockquote>
-- returns the current ISO 3166-1 country code as a symbol.
-- If provided with an argument, the current country is
-- set to that named by the symbol for the currently executing
-- Scheme thread (or for the entire Scheme system if such a
-- distinction is not possible).
-- </blockquote>
--
-- <p><b><a name="current-locale-details"></a><tt>current-locale-details</tt></b> <tt>-> <i>list of
-- symbol</i></tt>s<br>
-- <tt><b>current-locale-details</b> <i>list-of-symbols</i> ->
-- undefined</tt><br>
-- </p>
--
-- <blockquote>
-- Returns a list of additional locale details as a list of
-- symbols. This list may contain information about
-- encodings or other more specific information. If
-- provided with an argument, the current locale details are set
-- to those given in the currently executing Scheme thread (or
-- for the entire Scheme system if such a distinction is not
-- possible).
-- </blockquote>
--
-- <p>The Scheme System should first check for a bundle with the
-- exact name provided. If no such bundle is found, the last
-- element from the list is removed and a search is tried for a
-- bundle with that name. If no bundle is then found, the list is
-- shortened by removing the last element again. If no message is
-- found and the bundle specifier is now the empty list, an error
-- should be raised.</p>
--
-- <p>The reason for this search order is to provide the most
-- locale sensitive template possible, but to fall back on more
-- general templates if a translation has not yet been provided
-- for the given locale.</p>
--
-- <h3>Message Templates</h3>
--
-- <p>A message template is a localized message that may or may
-- not contain one of a number of formatting codes. A message
-- template is a Scheme string. The string is of a form that can
-- be processed by the <tt>format</tt> procedure found in many
-- Scheme systems and formally specified in SRFI-28 (Basic Format
-- Strings).</p>
--
-- <p>This SRFI also extends SRFI-28 to provide an additional
-- <tt>format</tt> escape code:</p>
--
-- <blockquote>
-- <tt>~[n]@*</tt> - Causes a value-requiring escape code that
-- follows this code immediately to reference the [N]'th
-- optional value absolutely, rather than the next unconsumed
-- value. The referenced value is <i>not</i> consumed.
-- </blockquote>
-- This extension allows optional values to be positionally
-- referenced, so that message templates can be constructed that
-- can produce the proper word ordering for a language.
--
-- <h3>Preparing Bundles</h3>
-- Before a bundle may be used by the Scheme system to retrieve
-- localized template messages, they must be made available to the
-- Scheme system. This SRFI specifies a way to portably
-- define the bundles, as well as store them in and retrieve them
-- from an unspecified system which may be provided by resources
-- outside the Scheme system.<br>
--
--
-- <p><b><a name="declare-bundle!"></a><tt>declare-bundle!</tt></b> <tt><i>bundle-specifier
-- association-list</i> -> undefined<br>
-- </tt></p>
--
-- <blockquote>
-- Declares a new bundle named by the given bundle-specifier.
-- The contents of the bundle are defined by the provided
-- association list. The list contains associations
-- between Scheme symbols and the message templates (Scheme
-- strings) they name. If a bundle already exists with the
-- given name, it is overwritten with the newly declared
-- bundle.<br>
-- </blockquote>
-- <tt><a name="store-bundle"></a><b>store-bundle</b> <i>bundle-specifier</i> ->
-- boolean</tt><br>
--
--
-- <blockquote>
-- Attempts to store a bundle named by the given bundle
-- specifier, and previously made available using
-- <tt>declare-bundle!</tt> or <tt>load-bundle!</tt>, in an
-- unspecified mechanism that may be persistent across Scheme
-- system restarts. If successful, a non-false value is
-- returned. If unsuccessful, <tt>#f</tt> is returned.<br>
-- </blockquote>
-- <tt><a name="load-bundle!"></a><b>load-bundle!</b> <i>bundle-specifier</i> ->
-- boolean</tt><br>
--
--
-- <blockquote>
-- Attempts to retrieve a bundle from an unspecified mechanism
-- which stores bundles outside the Scheme system. If the
-- bundle was retrieved successfully, the function returns a
-- non-false value, and the bundle is immediately available to
-- the Scheme system. If the bundle could not be found or loaded
-- successfully, the function returns <tt>#f</tt>, and the
-- Scheme system's bundle registry remains unaffected.<br>
-- </blockquote>
-- A compliant Scheme system may choose not to provide any
-- external mechanism to store localized bundles. If it does
-- not, it must still provide implementations for
-- <tt>store-bundle</tt> and <tt>load-bundle!</tt>. In such a
-- case, both functions must return <tt>#f</tt> regardless of the
-- arguments given. Users of this SRFI should recognize that the
-- inability to load or store a localized bundle in an external
-- repository is <i>not</i> a fatal error.<br>
--
--
-- <h3>Retrieving Localized Message Templates</h3>
--
-- <p><a name="localized-template"></a><b><tt>localized-template</tt></b> <i><tt>package-name
-- message-template-name</tt></i> <tt>-> <i>string or #f<br>
-- </i></tt></p>
--
-- <blockquote>
-- Retrieves a localized message template for the given package
-- name and the given message template name (both symbols).
-- If no such message could be found, false (#f) is
-- returned.<br>
-- <br>
-- </blockquote>
-- After retrieving a template, the calling program can use
-- <tt>format</tt> to produce a string that can be displayed to
-- the user.<br>
--
--
-- <h2>Examples</h2>
-- The below example makes use of SRFI-29 to display simple,
-- localized messages. It also defines its bundles in such a
-- way that the Scheme system may store and retrieve the bundles
-- from a more efficient system catalog, if available.<br>
--
--<pre>
--(let ((translations
-- '(((en) . ((time . "Its ~a, ~a.")
-- (goodbye . "Goodbye, ~a.")))
-- ((fr) . ((time . "~1@*~a, c'est ~a.")
-- (goodbye . "Au revoir, ~a."))))))
-- (for-each (lambda (translation)
-- (let ((bundle-name (cons 'hello-program (car translation))))
-- (if (not (load-bundle! bundle-name))
-- (begin
-- (declare-bundle! bundle-name (cdr translation))
-- (store-bundle! bundle-name)))))
-- translations))
--
--(define localized-message
-- (lambda (message-name . args)
-- (apply format (cons (localized-template 'hello-program
-- message-name)
-- args))))
--
--(let ((myname "Fred"))
-- (display (localized-message 'time "12:00" myname))
-- (display #\newline)
--
-- (display (localized-message 'goodbye myname))
-- (display #\newline))
--
--;; Displays (English):
--;; Its 12:00, Fred.
--;; Goodbye, Fred.
--;;
--;; French:
--;; Fred, c'est 12:00.
--;; Au revoir, Fred.
--</pre>
--
-- <H1>Implementation</H1>
--
-- <p>The implementation requires that the Scheme system provide a
-- definition for <tt>current-language</tt> and
-- <tt>current-country</tt> capable of distinguishing the correct
-- locale present during a Scheme session. The definitions of
-- those functions in the reference implementation are not capable
-- of that distinction. Their implementation is provided only so
-- that the following code can run in any R4RS scheme system.
-- <br>
-- </p>
--
-- <p>In addition, the below implementation of a compliant
-- <tt>format</tt> requires SRFI-6 (Basic String Ports) and
-- SRFI-23 (Error reporting)</p>
--<pre>
--;; The association list in which bundles will be stored
--(define *localization-bundles* '())
--
--;; The current-language and current-country functions provided
--;; here must be rewritten for each Scheme system to default to the
--;; actual locale of the session
--(define current-language
-- (let ((current-language-value 'en))
-- (lambda args
-- (if (null? args)
-- current-language-value
-- (set! current-language-value (car args))))))
--
--(define current-country
-- (let ((current-country-value 'us))
-- (lambda args
-- (if (null? args)
-- current-country-value
-- (set! current-country-value (car args))))))
--
--;; The load-bundle! and store-bundle! both return #f in this
--;; reference implementation. A compliant implementation need
--;; not rewrite these procedures.
--(define load-bundle!
-- (lambda (bundle-specifier)
-- #f))
--
--(define store-bundle!
-- (lambda (bundle-specifier)
-- #f))
--
--;; Declare a bundle of templates with a given bundle specifier
--(define declare-bundle!
-- (letrec ((remove-old-bundle
-- (lambda (specifier bundle)
-- (cond ((null? bundle) '())
-- ((equal? (caar bundle) specifier)
-- (cdr bundle))
-- (else (cons (car bundle)
-- (remove-old-bundle specifier
-- (cdr bundle))))))))
-- (lambda (bundle-specifier bundle-assoc-list)
-- (set! *localization-bundles*
-- (cons (cons bundle-specifier bundle-assoc-list)
-- (remove-old-bundle bundle-specifier
-- *localization-bundles*))))))
--
--;;Retrieve a localized template given its package name and a template name
--(define localized-template
-- (letrec ((rdc
-- (lambda (ls)
-- (if (null? (cdr ls))
-- '()
-- (cons (car ls) (rdc (cdr ls))))))
-- (find-bundle
-- (lambda (specifier template-name)
-- (cond ((assoc specifier *localization-bundles*) =>
-- (lambda (bundle) bundle))
-- ((null? specifier) #f)
-- (else (find-bundle (rdc specifier)
-- template-name))))))
-- (lambda (package-name template-name)
-- (let loop ((specifier (cons package-name
-- (list (current-language)
-- (current-country)))))
-- (and (not (null? specifier))
-- (let ((bundle (find-bundle specifier template-name)))
-- (and bundle
-- (cond ((assq template-name bundle) => cdr)
-- ((null? (cdr specifier)) #f)
-- (else (loop (rdc specifier)))))))))))
--
--;;An SRFI-28 and SRFI-29 compliant version of format. It requires
--;;SRFI-23 for error reporting.
--(define format
-- (lambda (format-string . objects)
-- (let ((buffer (open-output-string)))
-- (let loop ((format-list (string->list format-string))
-- (objects objects)
-- (object-override #f))
-- (cond ((null? format-list) (get-output-string buffer))
-- ((char=? (car format-list) #\~)
-- (cond ((null? (cdr format-list))
-- (error 'format "Incomplete escape sequence"))
-- ((char-numeric? (cadr format-list))
-- (let posloop ((fl (cddr format-list))
-- (pos (string->number
-- (string (cadr format-list)))))
-- (cond ((null? fl)
-- (error 'format "Incomplete escape sequence"))
-- ((and (eq? (car fl) '#\@)
-- (null? (cdr fl)))
-- (error 'format "Incomplete escape sequence"))
-- ((and (eq? (car fl) '#\@)
-- (eq? (cadr fl) '#\*))
-- (loop (cddr fl) objects (list-ref objects pos)))
-- (else
-- (posloop (cdr fl)
-- (+ (* 10 pos)
-- (string->number
-- (string (car fl)))))))))
-- (else
-- (case (cadr format-list)
-- ((#\a)
-- (cond (object-override
-- (begin
-- (display object-override buffer)
-- (loop (cddr format-list) objects #f)))
-- ((null? objects)
-- (error 'format "No value for escape sequence"))
-- (else
-- (begin
-- (display (car objects) buffer)
-- (loop (cddr format-list)
-- (cdr objects) #f)))))
-- ((#\s)
-- (cond (object-override
-- (begin
-- (display object-override buffer)
-- (loop (cddr format-list) objects #f)))
-- ((null? objects)
-- (error 'format "No value for escape sequence"))
-- (else
-- (begin
-- (write (car objects) buffer)
-- (loop (cddr format-list)
-- (cdr objects) #f)))))
-- ((#\%)
-- (if object-override
-- (error 'format "Escape sequence following positional override does not require a value"))
-- (display #\newline buffer)
-- (loop (cddr format-list) objects #f))
-- ((#\~)
-- (if object-override
-- (error 'format "Escape sequence following positional override does not require a value"))
-- (display #\~ buffer)
-- (loop (cddr format-list) objects #f))
-- (else
-- (error 'format "Unrecognized escape sequence"))))))
-- (else (display (car format-list) buffer)
-- (loop (cdr format-list) objects #f)))))))
--
--</pre>
--
-- <H1>Copyright</H1>
--
-- Copyright (C) Scott G. Miller (2002). All Rights Reserved.
--
-- <p>This document and translations of it may be copied and
-- furnished to others, and derivative works that comment on or
-- otherwise explain it or assist in its implementation may be
-- prepared, copied, published and distributed, in whole or in
-- part, without restriction of any kind, provided that the above
-- copyright notice and this paragraph are included on all such
-- copies and derivative works. However, this document itself may
-- not be modified in any way, such as by removing the copyright
-- notice or references to the Scheme Request For Implementation
-- process or editors, except as needed for the purpose of
-- developing SRFIs in which case the procedures for copyrights
-- defined in the SRFI process must be followed, or as required to
-- translate it into languages other than English.</p>
--
-- <p>The limited permissions granted above are perpetual and will
-- not be revoked by the authors or their successors or
-- assigns.</p>
--
-- <p>This document and the information contained herein is
-- provided on an "AS IS" basis and THE AUTHOR AND THE SRFI
-- EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-- BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
-- HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
-- OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
-- <hr>
--
-- <address>
-- Editor: <a href="mailto:srfi-editors@srfi.schemers.org">David
-- Rush</a>
-- </address>
--
-- <address>
-- Author: <a href="mailto:scgmille@freenetproject.org">Scott G.
-- Miller</a>
-- </address>
-- <!-- Created: Tue Sep 29 19:20:08 EDT 1998 -->
-- <!-- hhmts start -->Last modified: Mon Jun 17 12:00:08 Pacific
-- Daylight Time 2002 <!-- hhmts end --> <br>
-- </body>
--</html>
--
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-5.html racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-5.html
---- racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-5.html 2018-01-26 15:34:52.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
-@@ -1,345 +0,0 @@
--<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
--<html>
--<head>
-- <title>SRFI 5: A compatible let form with signatures and rest arguments</title>
--</head>
--<body>
--
--<H1>Title</H1>
--
--SRFI-5: A compatible <code>let</code> form with signatures and rest arguments
--
--<H1>Author</H1>
--
--Andy Gaynor
--
--<H1>Status</H1>
--
--This SRFI is currently in ``final'' status. To see an explanation of each status that a SRFI can hold, see <A HREF="http://srfi.schemers.org/srfi-process.html">here</A>.
--You can access the discussion on this SRFI via <A HREF="http://srfi.schemers.org/srfi-5/mail-archive/maillist.html">the archive of the mailing list</A>.
--<P><UL>
--<LI>Received: 1999/2/2
--<LI>Draft: 1999/2/10-1999/04/12
--<LI>Final: 1999/4/26
--<LI>Revised reference implementation: 2003/01/27
--</UL>
--
--<H1>Abstract</H1>
--
--The <i>named-let</i> incarnation of the <code>let</code> form has two slight
--inconsistencies with the <code>define</code> form. As defined, the <code>let</code>
--form makes no accommodation for rest arguments, an issue of functionality
--and consistency. As defined, the <code>let</code> form does not accommodate
--signature-style syntax, an issue of aesthetics and consistency. Both
--issues are addressed here in a manner which is compatible with the traditional
--<code>let</code> form but for minor extensions.
--
--<H1>Rationale</H1>
--
--<H2>Signature-style Syntax</H2>
--
--Consider the following two equivalent definitions:
--
--<p><pre>
--(define fibonacci
-- (lambda (n i f0 f1)
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1)))))
--
--(define (fibonacci n i f0 f1)
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1))))
--</pre>
--
--Although there is a named-let analog for the former form, there is none
--for the latter. To wit, suppose one wished to compute the 10th element
--of the Fibonacci sequence using a named let:
--
--<p>
--<pre>
--(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1))))
--Values: 55
--</pre>
--
--As it stands, one cannot equivalently write
--
--<p>
--<pre>
--(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
-- (if (= i n)
-- f0
-- (fibonacci n (+ i 1) f1 (+ f0 f1))))
--</pre>
--
--which is consistent with <code>define</code>'s signature-style form.
--<p>Those that favor the signature style may prefer this extension.
--In any case, it may be more appropriate to include all bound names within
--the binding section. As presented, this straightforward extension
--introduces no ambiguity or incompatibility with the existing definition
--of let.
--
--<H2>Rest Arguments</H2>
--
--As it stands, one cannot write a named let with rest arguments, as in
--
--<p>
--<pre>
--(let (blast (port (current-output-port)) . (x (+ 1 2) 4 5))
-- (if (null? x)
-- 'just-a-silly-contrived-example
-- (begin
-- (write (car x) port)
-- (apply blast port (cdr x)))))
--</pre>
--
--otherwise equivalent to
--
--<p>
--<pre>
--(letrec ((blast (lambda (port . x)
-- (if (null? x)
-- 'just-a-silly-contrived-example
-- (begin
-- (write (car x) port)
-- (apply blast port (cdr x)))))))
-- (blast (current-output-port) (+ 1 2) 4 5))
--</pre>
--
--While this example is rather contrived, the functionality is not.
--There are several times when the author has used this construct in practice.
--Regardless, there is little reason to deny the <code>let</code> form access to
--all the features of lambda functionality.
--
--<H2>Symbols in Binding Sections</H2>
--
--Both the features above rely upon the placement of symbols in <code>let</code>
--binding lists (this statement is intentially simplistic). The only
--other apparent use of such symbol placement is to tersely bind variables
--to unspecified values. For example, one might desire to use
--<code>(let (foo bar baz) ...)</code>
--to bind <code>foo</code>, <code>bar</code>, and <code>baz</code> to
--unspecified values.
--
--<p>This usage is considered less important in light of the rationales
--presented above, and an alternate syntax is immediately apparent, as
--in <code>(let ((foo) (bar) (baz)) ...)</code> This may even
--be preferable, consistently parenthesizing normal binding clauses.
--
--<H1>Specification</H1>
--
--<H2>Syntax</H2>
--
--<p>
--A formal specification of the syntax follows. Below, body, expression,
--and identifier are free. Each instantiation of binding-name must be
--unique.
--</p>
--
--<p>
--<pre>
-- let = "(" "let" let-bindings body ")"
-- expressions = nothing | expression expressions
-- let-bindings = let-name bindings
-- | "(" let-name "." bindings ")"
-- let-name = identifier
-- bindings = "(" ")"
-- | rest-binding
-- | "(" normal-bindings ["." rest-binding] ")"
--normal-bindings = nothing
-- | normal-binding normal-bindings
-- normal-binding = "(" binding-name expression ")"
-- binding-name = identifier
-- rest-binding = "(" binding-name expressions ")"
--</pre>
--
--<p>
--For clarity and convenience, an informal specification follows.
--</p>
--
--<ol>
--<li><a name="unnamed">Unnamed</a>
--
--<p><pre>
--(let ((<parameter> <argument>)...)
-- <body>...)
--</pre>
--</li>
--
--<li><a name="named-non-sig">
--Named, non-signature-style, no rest argument</a>
--
--<p><pre>
--(let <name> ((<parameter> <argument>)...)
-- <body>...)
--</pre>
--</li>
--
--<li><a name="named-sig">Named, signature-style, no rest argument</a>
--
--<p><pre>
--(let (<name> (<parameter> <argument>)...)
-- <body>...)
--</pre>
--</li>
--
--<li><a name="named-non-sig-rest">Named, non-signature-style, rest argument</a>
--
--<p><pre>
--(let <name> ((<parameter> <argument>)...
--
--. (<rest-parameter> <rest-argument>...))
-- <body>...)
--</pre>
--
--<li><a name="named-sig-rest">Named, signature-style, rest argument</a>
--
--<p><pre>
--(let (<name> (<parameter> <argument>)...
--
--. (<rest-parameter> <rest-argument>...))
-- <body>...)
--</pre>
--</li>
--</ol>
--
--<H2>Semantics</H2>
--
--Let <code>$lambda</code> and <code>$letrec</code> be hygienic bindings for the <code>lambda</code>
--and <code>letrec</code> forms, respectively.
--
--<ul>
--<li>For informal syntax 1:
--
--<p><pre>
--(($lambda (<parameter>...) <body>...) <argument>...)
--</pre>
--</li>
--
--<li>For informal syntaxes 2 and 3:
--
--<p>
--<pre>
--($letrec ((<name> ($lambda (<parameter>...) <body>...)))
-- (<name> <argument>...))
--</pre>
--</li>
--
--<li>For informal syntaxes 4 and 5:
--
--<p>
--<pre>
--($letrec ((<name> ($lambda (<parameter>...
--
--. <rest-parameter>) <body>...)))
-- (<name> <argument>... <rest-argument>...))
--</pre>
--</li>
--</ul>
--
--<H1>Implementation</H1>
--
--Here is an implementation using <code>SYNTAX-RULES</code>.
--
--<p>
--<pre>
--;; Use your own standard let.
--;; Or call a lambda.
--;; (define-syntax standard-let
--;;
--;; (syntax-rules ()
--;;
--;; ((let ((var val) ...) body ...)
--;; ((lambda (var ...) body ...) val ...))))
--
--(define-syntax let
--
-- (syntax-rules ()
--
-- ;; No bindings: use standard-let.
-- ((let () body ...)
-- (standard-let () body ...))
-- ;; Or call a lambda.
-- ;; ((lambda () body ...))
--
-- ;; All standard bindings: use standard-let.
-- ((let ((var val) ...) body ...)
-- (standard-let ((var val) ...) body ...))
-- ;; Or call a lambda.
-- ;; ((lambda (var ...) body ...) val ...)
--
-- ;; One standard binding: loop.
-- ;; The all-standard-bindings clause didn't match,
-- ;; so there must be a rest binding.
-- ((let ((var val) . bindings) body ...)
-- (let-loop #f bindings (var) (val) (body ...)))
--
-- ;; Signature-style name: loop.
-- ((let (name binding ...) body ...)
-- (let-loop name (binding ...) () () (body ...)))
--
-- ;; defun-style name: loop.
-- ((let name bindings body ...)
-- (let-loop name bindings () () (body ...)))))
--
--(define-syntax let-loop
--
-- (syntax-rules ()
--
-- ;; Standard binding: destructure and loop.
-- ((let-loop name ((var0 val0) binding ...) (var ... ) (val ... ) body)
-- (let-loop name ( binding ...) (var ... var0) (val ... val0) body))
--
-- ;; Rest binding, no name: use standard-let, listing the rest values.
-- ;; Because of let's first clause, there is no "no bindings, no name" clause.
-- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
-- (standard-let ((var val) ... (rest-var (list rest-val ...))) . body))
-- ;; Or call a lambda with a rest parameter on all values.
-- ;; ((lambda (var ... . rest-var) . body) val ... rest-val ...))
-- ;; Or use one of several other reasonable alternatives.
--
-- ;; No bindings, name: call a letrec'ed lambda.
-- ((let-loop name () (var ...) (val ...) body)
-- ((letrec ((name (lambda (var ...) . body)))
-- name)
-- val ...))
--
-- ;; Rest binding, name: call a letrec'ed lambda.
-- ((let-loop name (rest-var rest-val ...) (var ...) (val ...) body)
-- ((letrec ((name (lambda (var ... . rest-var) . body)))
-- name)
-- val ... rest-val ...))))
--</pre>
--
--
--<H1>Copyright</H1>
--
--Copyright (C) Andy Gaynor (1999). All Rights Reserved.
--<p>This document and translations of it may be copied and furnished to
--others, and derivative works that comment on or otherwise explain it or
--assist in its implementation may be prepared, copied, published and distributed,
--in whole or in part, without restriction of any kind, provided that the
--above copyright notice and this paragraph are included on all such copies
--and derivative works. However, this document itself may not be modified
--in any way, such as by removing the copyright notice or references to the
--Scheme Request For Implementation process or editors, except as needed
--for the purpose of developing SRFIs in which case the procedures for copyrights
--defined in the SRFI process must be followed, or as required to translate
--it into languages other than English.
--<p>The limited permissions granted above are perpetual and will not be
--revoked by the authors or their successors or assigns.
--<p>This document and the information contained herein is provided on an
--"AS IS" basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES,
--EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
--USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
--WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
--
-- <hr>
-- <address>Editor: <a href="mailto:srfi-editors@srfi.schemers.org">Mike Sperber</a></address>
--
--</body>
--</html>
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/util.rkt racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/util.rkt
---- racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/util.rkt 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/util.rkt 2018-01-31 12:22:58.144502000 -0500
-@@ -0,0 +1,61 @@
-+#lang scribble/doc
-+
-+@(require scribble/manual
-+ scribble/eval
-+ scriblib/render-cond
-+ scribble/core
-+ scribble/html-properties
-+ (for-syntax scheme/base)
-+ (for-label scheme/base
-+ racket/stream))
-+
-+@(provide (all-defined-out))
-+
-+@(define-syntax (srfi stx)
-+ (syntax-case stx ()
-+ [(_ num #:subdir subdir? . title)
-+ (with-syntax ([srfi/n (string->symbol (format "srfi/~a" (syntax-e #'num)))])
-+ #'(begin
-+ (section #:tag (format "srfi-~a" num)
-+ #:style 'unnumbered
-+ (format "SRFI ~a: " num)
-+ . title)
-+ (defmodule srfi/n)
-+ "Original specification: "
-+ (let* ([label (format "SRFI ~a" num)]
-+ [sub (if subdir? (format "srfi-~a/" num) "")]
-+ [url (λ (b) (format "~a/srfi-std/~asrfi-~a.html" b sub num))])
-+ (cond-element
-+ [(or latex text) @link[(url "http://docs.racket-lang.org") label]]
-+ [else @link[(url ".") label]]))))]
-+ [(_ num . title) #'(srfi num #:subdir #f . title)]))
-+
-+@;{ The `lst' argument is a list of
-+ (list sym syntactic-form? html-anchor) }
-+@(define (redirect n lst #:subdir [subdir? #f])
-+ (let ([file (if subdir?
-+ (format "srfi-~a/srfi-~a.html" n n)
-+ (format "srfi-~a.html" n))]
-+ [mod-path (string->symbol (format "srfi/~a" n))])
-+ (make-binding-redirect-elements mod-path
-+ (map (lambda (b)
-+ (list (car b) (cadr b)
-+ (build-path "srfi-std" file)
-+ (caddr b)))
-+ lst))))
-+
-+@(define in-core
-+ (case-lambda
-+ [() (in-core ".")]
-+ [(k) @elem{This SRFI's bindings are also available in
-+ @racketmodname[racket/base]@|k|}]))
-+
-+@(begin
-+ (define-syntax-rule (def-mz mz-if)
-+ (begin
-+ (require (for-label mzscheme))
-+ (define mz-if (racket if))))
-+ (def-mz mz-if))
-+
-+@(define srfi-std (style #f (list (install-resource "srfi-std"))))
-+
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/info.rkt racket-6.12/share/pkgs/srfi-doc-nonfree/info.rkt
---- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/info.rkt 2018-01-31 12:22:58.144502000 -0500
-@@ -0,0 +1,19 @@
-+#lang info
-+
-+(define collection 'multi)
-+
-+(define build-deps '("mzscheme-doc"
-+ "scheme-lib"
-+ "base"
-+ "scribble-lib"
-+ "srfi-doc"
-+ "srfi-lib-nonfree"
-+ "racket-doc"
-+ "r5rs-doc"
-+ "r6rs-doc"
-+ "compatibility-lib"))
-+(define update-implies '("srfi-lib-nonfree"))
-+
-+(define pkg-desc "documentation part of \"srfi nonfree\"")
-+
-+(define pkg-authors '(mflatt noel chongkai jay))
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt
---- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 2018-01-31 12:22:58.144502000 -0500
-@@ -0,0 +1,3 @@
-+#lang info
-+
-+(define scribblings '(("srfi-nf.scrbl" (multi-page) (library 100))))
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl
---- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 2018-01-31 12:22:58.144502000 -0500
-@@ -0,0 +1,66 @@
-+#lang scribble/doc
-+@(require srfi/scribblings/util
-+ scribble/manual
-+ scribble/eval
-+ scriblib/render-cond
-+ scribble/core
-+ scribble/html-properties
-+ (for-syntax scheme/base)
-+ (for-label scheme/base
-+ racket/stream))
-+
-+@; ----------------------------------------------------------------------
-+
-+@title{SRFI Nonfree Libraries and Documentation}
-+
-+The @link[#:style srfi-std "http://srfi.schemers.org/"]{Scheme Requests for
-+Implementation} (a.k.a. @deftech{SRFI}) process allows individual
-+members of the Scheme community to propose libraries and extensions to
-+be supported by multiple Scheme implementations.
-+
-+Racket is distributed with implementations of many SRFIs, most of
-+which can be implemented as libraries. To import the bindings of SRFI
-+@math{n}, use
-+
-+@racketblock[
-+(require @#,elem{@racketidfont{srfi/}@math{n}})
-+]
-+
-+This document lists the SRFIs that are supported by Racket and
-+provides a link to the original SRFI specification (which is also
-+distributed as part of Racket's documentation).
-+
-+The following SRFI specification documents are licensed restrictively.
-+
-+@table-of-contents[]
-+
-+
-+@; ----------------------------------------
-+
-+@srfi[5]{A compatible let form with signatures and rest arguments}
-+
-+@redirect[5 '(
-+ (let #t "unnamed")
-+)]
-+
-+Racket provides this SRFI in the @racket[srfi-lib-nonfree] package.
-+
-+@; ----------------------------------------
-+
-+@srfi[29]{Localization}
-+
-+@redirect[29 '(
-+ (current-language #f "current-language")
-+ (current-country #f "current-country")
-+ (current-locale-details #f "current-locale-details")
-+ (declare-bundle! #f "declare-bundle!")
-+ (store-bundle #f "store-bundle")
-+ (load-bundle! #f "load-bundle!")
-+ (localized-template #f "localized-template")
-+)]
-+
-+Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package. Only the SRFI specification document is nonfree.
-+
-+@; ----------------------------------------
-+
-+@index-section[]
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html
---- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 2018-01-31 12:22:58.144502000 -0500
-@@ -0,0 +1,507 @@
-+<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
-+<html>
-+ <head>
-+ <meta name="generator" content="HTML Tidy, see www.w3.org">
-+ <title>SRFI 29: Localization</title>
-+ <meta name="author" content="Scott G. Miller">
-+ <meta name="description" content="Localization">
-+ </head>
-+ <body>
-+ <H1>Title</H1>
-+
-+ SRFI 29: Localization
-+
-+ <H1>Author</H1>
-+
-+ Scott G. Miller
-+
-+ <H1>Abstract</H1>
-+
-+ This document specifies an interface to retrieving and
-+ displaying locale sensitive messages. A Scheme program can
-+ register one or more translations of templated messages, and
-+ then write Scheme code that can transparently retrieve the
-+ appropriate message for the locale under which the Scheme
-+ system is running. <br>
-+
-+
-+ <H1>Rationale</H1>
-+
-+ <p>As any programmer that has ever had to deal with making his
-+ or her code readable in more than one locale, the process of
-+ sufficiently abstracting program messages from their
-+ presentation to the user is non-trivial without help from the
-+ programming language. Most modern programming language
-+ libraries do provide some mechanism for performing this
-+ separation.</p>
-+
-+ <p>A portable API that allows a piece of code to run without
-+ modification in different countries and under different
-+ languages is a must for any non-trivial software project.
-+ The interface should separate the logic of a program from
-+ the myriad of translations that may be necessary.</p>
-+
-+ <p>The interface described in this document provides such
-+ functionality. The underlying implementation is also allowed to
-+ use whatever datastructures it likes to provide access to the
-+ translations in the most efficient manner possible. In
-+ addition, the implementation is provided with standardized
-+ functions that programs will use for accessing an external,
-+ unspecified repository of translations.</p>
-+
-+ <p>This interface <i>does not</i> cover all aspects of
-+ localization, including support for non-latin characters,
-+ number and date formatting, etc. Such functionality is the
-+ scope of a future SRFI that may extend this one.</p>
-+
-+ <H1>Dependencies</H1>
-+
-+ An SRFI-29 conformant implementation must also implement
-+ SRFI-28, Basic Format Strings. Message templates are strings
-+ that must be processed by the <tt>format</tt> function
-+ specified in that SRFI.
-+
-+ <H1>Specification</H1>
-+
-+ <h3>Message Bundles</h3>
-+
-+ <p>A Message Bundle is a set of message templates and their
-+ identifying keys. Each bundle contains one or more such
-+ key/value pairs. The bundle itself is associated with a
-+ <i>bundle specifier</i> which uniquely identifies the
-+ bundle.</p>
-+
-+ <h3>Bundle Specifiers</h3>
-+
-+ <p>A Bundle Specifier is a Scheme list that describes, in order
-+ of importance, the package and locale of a message bundle.
-+ In most cases, a locale specifier will have between one
-+ and three elements. The first element is a symbol denoting the
-+ package for which this bundle applies. The second and third
-+ elements denote a <i>locale</i>. The second element (first
-+ element of the locale) if present, is the two letter, ISO 639-1
-+ language code for the bundle. The third element, if present, is
-+ a two letter ISO 3166-1 country code. In some cases, a
-+ fourth element may be present, specifying the encoding used for
-+ the bundle. All bundle specifier elements are Scheme
-+ symbols.</p>
-+
-+ <p>If only one translation is provided, it should be designated
-+ only by a package name, for example <tt>(mathlib)</tt>. This
-+ translation is called the <i>default</i> translation.</p>
-+
-+ <h3>Bundle Searching</h3>
-+
-+ <p>When a message template is retrieved from a bundle, the
-+ Scheme implementation will provide the locale under which the
-+ system is currently running. When the template is retrieved,
-+ the package name will be specified. The Scheme system should
-+ construct a Bundle Specifier from the provided package name and
-+ the active locale. For example, when retrieving a message
-+ template for French Canadian, in the <tt>mathlib</tt> package,
-+ the bundle specifier '<tt>(mathlib fr ca)</tt>' is used. A
-+ program may also retrieve the elements of the current locale
-+ using the no-argument procedures:</p>
-+
-+ <p><b><a name="current-language"></a><tt>current-language</tt></b> <tt>->
-+ <i>symbol</i></tt><br>
-+ <tt><b>current-language</b> <i>symbol</i> ->
-+ undefined</tt><br>
-+ </p>
-+
-+ <blockquote>
-+ When given no arguments, returns the current ISO 639-1
-+ language code as a symbol. If provided with an
-+ argument, the current language is set to that named by the
-+ symbol for the currently executing Scheme thread (or for the
-+ entire Scheme system if such a distinction is not possible).
-+
-+ </blockquote>
-+
-+ <p><b><a name="current-country"></a><tt>current-country</tt></b> <tt>->
-+ <i>symbol</i></tt><br>
-+ <tt><b>current-country</b> <i>symbol</i> ->
-+ undefined</tt><br>
-+ </p>
-+
-+ <blockquote>
-+ returns the current ISO 3166-1 country code as a symbol.
-+ If provided with an argument, the current country is
-+ set to that named by the symbol for the currently executing
-+ Scheme thread (or for the entire Scheme system if such a
-+ distinction is not possible).
-+ </blockquote>
-+
-+ <p><b><a name="current-locale-details"></a><tt>current-locale-details</tt></b> <tt>-> <i>list of
-+ symbol</i></tt>s<br>
-+ <tt><b>current-locale-details</b> <i>list-of-symbols</i> ->
-+ undefined</tt><br>
-+ </p>
-+
-+ <blockquote>
-+ Returns a list of additional locale details as a list of
-+ symbols. This list may contain information about
-+ encodings or other more specific information. If
-+ provided with an argument, the current locale details are set
-+ to those given in the currently executing Scheme thread (or
-+ for the entire Scheme system if such a distinction is not
-+ possible).
-+ </blockquote>
-+
-+ <p>The Scheme System should first check for a bundle with the
-+ exact name provided. If no such bundle is found, the last
-+ element from the list is removed and a search is tried for a
-+ bundle with that name. If no bundle is then found, the list is
-+ shortened by removing the last element again. If no message is
-+ found and the bundle specifier is now the empty list, an error
-+ should be raised.</p>
-+
-+ <p>The reason for this search order is to provide the most
-+ locale sensitive template possible, but to fall back on more
-+ general templates if a translation has not yet been provided
-+ for the given locale.</p>
-+
-+ <h3>Message Templates</h3>
-+
-+ <p>A message template is a localized message that may or may
-+ not contain one of a number of formatting codes. A message
-+ template is a Scheme string. The string is of a form that can
-+ be processed by the <tt>format</tt> procedure found in many
-+ Scheme systems and formally specified in SRFI-28 (Basic Format
-+ Strings).</p>
-+
-+ <p>This SRFI also extends SRFI-28 to provide an additional
-+ <tt>format</tt> escape code:</p>
-+
-+ <blockquote>
-+ <tt>~[n]@*</tt> - Causes a value-requiring escape code that
-+ follows this code immediately to reference the [N]'th
-+ optional value absolutely, rather than the next unconsumed
-+ value. The referenced value is <i>not</i> consumed.
-+ </blockquote>
-+ This extension allows optional values to be positionally
-+ referenced, so that message templates can be constructed that
-+ can produce the proper word ordering for a language.
-+
-+ <h3>Preparing Bundles</h3>
-+ Before a bundle may be used by the Scheme system to retrieve
-+ localized template messages, they must be made available to the
-+ Scheme system. This SRFI specifies a way to portably
-+ define the bundles, as well as store them in and retrieve them
-+ from an unspecified system which may be provided by resources
-+ outside the Scheme system.<br>
-+
-+
-+ <p><b><a name="declare-bundle!"></a><tt>declare-bundle!</tt></b> <tt><i>bundle-specifier
-+ association-list</i> -> undefined<br>
-+ </tt></p>
-+
-+ <blockquote>
-+ Declares a new bundle named by the given bundle-specifier.
-+ The contents of the bundle are defined by the provided
-+ association list. The list contains associations
-+ between Scheme symbols and the message templates (Scheme
-+ strings) they name. If a bundle already exists with the
-+ given name, it is overwritten with the newly declared
-+ bundle.<br>
-+ </blockquote>
-+ <tt><a name="store-bundle"></a><b>store-bundle</b> <i>bundle-specifier</i> ->
-+ boolean</tt><br>
-+
-+
-+ <blockquote>
-+ Attempts to store a bundle named by the given bundle
-+ specifier, and previously made available using
-+ <tt>declare-bundle!</tt> or <tt>load-bundle!</tt>, in an
-+ unspecified mechanism that may be persistent across Scheme
-+ system restarts. If successful, a non-false value is
-+ returned. If unsuccessful, <tt>#f</tt> is returned.<br>
-+ </blockquote>
-+ <tt><a name="load-bundle!"></a><b>load-bundle!</b> <i>bundle-specifier</i> ->
-+ boolean</tt><br>
-+
-+
-+ <blockquote>
-+ Attempts to retrieve a bundle from an unspecified mechanism
-+ which stores bundles outside the Scheme system. If the
-+ bundle was retrieved successfully, the function returns a
-+ non-false value, and the bundle is immediately available to
-+ the Scheme system. If the bundle could not be found or loaded
-+ successfully, the function returns <tt>#f</tt>, and the
-+ Scheme system's bundle registry remains unaffected.<br>
-+ </blockquote>
-+ A compliant Scheme system may choose not to provide any
-+ external mechanism to store localized bundles. If it does
-+ not, it must still provide implementations for
-+ <tt>store-bundle</tt> and <tt>load-bundle!</tt>. In such a
-+ case, both functions must return <tt>#f</tt> regardless of the
-+ arguments given. Users of this SRFI should recognize that the
-+ inability to load or store a localized bundle in an external
-+ repository is <i>not</i> a fatal error.<br>
-+
-+
-+ <h3>Retrieving Localized Message Templates</h3>
-+
-+ <p><a name="localized-template"></a><b><tt>localized-template</tt></b> <i><tt>package-name
-+ message-template-name</tt></i> <tt>-> <i>string or #f<br>
-+ </i></tt></p>
-+
-+ <blockquote>
-+ Retrieves a localized message template for the given package
-+ name and the given message template name (both symbols).
-+ If no such message could be found, false (#f) is
-+ returned.<br>
-+ <br>
-+ </blockquote>
-+ After retrieving a template, the calling program can use
-+ <tt>format</tt> to produce a string that can be displayed to
-+ the user.<br>
-+
-+
-+ <h2>Examples</h2>
-+ The below example makes use of SRFI-29 to display simple,
-+ localized messages. It also defines its bundles in such a
-+ way that the Scheme system may store and retrieve the bundles
-+ from a more efficient system catalog, if available.<br>
-+
-+<pre>
-+(let ((translations
-+ '(((en) . ((time . "Its ~a, ~a.")
-+ (goodbye . "Goodbye, ~a.")))
-+ ((fr) . ((time . "~1@*~a, c'est ~a.")
-+ (goodbye . "Au revoir, ~a."))))))
-+ (for-each (lambda (translation)
-+ (let ((bundle-name (cons 'hello-program (car translation))))
-+ (if (not (load-bundle! bundle-name))
-+ (begin
-+ (declare-bundle! bundle-name (cdr translation))
-+ (store-bundle! bundle-name)))))
-+ translations))
-+
-+(define localized-message
-+ (lambda (message-name . args)
-+ (apply format (cons (localized-template 'hello-program
-+ message-name)
-+ args))))
-+
-+(let ((myname "Fred"))
-+ (display (localized-message 'time "12:00" myname))
-+ (display #\newline)
-+
-+ (display (localized-message 'goodbye myname))
-+ (display #\newline))
-+
-+;; Displays (English):
-+;; Its 12:00, Fred.
-+;; Goodbye, Fred.
-+;;
-+;; French:
-+;; Fred, c'est 12:00.
-+;; Au revoir, Fred.
-+</pre>
-+
-+ <H1>Implementation</H1>
-+
-+ <p>The implementation requires that the Scheme system provide a
-+ definition for <tt>current-language</tt> and
-+ <tt>current-country</tt> capable of distinguishing the correct
-+ locale present during a Scheme session. The definitions of
-+ those functions in the reference implementation are not capable
-+ of that distinction. Their implementation is provided only so
-+ that the following code can run in any R4RS scheme system.
-+ <br>
-+ </p>
-+
-+ <p>In addition, the below implementation of a compliant
-+ <tt>format</tt> requires SRFI-6 (Basic String Ports) and
-+ SRFI-23 (Error reporting)</p>
-+<pre>
-+;; The association list in which bundles will be stored
-+(define *localization-bundles* '())
-+
-+;; The current-language and current-country functions provided
-+;; here must be rewritten for each Scheme system to default to the
-+;; actual locale of the session
-+(define current-language
-+ (let ((current-language-value 'en))
-+ (lambda args
-+ (if (null? args)
-+ current-language-value
-+ (set! current-language-value (car args))))))
-+
-+(define current-country
-+ (let ((current-country-value 'us))
-+ (lambda args
-+ (if (null? args)
-+ current-country-value
-+ (set! current-country-value (car args))))))
-+
-+;; The load-bundle! and store-bundle! both return #f in this
-+;; reference implementation. A compliant implementation need
-+;; not rewrite these procedures.
-+(define load-bundle!
-+ (lambda (bundle-specifier)
-+ #f))
-+
-+(define store-bundle!
-+ (lambda (bundle-specifier)
-+ #f))
-+
-+;; Declare a bundle of templates with a given bundle specifier
-+(define declare-bundle!
-+ (letrec ((remove-old-bundle
-+ (lambda (specifier bundle)
-+ (cond ((null? bundle) '())
-+ ((equal? (caar bundle) specifier)
-+ (cdr bundle))
-+ (else (cons (car bundle)
-+ (remove-old-bundle specifier
-+ (cdr bundle))))))))
-+ (lambda (bundle-specifier bundle-assoc-list)
-+ (set! *localization-bundles*
-+ (cons (cons bundle-specifier bundle-assoc-list)
-+ (remove-old-bundle bundle-specifier
-+ *localization-bundles*))))))
-+
-+;;Retrieve a localized template given its package name and a template name
-+(define localized-template
-+ (letrec ((rdc
-+ (lambda (ls)
-+ (if (null? (cdr ls))
-+ '()
-+ (cons (car ls) (rdc (cdr ls))))))
-+ (find-bundle
-+ (lambda (specifier template-name)
-+ (cond ((assoc specifier *localization-bundles*) =>
-+ (lambda (bundle) bundle))
-+ ((null? specifier) #f)
-+ (else (find-bundle (rdc specifier)
-+ template-name))))))
-+ (lambda (package-name template-name)
-+ (let loop ((specifier (cons package-name
-+ (list (current-language)
-+ (current-country)))))
-+ (and (not (null? specifier))
-+ (let ((bundle (find-bundle specifier template-name)))
-+ (and bundle
-+ (cond ((assq template-name bundle) => cdr)
-+ ((null? (cdr specifier)) #f)
-+ (else (loop (rdc specifier)))))))))))
-+
-+;;An SRFI-28 and SRFI-29 compliant version of format. It requires
-+;;SRFI-23 for error reporting.
-+(define format
-+ (lambda (format-string . objects)
-+ (let ((buffer (open-output-string)))
-+ (let loop ((format-list (string->list format-string))
-+ (objects objects)
-+ (object-override #f))
-+ (cond ((null? format-list) (get-output-string buffer))
-+ ((char=? (car format-list) #\~)
-+ (cond ((null? (cdr format-list))
-+ (error 'format "Incomplete escape sequence"))
-+ ((char-numeric? (cadr format-list))
-+ (let posloop ((fl (cddr format-list))
-+ (pos (string->number
-+ (string (cadr format-list)))))
-+ (cond ((null? fl)
-+ (error 'format "Incomplete escape sequence"))
-+ ((and (eq? (car fl) '#\@)
-+ (null? (cdr fl)))
-+ (error 'format "Incomplete escape sequence"))
-+ ((and (eq? (car fl) '#\@)
-+ (eq? (cadr fl) '#\*))
-+ (loop (cddr fl) objects (list-ref objects pos)))
-+ (else
-+ (posloop (cdr fl)
-+ (+ (* 10 pos)
-+ (string->number
-+ (string (car fl)))))))))
-+ (else
-+ (case (cadr format-list)
-+ ((#\a)
-+ (cond (object-override
-+ (begin
-+ (display object-override buffer)
-+ (loop (cddr format-list) objects #f)))
-+ ((null? objects)
-+ (error 'format "No value for escape sequence"))
-+ (else
-+ (begin
-+ (display (car objects) buffer)
-+ (loop (cddr format-list)
-+ (cdr objects) #f)))))
-+ ((#\s)
-+ (cond (object-override
-+ (begin
-+ (display object-override buffer)
-+ (loop (cddr format-list) objects #f)))
-+ ((null? objects)
-+ (error 'format "No value for escape sequence"))
-+ (else
-+ (begin
-+ (write (car objects) buffer)
-+ (loop (cddr format-list)
-+ (cdr objects) #f)))))
-+ ((#\%)
-+ (if object-override
-+ (error 'format "Escape sequence following positional override does not require a value"))
-+ (display #\newline buffer)
-+ (loop (cddr format-list) objects #f))
-+ ((#\~)
-+ (if object-override
-+ (error 'format "Escape sequence following positional override does not require a value"))
-+ (display #\~ buffer)
-+ (loop (cddr format-list) objects #f))
-+ (else
-+ (error 'format "Unrecognized escape sequence"))))))
-+ (else (display (car format-list) buffer)
-+ (loop (cdr format-list) objects #f)))))))
-+
-+</pre>
-+
-+ <H1>Copyright</H1>
-+
-+ Copyright (C) Scott G. Miller (2002). All Rights Reserved.
-+
-+ <p>This document and translations of it may be copied and
-+ furnished to others, and derivative works that comment on or
-+ otherwise explain it or assist in its implementation may be
-+ prepared, copied, published and distributed, in whole or in
-+ part, without restriction of any kind, provided that the above
-+ copyright notice and this paragraph are included on all such
-+ copies and derivative works. However, this document itself may
-+ not be modified in any way, such as by removing the copyright
-+ notice or references to the Scheme Request For Implementation
-+ process or editors, except as needed for the purpose of
-+ developing SRFIs in which case the procedures for copyrights
-+ defined in the SRFI process must be followed, or as required to
-+ translate it into languages other than English.</p>
-+
-+ <p>The limited permissions granted above are perpetual and will
-+ not be revoked by the authors or their successors or
-+ assigns.</p>
-+
-+ <p>This document and the information contained herein is
-+ provided on an "AS IS" basis and THE AUTHOR AND THE SRFI
-+ EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
-+ BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
-+ HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
-+ OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
-+ <hr>
-+
-+ <address>
-+ Editor: <a href="mailto:srfi-editors@srfi.schemers.org">David
-+ Rush</a>
-+ </address>
-+
-+ <address>
-+ Author: <a href="mailto:scgmille@freenetproject.org">Scott G.
-+ Miller</a>
-+ </address>
-+ <!-- Created: Tue Sep 29 19:20:08 EDT 1998 -->
-+ <!-- hhmts start -->Last modified: Mon Jun 17 12:00:08 Pacific
-+ Daylight Time 2002 <!-- hhmts end --> <br>
-+ </body>
-+</html>
-+
-diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html
---- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 2018-01-31 12:22:58.144502000 -0500
-@@ -0,0 +1,345 @@
-+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
-+<html>
-+<head>
-+ <title>SRFI 5: A compatible let form with signatures and rest arguments</title>
-+</head>
-+<body>
-+
-+<H1>Title</H1>
-+
-+SRFI-5: A compatible <code>let</code> form with signatures and rest arguments
-+
-+<H1>Author</H1>
-+
-+Andy Gaynor
-+
-+<H1>Status</H1>
-+
-+This SRFI is currently in ``final'' status. To see an explanation of each status that a SRFI can hold, see <A HREF="http://srfi.schemers.org/srfi-process.html">here</A>.
-+You can access the discussion on this SRFI via <A HREF="http://srfi.schemers.org/srfi-5/mail-archive/maillist.html">the archive of the mailing list</A>.
-+<P><UL>
-+<LI>Received: 1999/2/2
-+<LI>Draft: 1999/2/10-1999/04/12
-+<LI>Final: 1999/4/26
-+<LI>Revised reference implementation: 2003/01/27
-+</UL>
-+
-+<H1>Abstract</H1>
-+
-+The <i>named-let</i> incarnation of the <code>let</code> form has two slight
-+inconsistencies with the <code>define</code> form. As defined, the <code>let</code>
-+form makes no accommodation for rest arguments, an issue of functionality
-+and consistency. As defined, the <code>let</code> form does not accommodate
-+signature-style syntax, an issue of aesthetics and consistency. Both
-+issues are addressed here in a manner which is compatible with the traditional
-+<code>let</code> form but for minor extensions.
-+
-+<H1>Rationale</H1>
-+
-+<H2>Signature-style Syntax</H2>
-+
-+Consider the following two equivalent definitions:
-+
-+<p><pre>
-+(define fibonacci
-+ (lambda (n i f0 f1)
-+ (if (= i n)
-+ f0
-+ (fibonacci n (+ i 1) f1 (+ f0 f1)))))
-+
-+(define (fibonacci n i f0 f1)
-+ (if (= i n)
-+ f0
-+ (fibonacci n (+ i 1) f1 (+ f0 f1))))
-+</pre>
-+
-+Although there is a named-let analog for the former form, there is none
-+for the latter. To wit, suppose one wished to compute the 10th element
-+of the Fibonacci sequence using a named let:
-+
-+<p>
-+<pre>
-+(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
-+ (if (= i n)
-+ f0
-+ (fibonacci n (+ i 1) f1 (+ f0 f1))))
-+Values: 55
-+</pre>
-+
-+As it stands, one cannot equivalently write
-+
-+<p>
-+<pre>
-+(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
-+ (if (= i n)
-+ f0
-+ (fibonacci n (+ i 1) f1 (+ f0 f1))))
-+</pre>
-+
-+which is consistent with <code>define</code>'s signature-style form.
-+<p>Those that favor the signature style may prefer this extension.
-+In any case, it may be more appropriate to include all bound names within
-+the binding section. As presented, this straightforward extension
-+introduces no ambiguity or incompatibility with the existing definition
-+of let.
-+
-+<H2>Rest Arguments</H2>
-+
-+As it stands, one cannot write a named let with rest arguments, as in
-+
-+<p>
-+<pre>
-+(let (blast (port (current-output-port)) . (x (+ 1 2) 4 5))
-+ (if (null? x)
-+ 'just-a-silly-contrived-example
-+ (begin
-+ (write (car x) port)
-+ (apply blast port (cdr x)))))
-+</pre>
-+
-+otherwise equivalent to
-+
-+<p>
-+<pre>
-+(letrec ((blast (lambda (port . x)
-+ (if (null? x)
-+ 'just-a-silly-contrived-example
-+ (begin
-+ (write (car x) port)
-+ (apply blast port (cdr x)))))))
-+ (blast (current-output-port) (+ 1 2) 4 5))
-+</pre>
-+
-+While this example is rather contrived, the functionality is not.
-+There are several times when the author has used this construct in practice.
-+Regardless, there is little reason to deny the <code>let</code> form access to
-+all the features of lambda functionality.
-+
-+<H2>Symbols in Binding Sections</H2>
-+
-+Both the features above rely upon the placement of symbols in <code>let</code>
-+binding lists (this statement is intentially simplistic). The only
-+other apparent use of such symbol placement is to tersely bind variables
-+to unspecified values. For example, one might desire to use
-+<code>(let (foo bar baz) ...)</code>
-+to bind <code>foo</code>, <code>bar</code>, and <code>baz</code> to
-+unspecified values.
-+
-+<p>This usage is considered less important in light of the rationales
-+presented above, and an alternate syntax is immediately apparent, as
-+in <code>(let ((foo) (bar) (baz)) ...)</code> This may even
-+be preferable, consistently parenthesizing normal binding clauses.
-+
-+<H1>Specification</H1>
-+
-+<H2>Syntax</H2>
-+
-+<p>
-+A formal specification of the syntax follows. Below, body, expression,
-+and identifier are free. Each instantiation of binding-name must be
-+unique.
-+</p>
-+
-+<p>
-+<pre>
-+ let = "(" "let" let-bindings body ")"
-+ expressions = nothing | expression expressions
-+ let-bindings = let-name bindings
-+ | "(" let-name "." bindings ")"
-+ let-name = identifier
-+ bindings = "(" ")"
-+ | rest-binding
-+ | "(" normal-bindings ["." rest-binding] ")"
-+normal-bindings = nothing
-+ | normal-binding normal-bindings
-+ normal-binding = "(" binding-name expression ")"
-+ binding-name = identifier
-+ rest-binding = "(" binding-name expressions ")"
-+</pre>
-+
-+<p>
-+For clarity and convenience, an informal specification follows.
-+</p>
-+
-+<ol>
-+<li><a name="unnamed">Unnamed</a>
-+
-+<p><pre>
-+(let ((<parameter> <argument>)...)
-+ <body>...)
-+</pre>
-+</li>
-+
-+<li><a name="named-non-sig">
-+Named, non-signature-style, no rest argument</a>
-+
-+<p><pre>
-+(let <name> ((<parameter> <argument>)...)
-+ <body>...)
-+</pre>
-+</li>
-+
-+<li><a name="named-sig">Named, signature-style, no rest argument</a>
-+
-+<p><pre>
-+(let (<name> (<parameter> <argument>)...)
-+ <body>...)
-+</pre>
-+</li>
-+
-+<li><a name="named-non-sig-rest">Named, non-signature-style, rest argument</a>
-+
-+<p><pre>
-+(let <name> ((<parameter> <argument>)...
-+
-+. (<rest-parameter> <rest-argument>...))
-+ <body>...)
-+</pre>
-+
-+<li><a name="named-sig-rest">Named, signature-style, rest argument</a>
-+
-+<p><pre>
-+(let (<name> (<parameter> <argument>)...
-+
-+. (<rest-parameter> <rest-argument>...))
-+ <body>...)
-+</pre>
-+</li>
-+</ol>
-+
-+<H2>Semantics</H2>
-+
-+Let <code>$lambda</code> and <code>$letrec</code> be hygienic bindings for the <code>lambda</code>
-+and <code>letrec</code> forms, respectively.
-+
-+<ul>
-+<li>For informal syntax 1:
-+
-+<p><pre>
-+(($lambda (<parameter>...) <body>...) <argument>...)
-+</pre>
-+</li>
-+
-+<li>For informal syntaxes 2 and 3:
-+
-+<p>
-+<pre>
-+($letrec ((<name> ($lambda (<parameter>...) <body>...)))
-+ (<name> <argument>...))
-+</pre>
-+</li>
-+
-+<li>For informal syntaxes 4 and 5:
-+
-+<p>
-+<pre>
-+($letrec ((<name> ($lambda (<parameter>...
-+
-+. <rest-parameter>) <body>...)))
-+ (<name> <argument>... <rest-argument>...))
-+</pre>
-+</li>
-+</ul>
-+
-+<H1>Implementation</H1>
-+
-+Here is an implementation using <code>SYNTAX-RULES</code>.
-+
-+<p>
-+<pre>
-+;; Use your own standard let.
-+;; Or call a lambda.
-+;; (define-syntax standard-let
-+;;
-+;; (syntax-rules ()
-+;;
-+;; ((let ((var val) ...) body ...)
-+;; ((lambda (var ...) body ...) val ...))))
-+
-+(define-syntax let
-+
-+ (syntax-rules ()
-+
-+ ;; No bindings: use standard-let.
-+ ((let () body ...)
-+ (standard-let () body ...))
-+ ;; Or call a lambda.
-+ ;; ((lambda () body ...))
-+
-+ ;; All standard bindings: use standard-let.
-+ ((let ((var val) ...) body ...)
-+ (standard-let ((var val) ...) body ...))
-+ ;; Or call a lambda.
-+ ;; ((lambda (var ...) body ...) val ...)
-+
-+ ;; One standard binding: loop.
-+ ;; The all-standard-bindings clause didn't match,
-+ ;; so there must be a rest binding.
-+ ((let ((var val) . bindings) body ...)
-+ (let-loop #f bindings (var) (val) (body ...)))
-+
-+ ;; Signature-style name: loop.
-+ ((let (name binding ...) body ...)
-+ (let-loop name (binding ...) () () (body ...)))
-+
-+ ;; defun-style name: loop.
-+ ((let name bindings body ...)
-+ (let-loop name bindings () () (body ...)))))
-+
-+(define-syntax let-loop
-+
-+ (syntax-rules ()
-+
-+ ;; Standard binding: destructure and loop.
-+ ((let-loop name ((var0 val0) binding ...) (var ... ) (val ... ) body)
-+ (let-loop name ( binding ...) (var ... var0) (val ... val0) body))
-+
-+ ;; Rest binding, no name: use standard-let, listing the rest values.
-+ ;; Because of let's first clause, there is no "no bindings, no name" clause.
-+ ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
-+ (standard-let ((var val) ... (rest-var (list rest-val ...))) . body))
-+ ;; Or call a lambda with a rest parameter on all values.
-+ ;; ((lambda (var ... . rest-var) . body) val ... rest-val ...))
-+ ;; Or use one of several other reasonable alternatives.
-+
-+ ;; No bindings, name: call a letrec'ed lambda.
-+ ((let-loop name () (var ...) (val ...) body)
-+ ((letrec ((name (lambda (var ...) . body)))
-+ name)
-+ val ...))
-+
-+ ;; Rest binding, name: call a letrec'ed lambda.
-+ ((let-loop name (rest-var rest-val ...) (var ...) (val ...) body)
-+ ((letrec ((name (lambda (var ... . rest-var) . body)))
-+ name)
-+ val ... rest-val ...))))
-+</pre>
-+
-+
-+<H1>Copyright</H1>
-+
-+Copyright (C) Andy Gaynor (1999). All Rights Reserved.
-+<p>This document and translations of it may be copied and furnished to
-+others, and derivative works that comment on or otherwise explain it or
-+assist in its implementation may be prepared, copied, published and distributed,
-+in whole or in part, without restriction of any kind, provided that the
-+above copyright notice and this paragraph are included on all such copies
-+and derivative works. However, this document itself may not be modified
-+in any way, such as by removing the copyright notice or references to the
-+Scheme Request For Implementation process or editors, except as needed
-+for the purpose of developing SRFIs in which case the procedures for copyrights
-+defined in the SRFI process must be followed, or as required to translate
-+it into languages other than English.
-+<p>The limited permissions granted above are perpetual and will not be
-+revoked by the authors or their successors or assigns.
-+<p>This document and the information contained herein is provided on an
-+"AS IS" basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES,
-+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
-+USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
-+WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-+
-+ <hr>
-+ <address>Editor: <a href="mailto:srfi-editors@srfi.schemers.org">Mike Sperber</a></address>
-+
-+</body>
-+</html>
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib/info.rkt racket-6.12/share/pkgs/srfi-lib/info.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib/info.rkt 2018-01-26 16:10:02.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib/info.rkt 2018-01-31 12:22:58.144502000 -0500
-@@ -1 +1,15 @@
--(module info setup/infotab (#%module-begin (define package-content-state (quote (built "6.12"))) (define collection (quote multi)) (define deps (quote ("scheme-lib" "base" "srfi-lite-lib" "r6rs-lib" "compatibility-lib"))) (define implies (quote ("srfi-lite-lib"))) (define pkg-desc "implementation (no documentation) part of \"srfi\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
-+#lang info
-+
-+(define collection 'multi)
-+
-+(define deps '("scheme-lib"
-+ "base"
-+ "srfi-lite-lib"
-+ "r6rs-lib"
-+ "compatibility-lib"))
-+
-+(define implies '("srfi-lite-lib"))
-+
-+(define pkg-desc "implementation (no documentation) part of \"srfi\"")
-+
-+(define pkg-authors '(mflatt noel chongkai jay))
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/32/sort.txt racket-6.12/share/pkgs/srfi-lib/srfi/32/sort.txt
---- racket-6.12-orig/share/pkgs/srfi-lib/srfi/32/sort.txt 2018-01-26 15:34:52.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib/srfi/32/sort.txt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,1069 +0,0 @@
--The SRFI-32 sort libraries -*- outline -*-
--Olin Shivers
--First draft: 1998/10/19
--Last update: 2002/7/21
--
--[Todo: del-list-neighbor-dups!
-- vector-copy -> subvector
-- use srfi-23 for reporting errors
-- use srfi-16 for n-aries?
--
--Emacs should display this document in outline mode. Say c-h m for
--instructions on how to move through it by sections (e.g., c-c c-n, c-c c-p).
--
--* Table of contents
---------------------
--Abstract
--Procedure index
--Introduction
--What's wrong with the current state of affairs?
--Design rules
-- What vs. how
-- Consistency across function signatures
-- Data parameter first, less-than parameter after
-- Ordering, comparison functions & stability
-- All vector operations accept optional subrange parameters
-- Required vs. allowed side-effects
--Procedure specification
-- Procedure naming and functionality
-- Types of parameters and return values
-- sort-lib - general sorting package
-- Algorithm-specific sorting packages
--Algorithmic properties
--Topics to be resolved during discussion phase
--Porting and optimisation
--References & Links
--Acknowledgements
--Copyright
--
--
--* Abstract
------------
--Current Scheme sorting packages are, every one of them, surprisingly bad. I've
--designed the API for a full-featured sort toolkit, which I propose as a SRFI.
--
--The spec comes with 1200 lines of high-quality reference code: tightly
--written, highly commented, portable code, available for free. Implementors
--want this code. It's better than what you have.
--
---------------------------------------------------------------------------------
--* Procedure index
-------------------
--list-sorted? vector-sorted?
--
--list-merge vector-merge
--list-sort vector-sort
--list-stable-sort vector-stable-sort
--list-delete-neighbor-dups vector-delete-neighbor-dups
--
--list-merge! vector-merge!
--list-sort! vector-sort!
--list-stable-sort! vector-stable-sort!
--list-delete-neighbor-dups! vector-delete-neighbor-dups!
--
--quick-sort heap-sort insert-sort list-merge-sort vector-merge-sort
--quick-sort! heap-sort! insert-sort! list-merge-sort! vector-merge-sort!
--quick-sort3!
--
--vector-binary-search
--vector-binary-search3
--
---------------------------------------------------------------------------------
--* Introduction
----------------
--As I'll detail below, I wasn't very happy with the state of the Scheme
--world for sorting and merging lists and vectors. So I have designed and
--written a fairly comprehensive sorting & merging toolkit. It is
--
-- - very portable,
--
-- - much better code than what is currently in Elk, Gambit, Bigloo,
-- Scheme->C, MzScheme, RScheme, Scheme48, MIT Scheme, or slib, and
--
-- - priced to move: free code.
--
--The package includes
-- - Vector insert sort (stable)
-- - Vector heap sort
-- - Vector quick sort (with median-of-3 pivot picking)
-- - Vector merge sort (stable)
-- - Pure and destructive list merge sort (stable)
-- - Stable vector and list merge
-- - Miscellaneous sort-related procedures: Vector and list merging,
-- sorted? predicates, vector binary search, vector and list
-- delete-equal-neighbor procedures.
-- - A general, non-algorithmic set of procedure names for general sorting
-- and merging.
--
--Scheme programmers may want to adopt this package. I'd like Scheme
--implementors to adopt this code and its API -- in fact, the code is a bribe to
--make it easy for implementors to converge on the suggested API. I mean, you'd
--really have to be a boor to take this free code I wrote and mutate its
--interface over to your incompatible, unportable API, wouldn't you? But you
--could, of course -- it's freely available. More in the spirit of the offering,
--you could make this API available, and then also write a little module
--providing your old interface that is defined in terms of this API. "Scheme
--implementors," in this context, includes slib, which is not a standalone
--implementation of Scheme, but rather an influential collection of API's and
--code.
--
--The code is tightly bummed. It is clearly written, and commented in my usual
--voluminous style. This includes notes on porting and implementation-specific
--optimisations.
--
--
---------------------------------------------------------------------------------
--* What's wrong with the current state of affairs?
---------------------------------------------------
--
--It's just amazing to me that in 2002, sorting and merging hasn't been
--completely put to bed. These are well-understood algorithms, each of them well
--under a page of code. The straightforward algorithms are basic, core stuff --
--sophomore-level. But if you tour the major Scheme implementations out there on
--the Net, you find badly written code that provides extremely spotty coverage
--of the algorithm space. One implementation even has a buggy implementation
--that has been in use for about 20 years. Another has an O(n^2) algorithm...
--implemented in C for speed.
--
--Open source-code is a wonderful thing. In a couple of hours, I was able to
--download and check the sources of 9 Scheme systems. Here are my notes from the
--systems I checked. You can skip to the next section if you aren't morbidly
--curious.
--
--slib
-- sorted? vector-or-list <
-- merge list1 list2 <
-- merge! list1 list2 <
-- sort vector-or-list <
-- sort! vector-or-list <
--
-- Richard O'Keefe's stable list merge sort is right idea, but implemented
-- using gratuitous variable side effects. It also does redundant SET-CDR!s.
-- The vector sort converts to list, merge sorts, then reconverts
-- to vector. This is a bad idea -- non-local pointer chasing bad; vector
-- shuffling good. If you must allocate temp storage, might as well allocate
-- a temp vector and use vector merge sort.
--
--MIT Scheme
-- sort! vector <
-- merge-sort! vector <
-- quick-sort! vector <
--
-- sort vector-or-list <
-- merge-sort vector-or-list <
-- quick-sort vector-or-list <
--
-- Naive vector quicksort: loser, for worst-case performance reasons.
-- List sort by "list->vector; quicksort; vector->list," hence also loser.
-- A clever stable vector merge sort, albeit not very bummed.
--
--Scheme 48 & T
-- sort-list list <
-- sort-list! list <
-- list-merge! list1 list2 <
--
-- Bob Nix's implementation of online merge-sort, written in the early 80's.
-- Conses unnecessary bookkeeping structure, which isn't necessary with a
-- proper recursive formulation. Also, does redundant SET-CDR!s. No vector
-- sort. Also, has a bug -- is claimed to be a stable sort, but isn't! To see
-- this, get the S48 code, and try
-- (define (my< x y) (< (abs x) (abs y)))
-- (list-merge! (list 0 2) (list -2) my<) ; -> (0 2 -2)
-- (list-merge! (list 2) (list 0 -2) my<) ; -> (0 -2 2)
-- This could be fixed very easily, but it isn't worth it given the
-- other problems with the algorithm.
--
--RScheme
-- vector-sort! vector <
-- sort collection <
--
-- Good basic implementation of vector heapsort, which has O(n lg n)
-- worst-case time. Code ugly, needs tuning. List sort by "list->vector;
-- sort; vector->list." Nothing for stable sorting.
--
--MzScheme
-- quicksort lis <
-- mergesort alox <
--
-- Sorts lists with (list->vector; quicksort; vector->list) -- but the core
-- quicksort is not available for vector sorting. Nothing for stable sorting.
-- Quicksort picks pivot naively, inducing O(n^2) worse-case behaviour on a
-- fairly common case: an already-sorted list.
--
--Bigloo, STK
-- sort vector-or-list <
-- Uses an O(n^2) algorithm... implemented in C for speed. Hmm.
-- (See runtime/Ieee/vector.scm and runtime/Clib/cvector.c)
--
--Gambit
-- sort-list list <
-- Nothing for vectors. Simple, slow, unstable merge sort for lists.
--
--Elk
-- Another naive quicksort. Lists handled by converting to vector.
-- sort vector-or-list <
-- sort! vector-or-list <
--
--Chez Scheme
-- merge < list1 list2
-- merge! < list1 list2
-- sort < list
-- sort! < list
--
-- These are stable. I have not seen the source code.
--
--Common Lisp
-- sort sequence < [key]
-- stable-sort sequence < [key]
-- merge result-type sequence1 sequence2 < [key]
--
-- The sort procedures are allowed, but not required, to be destructive.
--
--SML/NJ
-- sort: ('a*'a -> bool) -> 'a list -> 'a list
-- "Smooth applicative merge sort," which is stable.
-- There is also a highly bummed quicksort for vectors.
--
--The right solution: Implement a full toolbox of carefully written standard sort
--routines.
--
--Having the source of all these above-cited Schemes available for study made
--life a lot easier writing this code. I appreciate the authors making their
--source available under such open terms.
--
--
---------------------------------------------------------------------------------
--* Design rules
----------------
--
--** What vs. how
--===============
--There are two different interfaces: "what" (simple) & "how" (detailed).
--
-- - Simple: you specify semantics: datatype (list or vector),
-- mutability, and stability.
--
-- - Detailed: you specify the actual algorithm (quick, heap,
-- insert, merge). Different algorithms have different properties,
-- both semantic & pragmatic, so these exports are necessary.
--
-- It is necessarily the case that the specifications of these procedures
-- make statements about execution "pragmatics." For example, the sole
-- distinction between heap sort and quick sort -- both of which are
-- provided by this library -- is one of execution time, which is not a
-- "semantic" distinction. Similar resource-use statements are made about
-- "iterative" procedures, meaning that they can execute on input of
-- arbitrary size in a constant number of stack frames.
--
--** Consistency across function signatures
--=========================================
--The two interfaces share common function signatures wherever
--possible, to facilitate switching a given call from one procedure
--to another.
--
--** Less-than parameter first, data parameter after
--==================================================
--These procedures uniformly observe the following parameter order:
--the data to be sorted comes after the comparison function.
--That is, we write
-- (sort < lis)
--not
-- (sort lis <).
--
--With the sole exception of Chez Scheme, this is the exact opposite of
--every sort function out there in current use in the Scheme world. (See
--the summary of related APIs above.) However, it is consistent with common
--practice across Scheme libraries in general to put the ordering function
--first -- the "operation currying" convention. (E.g., consider FOR-EACH or
--MAP or FIND.)
--
--The original draft of this SRFI used the data-first/comparison-last convention
--for backwards compatibility -- a decision I made with internal misgivings.
--Happily, however, the overwhelming response from the discussion phase
--supported "cleaning up" this issue and re-converging the parameter order with
--the general Scheme "op currying" convention. So the original decision was
--inverted in favor of the comparison-first/data-last convention.
--
--** Ordering, comparison functions & stability
--=============================================
--These routines take a < comparison function, not a <= comparison
--function, and they sort into increasing order. The difference between
--a < spec and a <= spec comes up in three places:
-- - the definition of an ordered or sorted data set,
-- - the definition of a stable sorting algorithm, and
-- - correctness of quicksort.
--
--+ We say that a data set (a list or vector) is *sorted* or *ordered*
-- if it contains no adjacent pair of values ... X Y ... such that Y < X.
--
-- In other words, scanning across the data never takes a "downwards" step.
--
-- If you use a <= procedure where these algorithms expect a <
-- procedure, you may not get the answers you expect. For example,
-- the LIST-SORTED? function will return false if you pass it a <= comparison
-- function and an ordered list containing adjacent equal elements.
--
--+ A "stable" sort is one that preserves the pre-existing order of equal
-- elements. Suppose, for example, that we sort a list of numbers by
-- comparing their absolute values, i.e., using comparison function
-- (lambda (x y) (< (abs x) (abs y)))
-- If we sort a list that contains both 3 and -3:
-- ... 3 ... -3 ...
-- then a stable sort is an algorithm that will not swap the order
-- of these two elements, that is, the answer is guaranteed to to look like
-- ... 3 -3 ...
-- not
-- ... -3 3 ...
--
-- Choosing < for the comparison function instead of <= affects how stability
-- is coded. Given an adjacent pair X Y, (< y x) means "Y should be moved in
-- front of X" -- otherwise, leave things as they are. So using a <= function
-- where a < function is expected will *invert* stability.
--
-- This is due to the definition of equality, given a < comparator:
-- (and (not (< x y))
-- (not (< y x)))
-- The definition is rather different, given a <= comparator:
-- (and (<= x y)
-- (<= y x))
--
--+ A "stable" merge is one that reliably favors one of its data sets
-- when equal items appear in both data sets. *All merge operations in
-- this library are stable*, breaking ties between data sets in favor
-- of the first data set -- elements of the first list come before equal
-- elements in the second list.
--
-- So, if we are merging two lists of numbers ordered by absolute value,
-- the stable merge operation LIST-MERGE
-- (list-merge (lambda (x y) (< (abs x) (abs y)))
-- '(0 -2 4 8 -10) '(-1 3 -4 7))
-- reliably places the 4 of the first list before the equal-comparing -4
-- of the second list:
-- (0 -1 -2 4 -4 7 8 -10)
--
--+ Some sort algorithms will *not work correctly* if given a <= when they
-- expect a < comparison (or vice-versa). For example, violating quicksort's
-- spec may cause it to produce wrong answers, diverge, raise an error, or do
-- some fourth thing. To see why, consider the left-scan part of the standard
-- quicksort partition step:
-- (let ((i (let scan ((i i)) (if (elt< (vector-ref v i) pivot)
-- (scan (+ i 1))
-- i))))
-- ...)
-- Consider applying this loop to a vector of all zeroes (hence, PIVOT, as
-- well, is zero), but erroneously using <= for the ELT< function. The loop
-- will scan right off the end of the vector, producing a vector-index error.
-- The guarantee that the scan loop will terminate before running off the end
-- of the vector depends critically upon ELT< performing as a true, irreflexive
-- < relation. Running off the end of the vector is only one of a variety of
-- possibly ways to lose -- other, variant implementations of quicksort can,
-- instead, loop forever on some data sets if ELT< is a <= predicate.
--
--In short, if your comparison function F answers true to (F x x), then
-- - using a stable sorting or merging algorithm will not give you a
-- stable sort or merge,
-- - LIST-SORTED? may surprise you, and
-- - quicksort may fail in a variety of possible ways.
--Note that you can synthesize a < function from a <= function with
-- (lambda (x y) (not (<= y x)))
--if need be.
--
--Precise definitions give sharp edges to tools, but require care in use.
--"Measure twice, cut once."
--
--I have adopted the choice of < from Common Lisp. One would assume the definers
--of Common Lisp had a good reason for adopting < instead of <=, but canvassing
--several of the principal actors in the definition process has turned up no
--better reason than "an arbitrary but consistent choice." At minimum, then,
--this SRFI extends the coverage of that consistent choice.
--
--** All vector operations accept optional subrange parameters
--============================================================
--The vector operations specified below all take optional START/END arguments
--indicating a selected subrange of a vector's elements. If a START parameter or
--START/END parameter pair is given to such a procedure, they must be exact,
--non-negative integers, such that
-- 0 <= START <= END <= (VECTOR-LENGTH V)
--where V is the related vector parameter. If not specified, they default to 0
--and the length of the vector, respectively. They are interpreted to select the
--range [START,END), that is, all elements from index START (inclusive) up to,
--but not including, index END.
--
--** Required vs. allowed side-effects
--====================================
--LIST-SORT! and LIST-STABLE-SORT! are allowed, but not required,
--to alter their arguments' cons cells to construct the result list. This is
--consistent with the what-not-how character of the group of procedures
--to which they belong (the "sort-lib" package).
--
--The LIST-DELETE-NEIGHBOR-DUPS!, LIST-MERGE! and LIST-MERGE-SORT! procedures,
--on the other hand, provide specific algorithms, and, as such, explicitly
--commit to the use of side-effects on their input lists in order to guarantee
--their key algorithmic properties (e.g., linear-time operation, constant-space
--stack use).
--
---------------------------------------------------------------------------------
--* Procedure specification
---------------------------
--The procedures are split into several packages. In a Scheme system that has a
--module or package system, these procedures should be contained in modules
--named as follows:
-- Package name Functionality
-- ------------ -------------
-- sort-lib General sorting for lists & vectors
-- sorted?-lib Sorted predicates for lists & vectors
-- list-merge-sort-lib List merge sort
-- vector-merge-sort-lib Vector merge sort
-- vector-heap-sort-lib Vector heap sort
-- vector-quick-sort-lib Vector quick sort
-- vector-insert-sort-lib Vector insertion sort
-- delndup-lib List and vector delete neighbor duplicates
-- binsearch-lib Vector binary search
--
--A Scheme system without a module system should provide all of the bindings
--defined in all of these modules as components of the "SRFI-32" package.
--
--Note that there is no "list insert sort" package, as you might as well always
--use list merge sort. The reference implementation's destructive list merge
--sort will do fewer SET-CDR!s than a destructive insert sort.
--
--** Procedure naming and functionality
--=====================================
--Almost all of the procedures described below are variants of two basic
--operations: sorting and merging. These procedures are consistently named
--by composing a set of basic lexemes to indicate what they do.
--
--Lexeme Meaning
-------- -------
--"sort" The procedure sorts its input data set by some < comparison function.
--
--"merge" The procedure merges two ordered data sets into a single ordered
-- result.
--
--"stable" This lexeme indicates that the sort is a stable one.
--
--"vector" The procedure operates upon vectors.
--
--"list" The procedure operates upon lists.
--
--"!" Procedures that end in "!" are allowed, and sometimes required,
-- to reuse their input storage to construct their answer.
--
--** Types of parameters and return values
--========================================
--In the procedures specified below,
-- - A LIS parameter is a list;
--
-- - A V parameter is a vector;
--
-- - A < or = parameter is a procedure accepting two arguments taken from the
-- specified procedure's data set(s), and returning a boolean;
--
-- - START and END parameters are exact, non-negative integers that
-- serve as vector indices selecting a subrange of some associated vector.
-- When specified, they must satisfy the relation
-- 0 <= start <= end <= (vector-length v)
-- where V is the associated vector.
--
--Passing values to procedures with these parameters that do not satisfy these
--types is an error.
--
--If a procedure is said to return "unspecified," this means that nothing at all
--is said about what the procedure returns, not even the number of return
--values. Such a procedure is not even required to be consistent from call to
--call in the nature or number of its return values. It is simply required to
--return a value (or values) that may be passed to a command continuation, e.g.
--as the value of an expression appearing as a non-terminal subform of a BEGIN
--expression. Note that in R5RS, this restricts such a procedure to returning a
--single value; non-R5RS systems may not even provide this restriction.
--
--** sort-lib - general sorting package
--=====================================
--This library provides basic sorting and merging functionality suitable for
--general programming. The procedures are named by their semantic properties,
--i.e., what they do to the data (sort, stable sort, merge, and so forth).
--
-- Procedure Suggested algorithm
-- -------------------------------------------------------------------------
-- list-sorted? < lis -> boolean
-- list-merge < lis1 lis2 -> list
-- list-merge! < lis1 lis2 -> list
-- list-sort < lis -> list (vector heap or quick)
-- list-sort! < lis -> list (list merge sort)
-- list-stable-sort < lis -> list (vector merge sort)
-- list-stable-sort! < lis -> list (list merge sort)
-- list-delete-neighbor-dups = lis -> list
-- list-delete-neighbor-dups! = lis -> list
--
-- vector-sorted? < v [start end] -> boolean
-- vector-merge < v1 v2 [start1 end1 start2 end2] -> vector
-- vector-merge! < v v1 v2 [start start1 end1 start2 end2] -> unspecified
-- vector-sort < v [start end] -> vector (heap or quick sort)
-- vector-sort! < v [start end] -> unspecified (heap or quick sort)
-- vector-stable-sort < v [start end] -> vector (vector merge sort)
-- vector-stable-sort! < v [start end] -> unspecified (vector merge sort)
-- vector-delete-neighbor-dups = v [start end] -> vector
-- vector-delete-neighbor-dups! = target source [t-start s-start s-end] -> t-end
--
-- LIST-SORTED? and VECTOR-SORTED? return true if their input list or vector
-- is in sorted order, as determined by their < comparison parameter.
--
-- All four merge operations are stable: an element of the initial list LIS1
-- or vector V1 will come before an equal-comparing element in the second
-- list LIS2 or vector V2 in the result.
--
-- The procedures
-- LIST-MERGE
-- LIST-SORT
-- LIST-STABLE-SORT
-- LIST-DELETE-NEIGHBOR-DUPS
-- do not alter their inputs and are allowed to return a value that shares
-- a common tail with a list argument.
--
-- The procedures
-- LIST-SORT!
-- LIST-STABLE-SORT!
-- are "linear update" operators -- they are allowed, but not required, to
-- alter the cons cells of their arguments to produce their results.
--
-- On the other hand, the procedures
-- LIST-DELETE-NEIGHBOR-DUPS!
-- LIST-MERGE!
-- make only a single, iterative, linear-time pass over their argument lists,
-- using SET-CDR!s to rearrange the cells of the lists into the final result
-- -- they work "in place." Hence, any cons cell appearing in the result must
-- have originally appeared in an input. The intent of this
-- iterative-algorithm commitment is to allow the programmer to be sure that
-- if, for example, LIST-MERGE! is asked to merge two ten-million-element
-- lists, the operation will complete without performing some extremely
-- (possibly twenty-million) deep recursion.
--
-- The vector procedures
-- VECTOR-SORT
-- VECTOR-STABLE-SORT
-- VECTOR-DELETE-NEIGHBOR-DUPS
-- do not alter their inputs, but allocate a fresh vector for their result,
-- of length END - START.
--
-- The vector procedures
-- VECTOR-SORT!
-- VECTOR-STABLE-SORT!
-- sort their data in-place. (But note that VECTOR-STABLE-SORT! may
-- allocate temporary storage proportional to the size of the input --
-- I am not aware of O(n lg n) stable vector-sorting algorithms that
-- run in constant space.)
--
-- VECTOR-MERGE returns a vector of length (END1-START1)+(END2-START2).
--
-- VECTOR-MERGE! writes its result into vector V, beginning at index START,
-- for indices less than END = START + (END1-START1) + (END2-START2). The
-- target subvector
-- V[start,end)
-- may not overlap either source subvector
-- V1[start1,end1)
-- V2[start2,end2).
--
-- The ...-DELETE-NEIGHBOR-DUPS-... procedures:
-- These procedures delete adjacent duplicate elements from a list or a
-- vector, using a given element-equality procedure. The first/leftmost
-- element of a run of equal elements is the one that survives. The list or
-- vector is not otherwise disordered.
--
-- These procedures are linear time -- much faster than the O(n^2) general
-- duplicate-element deletors that do not assume any "bunching" of elements
-- (such as the ones provided by SRFI-1). If you want to delete duplicate
-- elements from a large list or vector, you can sort the elements to bring
-- equal items together, then use one of these procedures, for a total time
-- of O(n lg n).
--
-- The comparison function = passed to these procedures is always applied
-- (= x y)
-- where X comes before Y in the containing list or vector.
--
-- - LIST-DELETE-NEIGHBOR-DUPS does not alter its input list; its answer
-- may share storage with the input list.
--
-- - VECTOR-DELETE-NEIGHBOR-DUPS does not alter its input vector, but
-- rather allocates a fresh vector to hold the result.
--
-- - LIST-DELETE-NEIGHBOR-DUPS! is permitted, but not required, to
-- mutate its input list in order to construct its answer.
--
-- - VECTOR-DELETE-NEIGHBOR-DUPS! reuses its input vector to hold the
-- answer, packing its answer into the index range [start,end'), where
-- END' is the non-negative exact integer returned as its value. It
-- returns END' as its result. The vector is not altered outside the range
-- [start,end').
--
-- - VECTOR-DELETE-NEIGHBOR-DUPS! scans vector SOURCE in range
-- [S-START,S-END), writing its result to vector TARGET beginning at index
-- T-START. It returns exact, non-negative integer T-END, which indicates
-- that the results of the operation are found in index range
-- [T-START,T-END) of TARGET; elements of TARGET outside this range
-- are unaltered.
--
-- It is an error for memory cell TARGET[T-START] to be a memory cell in
-- the region SOURCE[1 + S-START, S-END). In a Scheme implementation
-- that does not allow distinct vectors to share storage, this means
-- that one of the following must be true:
-- 1. (not (eq? source target))
-- 2. t-start not-in [s-start + 1, s-end)
--
-- - Examples:
-- (list-delete-neighbor-dups = '(1 1 2 7 7 7 0 -2 -2))
-- => (1 2 7 0 -2)
--
-- (vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2))
-- => #(1 2 7 0 -2)
--
-- (vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2) 3 7)
-- => #(7 0 -2)
--
-- ;; Result left in v[3,9):
-- (let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6)))
-- (cons (vector-delete-neighbor-dups! = v 3)
-- v))
-- => (9 . #(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6))
--
--
--** Algorithm-specific sorting packages
--======================================
--These packages provide more specific sorting functionality, that is,
--specific commitment to particular algorithms that have particular
--pragmatic consequences (such as memory locality, asymptotic running time)
--beyond their semantic behaviour (sorting, stable sorting, merging, etc.).
--Programmers that need a particular algorithm can use one of these packages.
--
--sorted?-lib - sorted predicates
-- list-sorted? < lis -> boolean
-- vector-sorted? < v [start end] -> boolean
--
-- Return #f iff there is an adjacent pair ... X Y ... in the input
-- list or vector such that Y < X. The optional START/END range
-- arguments restrict VECTOR-SORTED? to the indicated subvector.
--
--list-merge-sort-lib - list merge sort
-- list-merge-sort < lis -> list
-- list-merge-sort! < lis -> list
-- list-merge lis1 < lis2 -> list
-- list-merge! lis1 < lis2 -> list
--
-- The sort procedures sort their data using a list merge sort, which is
-- stable. (The reference implementation is, additionally, a "natural" sort.
-- See below for the properties of this algorithm.)
--
-- The ! procedures are destructive -- they use SET-CDR!s to rearrange the
-- cells of the lists into the proper order. As such, they do not allocate
-- any extra cons cells -- they are "in place" sorts. Additionally,
-- LIST-MERGE! is iterative -- it can operate on arguments of arbitrary size
-- with a constant number of stack frames.
--
-- The merge operations are stable: an element of LIS1 will come before an
-- equal-comparing element in LIS2 in the result list.
--
--vector-merge-sort-lib - vector merge sort
-- vector-merge-sort < v [start end temp] -> vector
-- vector-merge-sort! < v [start end temp] -> unspecified
-- vector-merge < v1 v2 [start1 end1 start2 end2] -> vector
-- vector-merge! < v v1 v2 [start start1 end1 start2 end2] -> unspecified
--
-- The sort procedures sort their data using vector merge sort, which is
-- stable. (The reference implementation is, additionally, a "natural" sort.
-- See below for the properties of this algorithm.)
--
-- The optional START/END arguments provide for sorting of subranges, and
-- default to 0 and the length of the corresponding vector.
--
-- Merge-sorting a vector requires the allocation of a temporary "scratch"
-- work vector for the duration of the sort. This scratch vector can be
-- passed in by the client as the optional TEMP argument; if so, the supplied
-- vector must be of size >= END, and will not be altered outside the range
-- [start,end). If not supplied, the sort routines allocate one themselves.
--
-- The merge operations are stable: an element of V1 will come before an
-- equal-comparing element in V2 in the result vector.
--
-- VECTOR-MERGE-SORT! leaves its result in V[start,end).
--
-- VECTOR-MERGE-SORT returns a vector of length END-START.
--
-- VECTOR-MERGE returns a vector of length (END1-START1)+(END2-START2).
--
-- VECTOR-MERGE! writes its result into vector V, beginning at index START,
-- for indices less than END = START + (END1-START1) + (END2-START2). The
-- target subvector
-- V[start,end)
-- may not overlap either source subvector
-- V1[start1,end1)
-- V2[start2,end2).
--
--vector-heap-sort-lib - vector heap sort
-- heap-sort < v [start end] -> vector
-- heap-sort! < v [start end] -> unspecified
--
-- These procedures sort their data using heap sort,
-- which is not a stable sorting algorithm.
--
-- HEAP-SORT returns a vector of length END-START.
-- HEAP-SORT! is in-place, leaving its result in V[start,end).
--
--vector-quick-sort-lib - vector quick sort
-- quick-sort < v [start end] -> vector
-- quick-sort! < v [start end] -> unspecified
-- quick-sort3! c v [start end] -> unspecified
--
-- These procedures sort their data using quick sort,
-- which is not a stable sorting algorithm.
--
-- QUICK-SORT returns a vector of length END-START.
-- QUICK-SORT! is in-place, leaving its result in V[start,end).
--
-- QUICK-SORT3! is a variant of quick-sort that takes a three-way
-- comparison function C. C compares a pair of elements and returns
-- an exact integer whose sign indicates their relationship:
-- (c x y) < 0 => x<y
-- (c x y) = 0 => x=y
-- (c x y) > 0 => x>y
-- To help remember the relationship between the sign of the result and
-- the relation, use the function - as the model for C: (- x y) < 0
-- means that x < y; (- x y) > 0 means that x > y.
--
-- The extra discrimination provided by the three-way comparison can
-- provide significant speedups when sorting data sets with many duplicates,
-- especially when the comparison function is relatively expensive (e.g.,
-- comparing long strings).
--
-- WARNING: Some sort algorithms, such as insertion sort or heap sort,
-- can tolerate being passed a <= comparison function when they expect a <
-- function -- insertion and merge sort may simply invert stability; and
-- heap sort will run a bit slower, but otherwise produce a correct answer.
--
-- Quicksort, however, is much more critically sensitive to the distinction
-- between a < and a <= comparison. If QUICK-SORT or QUICK-SORT! expect a <
-- comparison function, and are erroneously given a <= function, they may,
-- depending on implementation, produce an unsorted result, go into an
-- infinite loop, cause a run-time error, occasionally produce a correct
-- result, or do some fifth thing.
--
-- Implementors may wish to write QUICKSORT3! so that it (a) tests the
-- comparison function (by checking that (c v[start] v[start]) produces
-- false), or (b) is tolerant of an erroneous <= function, or (c) both.
-- Clients of this function, however, should not count on this.
--
--vector-insert-sort-lib - vector insertion sort
-- insert-sort < v [start end] -> vector
-- insert-sort! < v [start end] -> unspecified
--
-- These procedures stably sort their data using insertion sort.
--
-- INSERT-SORT returns a vector of length END-START.
-- INSERT-SORT! is in-place, leaving its result in V[start,end).
--
--delndup-lib - list and vector delete neighbor duplicates
-- list-delete-neighbor-dups = lis -> list
-- list-delete-neighbor-dups! = lis -> list
--
-- vector-delete-neighbor-dups = v [start end] -> vector
-- vector-delete-neighbor-dups! = v [start end] -> end'
--
-- These procedures delete adjacent duplicate elements from a list or
-- a vector, using a given element-equality procedure =. The first/leftmost
-- element of a run of equal elements is the one that survives. The list
-- or vector is not otherwise disordered.
--
-- These procedures are linear time -- much faster than the O(n^2) general
-- duplicate-element deletors that do not assume any "bunching" of elements
-- (such as the ones provided by SRFI-1). If you want to delete duplicate
-- elements from a large list or vector, you can sort the elements to bring
-- equal items together, then use one of these procedures, for a total time
-- of O(n lg n).
--
-- The comparison function = passed to these procedures is always applied
-- (= x y)
-- where X comes before Y in the containing list or vector.
--
-- LIST-DELETE-NEIGHBOR-DUPS does not alter its input list; its answer
-- may share storage with the input list.
--
-- VECTOR-DELETE-NEIGHBOR-DUPS does not alter its input vector, but
-- rather allocates a fresh vector to hold the result.
--
-- LIST-DELETE-NEIGHBOR-DUPS! is permitted, but not required, to
-- mutate its input list in order to construct its answer.
--
-- VECTOR-DELETE-NEIGHBOR-DUPS! reuses its input vector to hold the
-- answer, packing its answer into the index range [start,end'), where
-- END' is the non-negative exact integer returned as its value. It
-- returns END' as its result. The vector is not altered outside the range
-- [start,end').
--
-- Examples:
-- (list-delete-neighbor-dups = '(1 1 2 7 7 7 0 -2 -2))
-- => (1 2 7 0 -2)
--
-- (vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2))
-- => #(1 2 7 0 -2)
--
-- (vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2) 3 7)
-- => #(7 0 -2)
--
-- ;; Result left in v[3,9):
-- (let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6)))
-- (cons (vector-delete-neighbor-dups! = v 3)
-- v))
-- => (9 . #(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6))
--
--binsearch-lib - vector binary search lib
-- vector-binary-search elt< elt->key key v [start end] -> integer-or-false
-- vector-binary-search3 c v [start end] -> integer-or-false
--
-- VECTOR-BINARY-SEARCH searches vector V in range [START,END) (which
-- default to 0 and the length of V, respectively) for an element whose
-- associated key is equal to KEY. The procedure ELT->KEY is used to map
-- an element to its associated key. The elements of the vector are assumed
-- to be ordered by the ELT< relation on these keys. That is,
-- (vector-sorted? (lambda (x y) (elt< (elt->key x) (elt->key y)))
-- v start end) => true
-- An element E of V is a match for KEY if it's neither less nor greater
-- than the key:
-- (and (not (elt< (elt->key e) key))
-- (not (elt< key (elt->key e))))
-- If there is such an element, the procedure returns its index in the
-- vector as an exact integer. If there is no such element in the searched
-- range, the procedure returns false.
--
-- (vector-binary-search < car 4 '#((1 . one) (3 . three)
-- (4 . four) (25 . twenty-five)))
-- => 2
--
-- (vector-binary-search < car 7 '#((1 . one) (3 . three)
-- (4 . four) (25 . twenty-five)))
-- => #f
--
-- VECTOR-BINARY-SEARCH3 is a variant that uses a three-way comparison
-- function C. C compares its parameter to the search key, and returns an
-- exact integer whose sign indicates its relationship to the search key.
-- (c x) < 0 => x < search-key
-- (c x) = 0 => x = search-key
-- (c x) > 0 => x > search-key
--
-- (vector-binary-search3 (lambda (elt) (- (car elt) 4))
-- '#((1 . one) (3 . three)
-- (4 . four) (25 . twenty-five)))
-- => 2
--
-- Rationale:
-- - Why isn't VECTOR-BINARY-SEARCH's ELT->KEY computation simply absorbed
-- into the < function? It is separated out because the < function is
-- applied twice inside the binary-search inner loop, once with the search
-- key for the first argument and the element key for the second argument,
-- and once, with the reverse argument order. This is not necessary for
-- VECTOR-BINARY-SEARCH3.
--
-- - When a comparison operation is able to produce a three-way
-- discrimination, the inner loop of the binary search can trim the number
-- of per-iteration comparisons from an average of 1.5 to a guaranteed
-- single comparison per iteration. This can be a significant savings when
-- searching with an expensive comparison operation (e.g., one that
-- uses string compare, sends email, references a database, or queries
-- a network service such as a web server).
--
-- - Failure is signaled by false (rather than, say, -1) so that searches
-- can be used in conditional forms such as
-- (or (vector-binary-search ...) ...)
-- or
-- (cond ((vector-binary-search ...) => index-consumer)
-- ...)
--
---------------------------------------------------------------------------------
--* Algorithmic properties
--------------------------
--Different sort and merge algorithms have different properties.
--Choose the algorithm that matches your needs:
--
--Vector insert sort
-- Stable, but only suitable for small vectors -- O(n^2).
--
--Vector quick sort
-- Not stable. Is fast on average -- O(n lg n) -- but has bad worst-case
-- behaviour. Has good memory locality for big vectors (unlike heap sort).
-- A clever pivot-picking trick (median of three samples) helps avoid
-- worst-case behaviour, but pathological cases can still blow up.
--
--Vector heap sort
-- Not stable. Guaranteed fast -- O(n lg n) *worst* case. Poor locality
-- on large vectors. A very reliable workhorse.
--
--Vector merge sort
-- Stable. Not in-place -- requires a temporary buffer of equal size.
-- Fast -- O(n lg n) -- and has good memory locality for large vectors.
--
-- The implementation of vector merge sort provided by this SRFI's reference
-- implementation is, additionally, a "natural" sort, meaning that it
-- exploits existing order in the input data, providing O(n) best case.
--
--Destructive list merge sort
-- Stable, fast and in-place (i.e., allocates no new cons cells). "Fast"
-- means O(n lg n) worse-case, and substantially better if the data
-- is already mostly ordered, all the way down to linear time for
-- a completely-ordered input list (i.e., it is a "natural" sort).
--
-- Note that sorting lists involves chasing pointers through memory, which
-- can be a loser on modern machine architectures because of poor cache &
-- page locality. Pointer *writing*, which is what the SET-CDR!s of a
-- destructive list-sort algorithm do, is even worse, especially if your
-- Scheme has a generational GC -- the writes will thrash the write-barrier.
-- Sorting vectors has inherently better locality.
--
-- This SRFI's destructive list merge and merge sort implementations are
-- opportunistic -- they avoid redundant SET-CDR!s, and try to take long
-- already-ordered runs of list structure as-is when doing the merges.
--
--Pure list merge sort
-- Stable and fast -- O(n lg n) worst-case, and possibly O(n), depending
-- upon the input list (see discussion above).
--
--
--Algorithm Stable? Worst case Average case In-place
--------------------------------------------------------
--Vector insert Yes O(n^2) O(n^2) Yes
--Vector quick No O(n^2) O(n lg n) Yes
--Vector heap No O(n lg n) O(n lg n) Yes
--Vector merge Yes O(n lg n) O(n lg n) No
--List merge Yes O(n lg n) O(n lg n) Either
--
--
---------------------------------------------------------------------------------
--* Porting and optimisation
----------------------------
--This package should be trivial to port. There are only four non-R4RS bits
--in the code:
--- Use of multiple-value return, with the R5RS VALUES procedure, and the
-- simple (RECEIVE (var ...) mv-exp body ...) multiple-value binding macro
-- of SRFI-8.
--
--- A VECTOR-COPY procedure. This is a tiny little procedure:
-- (vector-copy v [start end])
--
--- Use of the LET-OPTIONALS macro from scsh to parse and default optional
-- arguments to three routines. Again, easy to port the macro or rewrite
-- the code to parse, default, and error check the args by hand.
--
--- Calls to an ERROR function for complaining about bad arguments.
--
--This code is tightly bummed, as far as I can go in portable Scheme.
--
--You could speed up the vector code a lot by error-checking the procedure
--parameters and then shifting over to fixnum-specific arithmetic and dangerous
--vector-indexing and vector-setting primitives. The comments in the code
--indicate where the initial error checks would have to be added. There are
--several (QUOTIENT N 2)'s that could be changed to a fixnum right-shift, as
--well, in both the list and vector code (SRFI 33 provides such an operator).
--The code is designed to enable this -- each file usually exports one or two
--"safe" procedures that end up calling an internal "dangerous" primitive. The
--little exported cover procedures are where you move the error checks.
--
--This should provide *big* speedups. In fact, all the code bumming I've done
--pretty much disappears in the noise unless you have a good compiler and also
--can dump the vector-index checks and generic arithmetic -- so I've really just
--set things up for you to exploit.
--
--The optional-arg parsing, defaulting, and error checking is done with a
--portable R4RS macro. But if your Scheme has a faster mechanism (e.g., Chez),
--you should definitely port over to it. Note that argument defaulting and
--error-checking are interleaved -- you don't have to error-check defaulted
--START/END args to see if they are fixnums that are legal vector indices for
--the corresponding vector, etc.
--
--
---------------------------------------------------------------------------------
--* References & Links
----------------------
--
--This document, in HTML:
-- http://srfi.schemers.org/srfi-32/srfi-32.html
-- [This link may not be valid while the SRFI is in draft form.]
--
--This document, in simple text format:
-- http://srfi.schemers.org/srfi-32/srfi-32.txt
--
--Archive of SRFI-32 discussion-list email:
-- http://srfi.schemers.org/srfi-32/mail-archive/maillist.html
--
--SRFI web site:
-- http://srfi.schemers.org/
--
--[CommonLisp]
-- Common Lisp: the Language
-- Guy L. Steele Jr. (editor).
-- Digital Press, Maynard, Mass., second edition 1990.
-- Available at http://www.elwood.com/alu/table/references.htm#cltl2
--
-- The Common Lisp "HyperSpec," produced by Kent Pitman, is essentially
-- the ANSI spec for Common Lisp:
-- http://www.xanalys.com/software_tools/reference/HyperSpec/
--
--[R5RS]
-- Revised^5 Report on the Algorithmic Language Scheme,
-- R. Kelsey, W. Clinger, J. Rees (editors).
-- Higher-Order and Symbolic Computation, Vol. 11, No. 1, September, 1998.
-- and ACM SIGPLAN Notices, Vol. 33, No. 9, October, 1998.
--
-- Available at http://www.schemers.org/Documents/Standards/
--
--
---------------------------------------------------------------------------------
--* Acknowledgements
--------------------
--
--I thank the authors of the open source I consulted when designing this
--library, particularly Richard O'Keefe, Donovan Kolby and the MIT Scheme Team.
--
--
---------------------------------------------------------------------------------
--* Copyright
-------------
--
--** SRFI text
--============
--This document is copyright (C) Olin Shivers (1998, 1999).
--All Rights Reserved.
--
--This document and translations of it may be copied and furnished to others,
--and derivative works that comment on or otherwise explain it or assist in its
--implementation may be prepared, copied, published and distributed, in whole or
--in part, without restriction of any kind, provided that the above copyright
--notice and this paragraph are included on all such copies and derivative
--works. However, this document itself may not be modified in any way, such as
--by removing the copyright notice or references to the Scheme Request For
--Implementation process or editors, except as needed for the purpose of
--developing SRFIs in which case the procedures for copyrights defined in the
--SRFI process must be followed, or as required to translate it into languages
--other than English.
--
--The limited permissions granted above are perpetual and will not be revoked by
--the authors or their successors or assigns.
--
--This document and the information contained herein is provided on an "AS IS"
--basis and THE AUTHORS AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR
--IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
--INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
--MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
--
--** Reference implementation
--===========================
--Short summary: no restrictions.
--
--While I wrote all of this code myself, I read a lot of code before I began
--writing. However, all such code is, itself, either open source or public
--domain, rendering irrelevant any issue of "copyright taint."
--
--The natural merge sorts (pure list, destructive list, and vector) are not only
--my own code, but are implementations of an algorithm of my own devising. They
--run in O(n lg n) worst case, O(n) best case, and require only a logarithmic
--number of stack frames. And they are stable. And the destructive-list variant
--allocates zero cons cells; it simply rearranges the cells of the input list.
--
--Hence the reference implementation is
-- Copyright (c) 1998 by Olin Shivers.
--and made available under the same copyright as the SRFI text (see above).
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/32/srfi-32.txt racket-6.12/share/pkgs/srfi-lib/srfi/32/srfi-32.txt
---- racket-6.12-orig/share/pkgs/srfi-lib/srfi/32/srfi-32.txt 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib/srfi/32/srfi-32.txt 2018-01-31 12:22:58.152501970 -0500
-@@ -0,0 +1,938 @@
-+The SRFI-32 sort libraries -*- outline -*-
-+Olin Shivers
-+First draft: 1998/10/19
-+Last update: 2002/7/21
-+
-+Emacs should display this document in outline mode. Say c-h m for
-+instructions on how to move through it by sections (e.g., c-c c-n, c-c c-p).
-+
-+* Table of contents
-+-------------------
-+Abstract
-+Procedure index
-+Introduction
-+What's wrong with the current state of affairs?
-+Design rules
-+ What vs. how
-+ Consistency across function signatures
-+ Data parameter first, less-than parameter after
-+ Ordering, comparison functions & stability
-+ All vector operations accept optional subrange parameters
-+ Required vs. allowed side-effects
-+Procedure specification
-+ Procedure naming and functionality
-+ Types of parameters and return values
-+ sort-lib - general sorting package
-+ Algorithm-specific sorting packages
-+Algorithmic properties
-+Topics to be resolved during discussion phase
-+Porting and optimisation
-+References & Links
-+Acknowledgements
-+Copyright
-+
-+
-+* Abstract
-+----------
-+Current Scheme sorting packages are, every one of them, surprisingly bad. I've
-+designed the API for a full-featured sort toolkit, which I propose as an SRFI.
-+The spec comes with 1200 lines of high-quality reference code: tightly
-+written, highly commented, portable code, available for free. Implementors
-+want this code. It's better than what you have.
-+
-+-------------------------------------------------------------------------------
-+* Procedure index
-+-----------------
-+list-sorted? vector-sorted?
-+
-+list-merge vector-merge
-+list-sort vector-sort
-+list-stable-sort vector-stable-sort
-+list-delete-neighbor-dups vector-delete-neighbor-dups
-+
-+list-merge! vector-merge!
-+list-sort! vector-sort!
-+list-stable-sort! vector-stable-sort!
-+list-delete-neighbor-dups! vector-delete-neighbor-dups!
-+
-+heap-sort quick-sort insert-sort list-merge-sort vector-merge-sort
-+heap-sort! quick-sort! insert-sort! list-merge-sort! vector-merge-sort!
-+
-+-------------------------------------------------------------------------------
-+* Introduction
-+--------------
-+As I'll detail bewlow, I wasn't very happy with the state of the Scheme
-+world for sorting and merging lists and vectors. So I have designed and
-+written a fairly comprehensive sorting & merging toolkit. It is
-+
-+ - very portable,
-+
-+ - much better code than what is currently in Elk, Gambit, Bigloo,
-+ Scheme->C, MzScheme, RScheme, Scheme48, MIT Scheme, or slib, and
-+
-+ - priced to move: free code.
-+
-+The package includes
-+ - Vector insert sort (stable)
-+ - Vector heap sort
-+ - Vector quick sort (with median-of-3 pivot picking)
-+ - Vector merge sort (stable)
-+ - Pure and destructive list merge sort (stable)
-+ - Stable vector and list merge
-+ - Miscellaneous sort-related procedures: Vector and list merging,
-+ sorted? predicates, vector binary search, vector and list
-+ delete-equal-neighbor procedures.
-+ - A general, non-algorithmic set of procedure names for general sorting
-+ and merging.
-+
-+Scheme programmers may want to adopt this package. I'd like Scheme
-+implementors to adopt this code and its API -- in fact, the code is a bribe to
-+make it easy for implementors to converge on the suggested API. I mean, you'd
-+really have to be a boor to take this free code I wrote and mutate its
-+interface over to your incompatible, unportable API, wouldn't you? But you
-+could, of course -- it's freely available. More in the spirit of the offering,
-+you could make this API available, and then also write a little module
-+providing your old interface that is defined in terms of this API. "Scheme
-+implementors," in this context, includes slib, which isn't really a standalone
-+implementation of Scheme, but is an influential collection of API's and code.
-+
-+The code is tightly bummed. It is clearly written, and commented in my usual
-+voluminous style. This includes notes on porting and implementation-specific
-+optimisations.
-+
-+
-+-------------------------------------------------------------------------------
-+* What's wrong with the current state of affairs?
-+-------------------------------------------------
-+
-+It's just amazing to me that in 2002, sorting and merging hasn't been
-+completely put to bed. These are well-understood algorithms, each of them well
-+under a page of code. The straightforward algorithms are basic, core stuff --
-+sophomore-level. But if you tour the major Scheme implementations out there on
-+the Net, you find badly written code that provides extremely spotty coverage
-+of the algorithm space. One implementation even has a buggy implementation
-+that has been in use for about 20 years!
-+
-+Open source-code is a wonderful thing. In a couple of hours, I was able to
-+download and check the sources of 9 Scheme systems. Here are my notes from the
-+systems I checked. You can skip to the next section if you aren't morbidly
-+curious.
-+
-+slib
-+ sorted? vector-or-list <
-+ merge list1 list2 <
-+ merge! list1 list2 <
-+ sort vector-or-list <
-+ sort! vector-or-list <
-+
-+ Richard O'Keefe's stable list merge sort is right idea, but implemented
-+ using gratuitous variable side effects. It also does redundant SET-CDR!s.
-+ The vector sort converts to list, merge sorts, then reconverts
-+ to vector. This is a bad idea -- non-local pointer chasing bad; vector
-+ shuffling good.
-+
-+MIT Scheme
-+ sort! vector <
-+ merge-sort! vector <
-+ quick-sort! vector <
-+
-+ sort vector-or-list <
-+ merge-sort vector-or-list <
-+ quick-sort vector-or-list <
-+
-+ Naive vector quicksort: loser, for worst-case performance reasons.
-+ List sort by "list->vector; quicksort; vector->list," hence also loser.
-+ A clever stable vector merge sort, albeit not very bummed.
-+
-+Scheme 48 & T
-+ sort-list list <
-+ sort-list! list <
-+ list-merge! list1 list2 <
-+
-+ Bob Nix's implementation of online merge-sort, written in the early 80's.
-+ Conses unnecessary bookkeeping structure, which isn't necessary with a
-+ proper recursive formulation. Also, does redundant SET-CDR!s. No vector
-+ sort. Also, has a bug -- is claimed to be a stable sort, but isn't! To see
-+ this, get the S48 code, and try
-+ (define (my< x y) (< (quotient x 2) (quotient y 2)))
-+ (list-merge! (list 0 2) (list 3) my<) ; -> (0 2 3)
-+ (list-merge! (list 2) (list 0 3) my<) ; -> (0 3 2)
-+ This could be fixed very easily, but it isn't worth it given the
-+ other problems with the algorithm.
-+
-+RScheme
-+ vector-sort! vector <
-+ sort collection <
-+
-+ Good basic implementation of vector heapsort, which has O(n lg n)
-+ worst-case time. Code ugly, needs tuning. List sort by "list->vector;
-+ sort; vector->list", which allocates unneeded temp storage. Nothing
-+ for stable sorting.
-+
-+MzScheme
-+ Naive quicksort -- but not available for vector sorting, even
-+ though it internally uses a vector. Nothing for stable sorting,
-+ and naive quicksort has bad worst-case behaviour.
-+
-+Bigloo, Scheme->C
-+ Couldn't find anything -- but maybe I didn't search for the right
-+ thing, since the Bigloo names are French. (I invite correction from
-+ the Bigloo implementors.)
-+
-+Gambit
-+ sort-list list <
-+ Nothing for vectors. Simple, slow, unstable merge sort for lists.
-+
-+Elk
-+ Another naive quicksort. Lists handled by converting to vector.
-+ sort vector-or-list <
-+ sort! vector-or-list <
-+
-+Chez Scheme
-+ merge < list1 list2
-+ merge! < list1 list2
-+ sort < list
-+ sort! < list
-+
-+ These are stable. I have not seen the source code.
-+
-+Common Lisp
-+ sort sequence < [key]
-+ stable-sort sequence < [key]
-+ merge result-type sequence1 sequence2 < [key]
-+
-+ The sort procedures are allowed, but not required, to be destructive.
-+
-+SML/NJ
-+ sort: ('a*'a -> bool) -> 'a list -> 'a list
-+ "Smooth applicative merge sort," which is stable.
-+ There is also a highly bummed quicksort for vectors.
-+
-+The right solution: Implement a full toolbox of carefully written standard sort
-+routines.
-+
-+Having the source available for all of these above-cited Schemes made
-+life a lot easier writing this code. I appreciate the authors making their
-+source available under such open terms.
-+
-+
-+-------------------------------------------------------------------------------
-+* Design rules
-+--------------
-+
-+** What vs. how
-+===============
-+There are two different interfaces: "what" (simple) & "how" (detailed).
-+
-+ - Simple: you specify semantics: datatype (list or vector),
-+ mutability, and stability.
-+
-+ - Detailed: you specify the actual algorithm (quick, heap,
-+ insert, merge). Different algorithms have different properties,
-+ both semantic & pragmatic, so these exports are necessary.
-+
-+ It is necessarily the case that the specifications of these procedures
-+ make statements about execution "pragmatics." For example, the sole
-+ distinction between heap sort and quick sort -- both of which are
-+ provided by this library -- is one of execution time, which is not a
-+ "semantic" distinction. Similar resource-use statements are made about
-+ "iterative" procedures, meaning that they can execute on input of
-+ arbitrary size without needing to allocate an unbounded number of stack
-+ frames.
-+
-+** Consistency across function signatures
-+=========================================
-+The two interfaces share common function signatures wherever
-+possible, to facilitate switching a given call from one procedure
-+to another.
-+
-+** Data parameter first, less-than parameter after
-+==================================================
-+These procedures uniformly observe the following parameter order:
-+the data to be sorted come before the the comparison function.
-+That is, we write
-+ (sort lis <)
-+not
-+ (sort < lis).
-+This is consistent with every single implementation out there, with
-+the sole exception of Chez Scheme.
-+
-+In my opinion, it would be more consistent with other Scheme libraries
-+to put the ordering function first -- the "operation currying" convention.
-+(E.g., consider FOR-EACH or MAP or FIND.) I decided to leave things as they
-+are in favor of near-total backwards compatibility with existing practice.
-+
-+[Perhaps this should be discussed.]
-+
-+** Ordering, comparison functions & stability
-+=============================================
-+These routines take a < comparison function, not a <= comparison
-+function, and they sort into increasing order. The difference between
-+a < spec and a <= spec comes up in two places:
-+ - the definition of an ordered or sorted data set, and
-+ - the definition of a stable sorting algorithm.
-+
-++ We say that a data set (a list or vector) is *sorted* or *ordered*
-+ if it contains no adjacent pair of values ... X Y ... such that Y < X.
-+
-+ In other words, scanning across the data never takes a "downwards" step.
-+
-+ If you use a <= procedure where these algorithms expect a <
-+ procedure, you may not get the answers you expect. For example,
-+ the LIST-SORTED? function will return false if you pass it a <= comparison
-+ function and an ordered list containing adjacent equal elements.
-+
-++ A "stable" sort is one that preserves the pre-existing order of equal
-+ elements. Suppose, for example, that we sort a list of numbers by
-+ comparing their absolute values, i.e., using comparison function
-+ (lambda (x y) (< (abs x) (abs y)))
-+ If we sort a list that contains both 3 and -3:
-+ ... 3 ... -3 ...
-+ then a stable sort is an algorithm that will not swap the order
-+ of these two elements, that is, the answer will look like
-+ ... 3 -3 ...
-+ not
-+ ... -3 3 ...
-+
-+ Choosing < for the comparison function instead of <= affects how stability
-+ is coded. Given an adjacent pair X Y, (< y x) means "Y should be moved in
-+ front of X" -- otherwise, leave things as they are. So using a <= function
-+ where a < function is expected will *invert* stability.
-+
-+ This is due to the definition of equality, given a < comparator:
-+ (and (not (< x y))
-+ (not (< y x)))
-+ The definition is rather different, given a <= comparator:
-+ (and (<= x y)
-+ (<= x y))
-+
-++ A "stable" merge is one that reliably favors one of its data sets
-+ when equal items appear in both data sets. *All merge operations in
-+ this library are stable*, breaking ties between data sets in favor
-+ of the first data set -- elements of the first list come before equal
-+ elements in the second list.
-+
-+ So, if we are merging two lists of numbers ordered by absolute value
-+ using the stable merge operation LIST-MERGE
-+ (list-merge '(0 -2 4 8 -10) '(-1 3 -4 7)
-+ (lambda (x y) (< (abs x) (abs y))))
-+ reliably places the 4 of the first list before the equal-comparing -4
-+ of the second list:
-+ (0 -1 -2 4 -4 7 8 -10)
-+
-+In short, if your comparison function F answers true to (F x x), then
-+using a stable sorting or merging algorithm will not give you a stable sort
-+or merge, and LIST-SORTED? may surprise you. Note that you can synthesize a <
-+function from a <= function with
-+ (lambda (x y) (not (<= y x)))
-+if need be.
-+
-+Precise definitions give sharp edges to tools, but require care
-+in use. "Measure twice, cut once."
-+
-+I have adopted the choice of < from Common Lisp. I assume they
-+had a good reason for adopting < instead of <=. I'd love to know
-+what this reason is; send me email if you can explain it, please.
-+
-+** All vector operations accept optional subrange parameters
-+============================================================
-+The vector operations specified below all take optional START/END arguments
-+indicating a selected subrange of a vector's elements. If a START parameter or
-+START/END parameter pair is given to such a procedure, they must be exact,
-+non-negative integers, such that
-+ 0 <= START <= END <= (VECTOR-LENGTH V)
-+where V is the related vector parameter. If not specified, they default to 0
-+and the length of the vector, respectively. They are interpreted to select the
-+range [START,END), that is, all elements from index START (inclusive) up to,
-+but not including, index END.
-+
-+** Required vs. allowed side-effects
-+====================================
-+LIST-SORT! and LIST-STABLE-SORT! are allowed, but not required,
-+to alter their arguments' cons cells to construct the result list. This is
-+consistent with the what-not-how character of the group of procedures
-+to which they belong (the "sort-lib" package).
-+
-+The LIST-DELETE-NEIGHBOR-DUPS!, LIST-MERGE! and LIST-MERGE-SORT! procedures,
-+on the other hand, provide specific algorithms, and, as such, explicitly
-+commit to the use of side-effects on their input lists in order to guarantee
-+their key algorithmic properties (e.g., linear-time operation, constant-space
-+stack use).
-+
-+-------------------------------------------------------------------------------
-+* Procedure specification
-+-------------------------
-+The procedures are split into several packages. In a Scheme system that has a
-+module or package system, these procedures should be contained in modules
-+named as follows:
-+ Package name Functionality
-+ ------------ -------------
-+ sort-lib General sorting for lists & vectors
-+ sorted?-lib Sorted predicates for lists & vectors
-+ list-merge-sort-lib List merge sort
-+ vector-merge-sort-lib Vector merge sort
-+ vector-heap-sort-lib Vector heap sort
-+ vector-quick-sort-lib Vector quick sort
-+ vector-insert-sort-lib Vector insertion sort
-+ delndup-lib List and vector delete neighbor duplicates
-+
-+A Scheme system without a module system should provide all of the bindings
-+defined in all of these modules as components of the "SRFI-32" package.
-+
-+Note that there is no list insert sort package, as you might as well always
-+use list merge sort. The reference implementation's destructive list merge
-+sort will do fewer SET-CDR!s than a destructive insert sort.
-+
-+** Procedure naming and functionality
-+=====================================
-+Almost all of the procedures described below are variants of two basic
-+operations: sorting and merging. These procedures are consistently named
-+by composing a set of basic lexemes to indicate what they do.
-+
-+Lexeme Meaning
-+------ -------
-+"sort" The procedure sorts its input data set by some < comparison function.
-+
-+"merge" The procedure merges two ordered data sets into a single ordered
-+ result.
-+
-+"stable" This lexeme indicates that the sort is a stable one.
-+
-+"vector" The procedure operates upon vectors.
-+
-+"list" The procedure operates upon lists.
-+
-+"!" Procedures that end in "!" are allowed, and sometimes required,
-+ to reuse their input storage to construct their answer.
-+
-+** Types of parameters and return values
-+========================================
-+In the procedures specified below,
-+ - A LIS parameter is a list;
-+
-+ - A V parameter is a vector;
-+
-+ - A < or = parameter is a procedure accepting two arguments taken from the
-+ specified procedure's data set(s), and returning a boolean;
-+
-+ - START and END parameters are exact, non-negative integers that
-+ serve as vector indices selecting a subrange of some associated vector.
-+ When specified, they must satisfy the relation
-+ 0 <= start <= end <= (vector-length v)
-+ where V is the associated vector.
-+
-+Passing values to procedures with these parameters that do not satisfy these
-+types is an error.
-+
-+If a procedure is said to return "unspecified," this means that nothing at all
-+is said about what the procedure returns, not even the number of return
-+values. Such a procedure is not even required to be consistent from call to
-+call in the nature or number of its return values. It is simply required to
-+return a value (or values) that may be passed to a command continuation, e.g.
-+as the value of an expression appearing as a non-terminal subform of a BEGIN
-+expression. Note that in R5RS, this restricts such a procedure to returning a
-+single value; non-R5RS systems may not even provide this restriction.
-+
-+** sort-lib - general sorting package
-+=====================================
-+This library provides basic sorting and merging functionality suitable for
-+general programming. The procedures are named by their semantic properties,
-+i.e., what they do to the data (sort, stable sort, merge, and so forth).
-+
-+ Procedure Suggested algorithm
-+ -------------------------------------------------------------------------
-+ list-sorted? lis < -> boolean
-+ list-merge lis1 lis2 < -> list
-+ list-merge! lis1 lis2 < -> list
-+ list-sort lis < -> list (vector heap or quick)
-+ list-sort! lis < -> list (list merge sort)
-+ list-stable-sort lis < -> list (vector merge sort)
-+ list-stable-sort! lis < -> list (list merge sort)
-+ list-delete-neighbor-dups lis = -> list
-+ list-delete-neighbor-dups! lis = -> list
-+
-+ vector-sorted? v < [start end] -> boolean
-+ vector-merge v1 v2 < [start1 end1 start2 end2] -> vector
-+ vector-merge! v v1 v2 < [start start1 end1 start2 end2] -> unspecific
-+ vector-sort v < [start end] -> vector (heap or quick sort)
-+ vector-sort! v < [start end] -> unspecific (heap or quick sort)
-+ vector-stable-sort v < [start end] -> vector (vector merge sort)
-+ vector-stable-sort! v < [start end] -> unspecific (vector merge sort)
-+ vector-delete-neighbor-dups v = [start end] -> vector
-+ vector-delete-neighbor-dups! v = [start end] -> end'
-+
-+ LIST-SORTED? and VECTOR-SORTED? return true if their input list or vector
-+ is in sorted order, as determined by their < comparison parameter.
-+
-+ All four merge operations are stable: an element of the initial list LIS1
-+ or vector V1 will come before an equal-comparing element in the second
-+ list LIS2 or vector V2 in the result.
-+
-+ The procedures
-+ LIST-MERGE
-+ LIST-SORT
-+ LIST-STABLE-SORT
-+ LIST-DELETE-NEIGHBOR-DUPS
-+ do not alter their inputs and are allowed to return a value that shares
-+ a common tail with a list argument.
-+
-+ The procedures
-+ LIST-SORT!
-+ LIST-STABLE-SORT!
-+ are "linear update" operators -- they are allowed, but not required, to
-+ alter the cons cells of their arguments to produce their results.
-+
-+ On the other hand, the procedures
-+ LIST-DELETE-NEIGHBOR-DUPS!
-+ LIST-MERGE!
-+ make only a single, iterative, linear-time pass over their argument lists,
-+ using SET-CDR!s to rearrange the cells of the lists into the final result
-+ -- they work "in place." Hence, any cons cell appearing in the result must
-+ have originally appeared in an input. The intent of this
-+ iterative-algorithm commitment is to allow the programmer to be sure that
-+ if, for example, LIST-MERGE! is asked to merge two ten-million-element
-+ lists, the operation will complete without performing some extremely
-+ (possibly twenty-million) deep recursion.
-+
-+ The vector procedures
-+ VECTOR-SORT
-+ VECTOR-STABLE-SORT
-+ VECTOR-DELETE-NEIGHBOR-DUPS
-+ do not alter their inputs, but allocate a fresh vector for their result,
-+ of length END-START.
-+
-+ The vector procedures
-+ VECTOR-SORT!
-+ VECTOR-STABLE-SORT!
-+ sort their data in-place. (But note that VECTOR-STABLE-SORT! may
-+ allocate temporary storage proportional to the size of the input --
-+ I am not aware of O(n lg n) stable vector sorting algorithms that
-+ run in constant space.)
-+
-+ VECTOR-MERGE returns a vector of length (END1-START1)+(END2-START2).
-+
-+ VECTOR-MERGE! writes its result into vector V, beginning at index START0,
-+ for indices less than END0 = START0 + (END1-START1) + (END2-START2). The
-+ target subvector
-+ V[start0,end0)
-+ may not overlap either source subvector
-+ V1[start1,end1)
-+ V2[start2,end2).
-+
-+ The DELETE-NEIGHBOR-DUP-... procedures:
-+ These procedures delete adjacent duplicate elements from a list or a
-+ vector, using a given element-equality procedure. The first/leftmost
-+ element of a run of equal elements is the one that survives. The list or
-+ vector is not otherwise disordered.
-+
-+ These procedures are linear time -- much faster than the O(n^2) general
-+ duplicate-element deletors that do not assume any "bunching" of elements
-+ (such as the ones provided by SRFI-1). If you want to delete duplicate
-+ elements from a large list or vector, sort the elements to bring equal
-+ items together, then use one of these procedures, for a total time of
-+ O(n lg n).
-+
-+ The comparison function = passed to these procedures is always applied
-+ (= x y)
-+ where X comes before Y in the containing list or vector.
-+
-+ - LIST-DELETE-NEIGHBOR-DUPS does not alter its input list; its answer
-+ may share storage with the input list.
-+
-+ - VECTOR-DELETE-NEIGHBOR-DUPS does not alter its input vector, but
-+ rather allocates a fresh vector to hold the result.
-+
-+ - LIST-DELETE-NEIGHBOR-DUPS! is permitted, but not required, to
-+ mutate its input list in order to construct its answer.
-+
-+ - VECTOR-DELETE-NEIGHBOR-DUPS! reuses its input vector to hold the
-+ answer, packing its answer into the index range [start,end'), where
-+ END' is the non-negative exact integer returned as its value. It
-+ returns END' as its result. The vector is not altered outside the range
-+ [start,end').
-+
-+ [Maybe this procedure should take a "target" vector to write?]
-+
-+ - Examples:
-+ (list-delete-neighbor-dups '(1 1 2 7 7 7 0 -2 -2) =)
-+ => (1 2 7 0 -2)
-+
-+ (vector-delete-neighbor-dups '#(1 1 2 7 7 7 0 -2 -2) =)
-+ => #(1 2 7 0 -2)
-+
-+ (vector-delete-neighbor-dups '#(1 1 2 7 7 7 0 -2 -2) = 3 7)
-+ => #(7 0 -2)
-+
-+ ;; Result left in v[3,9):
-+ (let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6)))
-+ (cons (vector-delete-neighbor-dups! v = 3)
-+ v))
-+ => (9 . #(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6))
-+
-+
-+** Algorithm-specific sorting packages
-+======================================
-+These packages provide more specific sorting functionality, that is,
-+specific committment to particular algorithms that have particular
-+pragmatic consequences (such as memory locality, asymptotic running time)
-+beyond their semantic behaviour (sorting, stable sorting, merging, etc.).
-+Programmers that need a particular algorithm can use one of these packages.
-+
-+sorted?-lib - sorted predicates
-+ list-sorted? lis < -> boolean
-+ vector-sorted? v < [start end] -> boolean
-+
-+ Return #f iff there is an adjacent pair ... X Y ... in the input
-+ list or vector such that Y < X. The optional START/END range
-+ arguments restrict VECTOR-SORTED? to the indicated subvector.
-+
-+list-merge-sort-lib - list merge sort
-+ list-merge-sort lis < -> list
-+ list-merge-sort! lis < -> list
-+ list-merge lis1 lis2 < -> list
-+ list-merge! lis1 lis2 < -> list
-+
-+ The sort procedures sort their data using a list merge sort, which is
-+ stable. (The reference implementation is, additionally, a "natural" sort.
-+ See below for the properties of this algorithm.)
-+
-+ The ! procedures are destructive -- they use SET-CDR!s to rearrange the
-+ cells of the lists into the proper order. As such, they do not allocate
-+ any extra cons cells -- they are "in place" sorts. Additionally,
-+ LIST-MERGE! is iterative, not recursive -- it can operate on arguments of
-+ arbitrary size without requiring an unbounded amount of stack space.
-+
-+ The merge operations are stable: an element of LIS1 will come before an
-+ equal-comparing element in LIS2 in the result list.
-+
-+vector-merge-sort-lib - vector merge sort
-+ vector-merge-sort v < [start end temp] -> vector
-+ vector-merge-sort! v < [start end temp] -> unspecific
-+ vector-merge v1 v2 < [start1 end1 start2 end2] -> vector
-+ vector-merge! v v1 v2 < [start0 start1 end1 start2 end2] -> unspecific
-+
-+ The sort procedures sort their data using vector merge sort, which is
-+ stable. (The reference implementation is, additionally, a "natural" sort.
-+ See below for the properties of this algorithm.)
-+
-+ The optional START/END arguments provide for sorting of subranges, and
-+ default to 0 and the length of the corresponding vector.
-+
-+ Merge-sorting a vector requires the allocation of a temporary "scratch"
-+ work vector for the duration of the sort. This scratch vector can be
-+ passed in by the client as the optional TEMP argument; if so, the supplied
-+ vector must be of size >= END, and will not be altered outside the range
-+ [start,end). If not supplied, the sort routines allocate one themselves.
-+
-+ The merge operations are stable: an element of V1 will come before an
-+ equal-comparing element in V2 in the result vector.
-+
-+ VECTOR-MERGE-SORT! leaves its result in V[start,end).
-+
-+ VECTOR-MERGE-SORT returns a vector of length END-START.
-+
-+ VECTOR-MERGE returns a vector of length (END1-START1)+(END2-START2).
-+
-+ VECTOR-MERGE! writes its result into vector V, beginning at index START0,
-+ for indices less than END0 = START0 + (END1-START1) + (END2-START2). The
-+ target subvector
-+ V[start0,end0)
-+ may not overlap either source subvector
-+ V1[start1,end1)
-+ V2[start2,end2).
-+
-+vector-heap-sort-lib - vector heap sort
-+ heap-sort v < [start end] -> vector
-+ heap-sort! v < [start end] -> unspecific
-+
-+ These procedures sort their data using heap sort,
-+ which is not a stable sorting algorithm.
-+
-+ HEAP-SORT returns a vector of length END-START.
-+ HEAP-SORT! is in-place, leaving its result in V[start,end).
-+
-+vector-quick-sort-lib - vector quick sort
-+ quick-sort v < [start end] -> vector
-+ quick-sort! v < [start end] -> unspecific
-+
-+ These procedures sort their data using quick sort,
-+ which is not a stable sorting algorithm.
-+
-+ QUICK-SORT returns a vector of length END-START.
-+ QUICK-SORT! is in-place, leaving its result in V[start,end).
-+
-+vector-insert-sort-lib - vector insertion sort
-+ insert-sort v < [start end] -> vector
-+ insert-sort! v < [start end] -> unspecific
-+
-+ These procedures stably sort their data using insertion sort.
-+
-+ INSERT-SORT returns a vector of length END-START.
-+ INSERT-SORT! is in-place, leaving its result in V[start,end).
-+
-+delndup-lib - list and vector delete neighbor duplicates
-+ list-delete-neighbor-dups lis = -> list
-+ list-delete-neighbor-dups! lis = -> list
-+
-+ vector-delete-neighbor-dups v = [start end] -> vector
-+ vector-delete-neighbor-dups! v = [start end] -> end'
-+
-+ These procedures delete adjacent duplicate elements from a list or
-+ a vector, using a given element-equality procedure =. The first/leftmost
-+ element of a run of equal elements is the one that survives. The list
-+ or vector is not otherwise disordered.
-+
-+ These procedures are linear time -- much faster than the O(n^2) general
-+ duplicate-element deletors that do not assume any "bunching" of elements
-+ (such as the ones provided by SRFI-1). If you want to delete duplicate
-+ elements from a large list or vector, sort the elements to bring equal
-+ items together, then use one of these procedures, for a total time of
-+ O(n lg n).
-+
-+ The comparison function = passed to these procedures is always applied
-+ (= x y)
-+ where X comes before Y in the containing list or vector.
-+
-+ LIST-DELETE-NEIGHBOR-DUPS does not alter its input list; its answer
-+ may share storage with the input list.
-+
-+ VECTOR-DELETE-NEIGHBOR-DUPS does not alter its input vector, but
-+ rather allocates a fresh vector to hold the result.
-+
-+ LIST-DELETE-NEIGHBOR-DUPS! is permitted, but not required, to
-+ mutate its input list in order to construct its answer.
-+
-+ VECTOR-DELETE-NEIGHBOR-DUPS! reuses its input vector to hold the
-+ answer, packing its answer into the index range [start,end'), where
-+ END' is the non-negative exact integer returned as its value. It
-+ returns END' as its result. The vector is not altered outside the range
-+ [start,end').
-+
-+ Examples:
-+ (list-delete-neighbor-dups '(1 1 2 7 7 7 0 -2 -2) =)
-+ => (1 2 7 0 -2)
-+
-+ (vector-delete-neighbor-dups '#(1 1 2 7 7 7 0 -2 -2) =)
-+ => #(1 2 7 0 -2)
-+
-+ (vector-delete-neighbor-dups '#(1 1 2 7 7 7 0 -2 -2) = 3 7)
-+ => #(7 0 -2)
-+
-+ ;; Result left in v[3,9):
-+ (let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6)))
-+ (cons (vector-delete-neighbor-dups! v = 3)
-+ v))
-+ => (9 . #(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6))
-+
-+
-+-------------------------------------------------------------------------------
-+* Algorithmic properties
-+------------------------
-+Different sort and merge algorithms have different properties.
-+Choose the algorithm that matches your needs:
-+
-+Vector insert sort
-+ Stable, but only suitable for small vectors -- O(n^2).
-+
-+Vector quick sort
-+ Not stable. Is fast on average -- O(n lg n) -- but has bad worst-case
-+ behaviour. Has good memory locality for big vectors (unlike heap sort).
-+ A clever pivot-picking trick (median of three samples) helps avoid
-+ worst-case behaviour, but pathological cases can still blow up.
-+
-+Vector heap sort
-+ Not stable. Guaranteed fast -- O(n lg n) *worst* case. Poor locality
-+ on large vectors. A very reliable workhorse.
-+
-+Vector merge sort
-+ Stable. Not in-place -- requires a temporary buffer of equal size.
-+ Fast -- O(n lg n) -- and has good memory locality for large vectors.
-+
-+ The implementation of vector merge sort provided by this SRFI's reference
-+ implementation is, additionally, a "natural" sort, meaning that it
-+ exploits existing order in the input data, providing O(n) best case.
-+
-+Destructive list merge sort
-+ Stable, fast and in-place (i.e., allocates no new cons cells). "Fast"
-+ means O(n lg n) worse-case, and substantially better if the data
-+ is already mostly ordered, all the way down to linear time for
-+ a completely-ordered input list (i.e., it is a "natural" sort).
-+
-+ Note that sorting lists involves chasing pointers through memory, which
-+ can be a loser on modern machine architectures because of poor cache &
-+ page locality. Pointer *writing*, which is what the SET-CDR!s of a
-+ destructive list-sort algorithm do, is even worse, especially if your
-+ Scheme has a generational GC -- the writes will thrash the write-barrier.
-+ Sorting vectors has inherently better locality.
-+
-+ This SRFIs destructive list merge and merge sort implementations are
-+ opportunistic -- they avoid redundant SET-CDR!s, and try to take long
-+ already-ordered runs of list structure as-is when doing the merges.
-+
-+Pure list merge sort
-+ Stable and fast -- O(n lg n) worst-case, and possibly better, depending
-+ upon the input list (see above).
-+
-+
-+Algorithm Stable? Worst case Average case In-place
-+------------------------------------------------------
-+V insert Yes O(n^2) O(n^2) Yes
-+V quick No O(n^2) O(n lg n) Yes
-+V heap No O(n lg n) O(n lg n) Yes
-+V merge Yes O(n lg n) O(n lg n) No
-+L merge Yes O(n lg n) O(n lg n) Either
-+
-+
-+-------------------------------------------------------------------------------
-+* Topics to be resolved during discussion phase
-+-----------------------------------------------
-+I particularly solicit comments about the following topics.
-+
-+- Include VECTOR-BINARY-SEARCH ?
-+ Should we include
-+ (VECTOR-BINARY-SEARCH v key< elt->key key [start end])
-+ in the SRFI? It sort of goes with sorting; it's exactly ten lines of code.
-+
-+- Comparison function before or after the list/vector argument?
-+ Should it be
-+ (list-sort < lis)
-+ or
-+ (list-sort lis <)
-+ There is overwhelming consistency among the implementations: data first,
-+ < after. Only Chez does it differently.
-+
-+ I have done it in the backwards-compatible way. But I prefer the < first,
-+ data after way.
-+
-+
-+-------------------------------------------------------------------------------
-+* Porting and optimisation
-+--------------------------
-+This package should be trivial to port. There are only four non-R4RS bits
-+in the code:
-+- Use of multiple-value return, with the R5RS VALUES procedure, and the
-+ simple (RECEIVE (var ...) mv-exp body ...) multiple-value binding macro.
-+
-+- A VECTOR-COPY procedure. This is a tiny little procedure:
-+ (vector-copy v [start end])
-+
-+- Use of the LET-OPTIONALS macro from scsh to parse and default optional
-+ arguments to three routines. Again, easy to port the macro or rewrite
-+ the code to parse, default, and error check the args by hand.
-+
-+- Calls to an ERROR function for complaining about bad arguments.
-+
-+This code is tightly bummed, as far as I can go in portable Scheme.
-+
-+You could speed up the vector code a lot by error-checking the procedure
-+parameters and then shifting over to fixnum-specific arithmetic and
-+dangerous vector-indexing and vector-setting primitives. The comments
-+in the code indicate where the initial error checks would have to be
-+added. There are several (QUOTIENT N 2)'s that could be changed to a
-+fixnum right-shift, as well, in both the list and vector code. The code
-+is designed to enable this -- each file usually exports one or two "safe"
-+procedures that end up calling an internal "dangerous" primitive. The
-+little exported cover procedures are where you move the error checks.
-+
-+This should provide *big* speedups. In fact, all the code bumming I've done
-+pretty much disappears in the noise unless you have a good compiler and also
-+can dump the vector-index checks and generic arithmetic -- so I've really just
-+set things up for you to exploit.
-+
-+The optional-arg parsing, defaulting, and error checking is done with a
-+portable R4RS macro. But if your Scheme has a faster mechanism (e.g., Chez),
-+you should definitely port over to it. Note that argument defaulting and
-+error-checking are interleaved -- you don't have to error-check defaulted
-+START/END args to see if they are fixnums that are legal vector indices for
-+the corresponding vector, etc.
-+
-+
-+-------------------------------------------------------------------------------
-+* References & Links
-+--------------------
-+
-+This document, in HTML:
-+ http://srfi.schemers.org/srfi-32/srfi-32.html
-+ [This link may not be valid while the SRFI is in draft form.]
-+
-+This document, in simple text format:
-+ http://srfi.schemers.org/srfi-32/srfi-32.txt
-+
-+Archive of SRFI-32 discussion-list email:
-+ http://srfi.schemers.org/srfi-32/mail-archive/maillist.html
-+
-+SRFI web site:
-+ http://srfi.schemers.org/
-+
-+[CommonLisp]
-+ Common Lisp: the Language
-+ Guy L. Steele Jr. (editor).
-+ Digital Press, Maynard, Mass., second edition 1990.
-+ Available at http://www.elwood.com/alu/table/references.htm#cltl2
-+
-+ The Common Lisp "HyperSpec," produced by Kent Pitman, is essentially
-+ the ANSI spec for Common Lisp:
-+ http://www.xanalys.com/software_tools/reference/HyperSpec/
-+
-+[R5RS]
-+ Revised^5 Report on the Algorithmic Language Scheme,
-+ R. Kelsey, W. Clinger, J. Rees (editors).
-+ Higher-Order and Symbolic Computation, Vol. 11, No. 1, September, 1998.
-+ and ACM SIGPLAN Notices, Vol. 33, No. 9, October, 1998.
-+
-+ Available at http://www.schemers.org/Documents/Standards/
-+
-+
-+-------------------------------------------------------------------------------
-+* Acknowledgements
-+------------------
-+
-+I thank the authors of the open source I consulted when designing this
-+library, particularly Richard O'Keefe, Donovan Kolby and the MIT Scheme Team.
-+
-+
-+-------------------------------------------------------------------------------
-+* Copyright
-+-----------
-+
-+** SRFI text
-+============
-+This document is copyright (C) Olin Shivers (1998, 1999).
-+All Rights Reserved.
-+
-+Permission is hereby granted, free of charge, to any person obtaining
-+a copy of this software and associated documentation files (the
-+"Software"), to deal in the Software without restriction, including
-+without limitation the rights to use, copy, modify, merge, publish,
-+distribute, sublicense, and/or sell copies of the Software, and to
-+permit persons to whom the Software is furnished to do so, subject to
-+the following conditions:
-+
-+The above copyright notice and this permission notice shall be
-+included in all copies or substantial portions of the Software.
-+
-+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+
-+** Reference implementation
-+===========================
-+Short summary: no restrictions.
-+
-+While I wrote all of this code myself, I read a lot of code before I began
-+writing. However, all such code is, itself, either open source or public
-+domain, rendering irrelevant any issue of "copyright taint."
-+
-+The natural merge sorts (pure list, destructive list, and vector) are not only
-+my own code, but are implementations of an algorithm of my own devising. They
-+run in O(n lg n) worst case, O(n) best case, and require only a logarithmic
-+number of stack frames. And they are stable. And the destructive-list variant
-+allocates zero cons cells; it simply rearranges the cells of the input list.
-+
-+Hence the reference implementation is
-+ Copyright (c) 1998 by Olin Shivers.
-+and made available under the same copyright as the SRFI text (see above).
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/%3a5/let.rkt racket-6.12/share/pkgs/srfi-lib/srfi/%3a5/let.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib/srfi/%3a5/let.rkt 2018-01-26 15:34:52.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib/srfi/%3a5/let.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1 +0,0 @@
--#lang s-exp srfi/provider srfi/%3a5
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/%3a5.rkt racket-6.12/share/pkgs/srfi-lib/srfi/%3a5.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib/srfi/%3a5.rkt 2018-01-26 15:34:52.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib/srfi/%3a5.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,3 +0,0 @@
--#lang s-exp srfi/provider srfi/5
--
--;; FIXME: "rest arguments" need to generate mutable lists
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/5/let.rkt racket-6.12/share/pkgs/srfi-lib/srfi/5/let.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib/srfi/5/let.rkt 2018-01-26 15:34:52.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib/srfi/5/let.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,86 +0,0 @@
--;;;
--;;; <let.rkt> ---- SRFI 5 A compatible let form with signatures and rest arguments
--;;; Time-stamp: <03/04/08 09:56:06 solsona>
--;;;
--;;; Usually, I would add a copyright notice, and the announce that
--;;; this code is under the LGPL licence. Nevertheless, I only did the
--;;; port to PLT Scheme v200, and here is the copyright notice,
--;;; comments, and licence from the original source:
--;;;
--;;; Copyright (C) Andy Gaynor (1999-2003)
--;;;
--;;; The version of my-let here was cleaned up by: Paul Schlie <schlie(a)attbi.com>.
--;;; Renamed to s:let by Eli Barzilay
--
--#lang scheme/base
--(provide s:let)
--
--(define-syntax s:let
-- (syntax-rules ()
-- ;; standard
-- ((s:let () body ...)
-- (let () body ...))
-- ((s:let ((var val) ...) body ...)
-- (let ((var val) ...) body ...))
--
-- ;; rest style
-- ((s:let ((var val) . bindings) body ...)
-- (let-loop #f bindings (var) (val) (body ...)))
--
-- ;; signature style
-- ((s:let (name bindings ...) body ...)
-- (let-loop name (bindings ...) () () (body ...)))
--
-- ;; standard named style
-- ((s:let name (bindings ...) body ...)
-- (let-loop name (bindings ...) () () (body ...)))
--
-- ))
--
--;; A loop to walk down the list of bindings.
--
--(define-syntax let-loop
-- (syntax-rules ()
--
-- ;; No more bindings - make a LETREC.
-- ((let-loop name () (vars ...) (vals ...) body)
-- ((letrec ((name (lambda (vars ...) . body)))
-- name)
-- vals ...))
--
-- ;; Rest binding, no name
-- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
-- (let ((var val) ... (rest-var (list rest-val ...))) . body))
--
-- ;; Process a (var val) pair.
-- ((let-loop name ((var val) more ...) (vars ...) (vals ...) body)
-- (let-loop name (more ...) (vars ... var) (vals ... val) body))
--
-- ;; End with a rest variable - make a LETREC.
-- ((let-loop name (rest-var rest-vals ...) (vars ...) (vals ...) body)
-- ((letrec ((name (lambda (vars ... . rest-var) . body)))
-- name)
-- vals ... rest-vals ...))))
--
--;; Four loops - normal and `signature-style', each with and without a rest
--;; binding.
--;;
--;;(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
--;; (if (= i n)
--;; f0
--;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
--;;
--;;(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
--;; (if (= i n)
--;; f0
--;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
--;;
--;;(let fibonacci ((n 10) (i 0) . (f 0 1))
--;; (if (= i n)
--;; (car f)
--;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
--;;
--;;(let (fibonacci (n 10) (i 0) . (f 0 1))
--;; (if (= i n)
--;; (car f)
--;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/5.rkt racket-6.12/share/pkgs/srfi-lib/srfi/5.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib/srfi/5.rkt 2018-01-26 15:34:52.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib/srfi/5.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,2 +0,0 @@
--;; module loader for SRFI-5
--#lang s-exp srfi/provider srfi/5/let #:unprefix s:
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/info.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/info.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/info.rkt 2018-01-31 12:22:58.159501944 -0500
-@@ -0,0 +1,14 @@
-+#lang info
-+
-+(define collection 'multi)
-+
-+(define deps '("scheme-lib"
-+ "base"
-+ "r6rs-lib"
-+ "srfi-lib"
-+ "compatibility-lib"))
-+
-+
-+(define pkg-desc "implementation (no documentation) part of \"srfi nonfree\"")
-+
-+(define pkg-authors '(mflatt noel chongkai jay))
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 2018-01-31 12:22:58.159501944 -0500
-@@ -0,0 +1 @@
-+#lang s-exp srfi/provider srfi/%3a5
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 2018-01-31 12:22:58.159501944 -0500
-@@ -0,0 +1,3 @@
-+#lang s-exp srfi/provider srfi/5
-+
-+;; FIXME: "rest arguments" need to generate mutable lists
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 2018-01-31 12:22:58.159501944 -0500
-@@ -0,0 +1,86 @@
-+;;;
-+;;; <let.rkt> ---- SRFI 5 A compatible let form with signatures and rest arguments
-+;;; Time-stamp: <03/04/08 09:56:06 solsona>
-+;;;
-+;;; Usually, I would add a copyright notice, and the announce that
-+;;; this code is under the LGPL licence. Nevertheless, I only did the
-+;;; port to PLT Scheme v200, and here is the copyright notice,
-+;;; comments, and licence from the original source:
-+;;;
-+;;; Copyright (C) Andy Gaynor (1999-2003)
-+;;;
-+;;; The version of my-let here was cleaned up by: Paul Schlie <schlie(a)attbi.com>.
-+;;; Renamed to s:let by Eli Barzilay
-+
-+#lang scheme/base
-+(provide s:let)
-+
-+(define-syntax s:let
-+ (syntax-rules ()
-+ ;; standard
-+ ((s:let () body ...)
-+ (let () body ...))
-+ ((s:let ((var val) ...) body ...)
-+ (let ((var val) ...) body ...))
-+
-+ ;; rest style
-+ ((s:let ((var val) . bindings) body ...)
-+ (let-loop #f bindings (var) (val) (body ...)))
-+
-+ ;; signature style
-+ ((s:let (name bindings ...) body ...)
-+ (let-loop name (bindings ...) () () (body ...)))
-+
-+ ;; standard named style
-+ ((s:let name (bindings ...) body ...)
-+ (let-loop name (bindings ...) () () (body ...)))
-+
-+ ))
-+
-+;; A loop to walk down the list of bindings.
-+
-+(define-syntax let-loop
-+ (syntax-rules ()
-+
-+ ;; No more bindings - make a LETREC.
-+ ((let-loop name () (vars ...) (vals ...) body)
-+ ((letrec ((name (lambda (vars ...) . body)))
-+ name)
-+ vals ...))
-+
-+ ;; Rest binding, no name
-+ ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
-+ (let ((var val) ... (rest-var (list rest-val ...))) . body))
-+
-+ ;; Process a (var val) pair.
-+ ((let-loop name ((var val) more ...) (vars ...) (vals ...) body)
-+ (let-loop name (more ...) (vars ... var) (vals ... val) body))
-+
-+ ;; End with a rest variable - make a LETREC.
-+ ((let-loop name (rest-var rest-vals ...) (vars ...) (vals ...) body)
-+ ((letrec ((name (lambda (vars ... . rest-var) . body)))
-+ name)
-+ vals ... rest-vals ...))))
-+
-+;; Four loops - normal and `signature-style', each with and without a rest
-+;; binding.
-+;;
-+;;(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
-+;; (if (= i n)
-+;; f0
-+;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
-+;;
-+;;(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
-+;; (if (= i n)
-+;; f0
-+;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
-+;;
-+;;(let fibonacci ((n 10) (i 0) . (f 0 1))
-+;; (if (= i n)
-+;; (car f)
-+;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
-+;;
-+;;(let (fibonacci (n 10) (i 0) . (f 0 1))
-+;; (if (= i n)
-+;; (car f)
-+;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
-diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/5.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5.rkt
---- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 1969-12-31 19:00:00.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 2018-01-31 12:22:58.159501944 -0500
-@@ -0,0 +1,2 @@
-+;; module loader for SRFI-5
-+#lang s-exp srfi/provider srfi/5/let #:unprefix s:
-diff -urN racket-6.12-orig/share/pkgs/srfi-lite-lib/info.rkt racket-6.12/share/pkgs/srfi-lite-lib/info.rkt
---- racket-6.12-orig/share/pkgs/srfi-lite-lib/info.rkt 2018-01-26 16:10:04.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lite-lib/info.rkt 2018-01-31 12:22:58.160501940 -0500
-@@ -1 +1,9 @@
--(module info setup/infotab (#%module-begin (define package-content-state (quote (built "6.12"))) (define collection (quote multi)) (define deps (quote ("base"))) (define pkg-desc "implementation of the most widely used \"srfi\" libraries") (define pkg-authors (quote (mflatt)))))
-+#lang info
-+
-+(define collection 'multi)
-+
-+(define deps '("base"))
-+
-+(define pkg-desc "implementation of the most widely used \"srfi\" libraries")
-+
-+(define pkg-authors '(mflatt))
-Binary files racket-6.12-orig/share/pkgs/srfi-lite-lib/.info.rkt.swp and racket-6.12/share/pkgs/srfi-lite-lib/.info.rkt.swp differ
-diff -urN racket-6.12-orig/share/pkgs/srfi-lite-lib/srfi/29/localization.rkt racket-6.12/share/pkgs/srfi-lite-lib/srfi/29/localization.rkt
---- racket-6.12-orig/share/pkgs/srfi-lite-lib/srfi/29/localization.rkt 2018-01-26 15:34:52.000000000 -0500
-+++ racket-6.12/share/pkgs/srfi-lite-lib/srfi/29/localization.rkt 2018-01-31 12:22:58.162501933 -0500
-@@ -2,6 +2,7 @@
-
- (require racket/contract/base
- racket/file
-+ racket/list
- (only-in racket/runtime-path define-runtime-path)
- racket/string racket/format
- syntax/modread
-@@ -113,10 +114,6 @@
- (lambda ()
- (with-input-from-file path read))))
- #t))))
-- (define (rdc ls)
-- (if (null? (cdr ls))
-- '()
-- (cons (car ls) (rdc (cdr ls)))))
-
- ;;Retrieve a localized template given its package name and a template name
- (define (localized-template package-name template-name)
-@@ -127,5 +124,5 @@
- (let ((bundle (hash-ref *localization-bundles* specifier #f)))
- (cond ((and bundle (assq template-name bundle)) => cdr)
- ((null? (cdr specifier)) #f)
-- (else (loop (rdc specifier))))))))
-+ (else (loop (drop-right specifier 1))))))))
- )
diff --git a/racket-6.12-fix-doc-open-url.patch b/racket-7.0-fix-doc-open-url.patch
similarity index 100%
rename from racket-6.12-fix-doc-open-url.patch
rename to racket-7.0-fix-doc-open-url.patch
diff --git a/racket-6.12-remove-nonfree.patch b/racket-7.0-remove-nonfree.patch
similarity index 87%
rename from racket-6.12-remove-nonfree.patch
rename to racket-7.0-remove-nonfree.patch
index 4e72a3e..778001a 100644
--- a/racket-6.12-remove-nonfree.patch
+++ b/racket-7.0-remove-nonfree.patch
@@ -1,74 +1,37 @@
-diff -urN racket-6.12-nf/share/links.rktd racket-6.12/share/links.rktd
---- racket-6.12-nf/share/links.rktd 2018-01-31 13:04:06.757393819 -0500
-+++ racket-6.12/share/links.rktd 2018-01-31 13:04:25.419309681 -0500
-@@ -133,7 +133,6 @@
- (root "pkgs/r5rs-doc")
- (root "pkgs/srfi-lite-lib")
- (root "pkgs/srfi-lib")
-- (root "pkgs/srfi-lib-nonfree")
- (root "pkgs/html-doc")
- (root "pkgs/images-gui-lib")
- (root "pkgs/images-doc")
-@@ -177,7 +176,6 @@
+diff -urN racket-7.0.orig/share/links.rktd racket-7.0/share/links.rktd
+--- racket-7.0.orig/share/links.rktd 2018-08-03 15:23:48.604561727 -0400
++++ racket-7.0/share/links.rktd 2018-08-03 15:23:45.481540939 -0400
+@@ -175,9 +175,7 @@
+ ("sasl" "pkgs/sasl-doc")
(root "pkgs/slideshow-exe")
(root "pkgs/slideshow-plugin")
+- (root "pkgs/srfi-lib-nonfree")
(root "pkgs/srfi-doc")
- (root "pkgs/srfi-doc-nonfree")
(root "pkgs/syntax-color-doc")
(root "pkgs/web-server-lib")
(root "pkgs/unix-socket-lib")
-diff -urN racket-6.12-nf/share/pkgs/srfi/info.rkt racket-6.12/share/pkgs/srfi/info.rkt
---- racket-6.12-nf/share/pkgs/srfi/info.rkt 2018-01-31 13:04:07.216391749 -0500
-+++ racket-6.12/share/pkgs/srfi/info.rkt 2018-01-31 13:05:32.601025227 -0500
-@@ -3,13 +3,9 @@
- (define collection 'multi)
-
- (define deps '("srfi-lib"
-- "srfi-lib-nonfree"
-- "srfi-doc"
-- "srfi-doc-nonfree"))
-+ "srfi-doc"))
- (define implies '("srfi-lib"
-- "srfi-lib-nonfree"
-- "srfi-doc"
-- "srfi-foc-nonfree"))
-+ "srfi-doc"))
-
- (define pkg-desc "Legacy SRFI (Scheme) libraries")
-
-diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/info.rkt racket-6.12/share/pkgs/srfi-doc-nonfree/info.rkt
---- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/info.rkt 2018-01-31 13:04:07.221391727 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,19 +0,0 @@
--#lang info
--
--(define collection 'multi)
--
--(define build-deps '("mzscheme-doc"
-- "scheme-lib"
-- "base"
-- "scribble-lib"
-- "srfi-doc"
-- "srfi-lib-nonfree"
-- "racket-doc"
-- "r5rs-doc"
-- "r6rs-doc"
-- "compatibility-lib"))
--(define update-implies '("srfi-lib-nonfree"))
--
--(define pkg-desc "documentation part of \"srfi nonfree\"")
--
--(define pkg-authors '(mflatt noel chongkai jay))
-diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt
---- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 2018-01-31 13:04:07.221391727 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 1969-12-31 19:00:00.000000000 -0500
+diff -urN racket-7.0.orig/share/pkgs/srfi/info.rkt racket-7.0/share/pkgs/srfi/info.rkt
+--- racket-7.0.orig/share/pkgs/srfi/info.rkt 2018-08-03 15:23:48.891563638 -0400
++++ racket-7.0/share/pkgs/srfi/info.rkt 2018-08-03 15:23:45.424540559 -0400
+@@ -1 +1 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.0"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-lib-nonfree" "srfi-doc" "srfi-doc-nonfree"))) (define implies (quote ("srfi-lib" "srfi-lib-nonfree" "srfi-doc" "srfi-doc-nonfree"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
++(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.0"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc"))) (define implies (quote ("srfi-lib" "srfi-doc"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
+diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/info.rkt racket-7.0/share/pkgs/srfi-doc-nonfree/info.rkt
+--- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/info.rkt 2018-08-03 15:23:48.895563664 -0400
++++ racket-7.0/share/pkgs/srfi-doc-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1 +0,0 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.0"))) (define collection (quote multi)) (define build-deps (quote ("mzscheme-doc" "scheme-lib" "base" "scribble-lib" "srfi-doc" "srfi-lib-nonfree" "racket-doc" "r5rs-doc" "r6rs-doc" "compatibility-lib"))) (define update-implies (quote ("srfi-lib-nonfree"))) (define pkg-desc "documentation part of \"srfi nonfree\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
+diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt
+--- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 2018-08-03 15:23:48.895563664 -0400
++++ racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 1969-12-31 19:00:00.000000000 -0500
@@ -1,3 +0,0 @@
-#lang info
-
-(define scribblings '(("srfi-nf.scrbl" (multi-page) (library 100))))
-diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl
---- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 2018-01-31 13:04:07.221391727 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 1969-12-31 19:00:00.000000000 -0500
+diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl
+--- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 2018-08-03 15:23:48.895563664 -0400
++++ racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 1969-12-31 19:00:00.000000000 -0500
@@ -1,66 +0,0 @@
-#lang scribble/doc
-@(require srfi/scribblings/util
@@ -136,9 +99,9 @@ diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.sc
-@; ----------------------------------------
-
-@index-section[]
-diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html
---- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 2018-01-31 13:04:07.221391727 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
+diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html
+--- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 2018-08-03 15:23:48.895563664 -0400
++++ racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
@@ -1,507 +0,0 @@
-<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
-<html>
@@ -647,9 +610,9 @@ diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/s
- </body>
-</html>
-
-diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html
---- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 2018-01-31 13:04:07.221391727 -0500
-+++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
+diff -urN racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html
+--- racket-7.0.orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 2018-08-03 15:23:48.895563664 -0400
++++ racket-7.0/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
@@ -1,345 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
-<html>
@@ -996,39 +959,26 @@ diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/s
-
-</body>
-</html>
-diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/info.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/info.rkt
---- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/info.rkt 2018-01-31 13:04:07.236391659 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
-@@ -1,14 +0,0 @@
--#lang info
--
--(define collection 'multi)
--
--(define deps '("scheme-lib"
-- "base"
-- "r6rs-lib"
-- "srfi-lib"
-- "compatibility-lib"))
--
--
--(define pkg-desc "implementation (no documentation) part of \"srfi nonfree\"")
--
--(define pkg-authors '(mflatt noel chongkai jay))
-diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt
---- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 2018-01-31 13:04:07.236391659 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 1969-12-31 19:00:00.000000000 -0500
+diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/info.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/info.rkt
+--- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/info.rkt 2018-08-03 15:23:48.906563738 -0400
++++ racket-7.0/share/pkgs/srfi-lib-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1 +0,0 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "7.0"))) (define collection (quote multi)) (define deps (quote ("scheme-lib" "base" "r6rs-lib" "srfi-lib" "compatibility-lib"))) (define pkg-desc "implementation (no documentation) part of \"srfi nonfree\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
+diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt
+--- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 2018-08-03 15:23:48.906563738 -0400
++++ racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 1969-12-31 19:00:00.000000000 -0500
@@ -1 +0,0 @@
-#lang s-exp srfi/provider srfi/%3a5
-diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt
---- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 2018-01-31 13:04:07.236391659 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 1969-12-31 19:00:00.000000000 -0500
+diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt
+--- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 2018-08-03 15:23:48.906563738 -0400
++++ racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 1969-12-31 19:00:00.000000000 -0500
@@ -1,3 +0,0 @@
-#lang s-exp srfi/provider srfi/5
-
-;; FIXME: "rest arguments" need to generate mutable lists
-diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt
---- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 2018-01-31 13:04:07.236391659 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 1969-12-31 19:00:00.000000000 -0500
+diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt
+--- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 2018-08-03 15:23:48.906563738 -0400
++++ racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 1969-12-31 19:00:00.000000000 -0500
@@ -1,86 +0,0 @@
-;;;
-;;; <let.rkt> ---- SRFI 5 A compatible let form with signatures and rest arguments
@@ -1116,9 +1066,9 @@ diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt racket-6.12/
-;; (if (= i n)
-;; (car f)
-;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
-diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/5.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5.rkt
---- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 2018-01-31 13:04:07.236391659 -0500
-+++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 1969-12-31 19:00:00.000000000 -0500
+diff -urN racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/5.rkt racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/5.rkt
+--- racket-7.0.orig/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 2018-08-03 15:23:48.906563738 -0400
++++ racket-7.0/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 1969-12-31 19:00:00.000000000 -0500
@@ -1,2 +0,0 @@
-;; module loader for SRFI-5
-#lang s-exp srfi/provider srfi/5/let #:unprefix s:
diff --git a/racket.spec b/racket.spec
index d3dc907..5fb06c9 100644
--- a/racket.spec
+++ b/racket.spec
@@ -1,38 +1,24 @@
Name: racket
-Version: 6.12
-Release: 8%{?dist}
+Version: 7.0
+Release: 1%{?dist}
Summary: General purpose programming language
License: GPLv3 and LGPLv3 and MIT
URL: https://racket-lang.org
Source0: https://mirror.racket-lang.org/installers/%{version}/%{name}-%{version}-s...
-# Update SRFI libraries to include upstream PR 5.
-# See: https://github.com/racket/srfi/pull/5 (merged)
-Patch0: racket-6.12-update-srfi.patch
-
# Remove SRFI library and docs with restrictive licensing.
# See: https://github.com/racket/srfi/issues/4 (open)
# Note: Upstream maintainers have confirmed this
# is safe, since the removed components are
# extra elements which nothing else in the
# package depends on.
-Patch1: racket-6.12-remove-nonfree.patch
-
-# Backport upstream fix of rpaths in racket/racket
-# which break check-buildroot
-# https://github.com/racket/racket/pull/1947 (merged)
-Patch2: racket-6.12-fix-rpaths.patch
-
-# Backport upstream fix of rpaths in racket/web-server
-# which break check-buildroot
-# https://github.com/racket/web-server/issues/36 (closed)
-Patch3: racket-6.12-fix-webserver-rpaths.patch
+Patch0: racket-7.0-remove-nonfree.patch
# Update racket-doc/search to use https://docs.racket-lang.org
# when no docs exist locally
# https://github.com/racket/scribble/pull/164 (open)
-Patch4: racket-6.12-fix-doc-open-url.patch
+Patch1: racket-7.0-fix-doc-open-url.patch
# Issue Building for s390x and armv7hl in koji
ExcludeArch: s390x armv7hl
@@ -131,6 +117,7 @@ for i in $DOCS_TO_FIX; do
${RPM_BUILD_ROOT}/%{_datadir}/doc/racket/$i
done
+# Remove the executable bit on legacy template file
chmod -x ${RPM_BUILD_ROOT}%{_libdir}/racket/starter-sh
%ldconfig_scriptlets
@@ -244,6 +231,10 @@ A local installation of the Racket documentation system.
%{_datadir}/doc/racket
%changelog
+* Fri Aug 3 2018 David Benoit <dbenoit(a)redhat.com> 7.0-1
+- Remove 6.12 patches and add update remove nonfree
+ srfi patch to 7.0
+
* Mon Jul 30 2018 David Benoit <dbenoit(a)redhat.com> 6.12-8
- Annotate dependencies with links to source code
- Move dependencies to racket-pkgs, since they are only used
diff --git a/sources b/sources
index 0fa455a..e43e6a3 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (racket-6.12-src.tgz) = e373cc1dd94f98d84dd2a105dad1cc2f2068118777b455af3f30ea3d190e6d601392bf17337652eeb84fa86d9c60aaa17563599b1772dc312211a8ac6e2c7060
+SHA512 (racket-7.0-src.tgz) = 98be3a7f0fbe38ae5febd2a9a3c81baede7dd7b3f3a9ed3ce68321389a68f74c6a8e24170013f7ca4fd725a79a3d5cfbda2e26f0f75163076e3b98f43094507f
commit 1b0a0799af2a5acee95845192bd3a772fd4a0f55
Author: dbenoit <dbenoit(a)redhat.com>
Date: Fri Aug 31 14:54:24 2018 -0400
fix sources file
diff --git a/.gitignore b/.gitignore
index e69de29..d013960 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/racket-6.12-src.tgz
diff --git a/sources b/sources
index 452da4f..0fa455a 100644
--- a/sources
+++ b/sources
@@ -1,6 +1 @@
-SHA512 (racket-6.12-fix-doc-open-url.patch) = 66a6a7f0f005a0da7acaf1ffbd53831eb796171994aa033bae5a2a973a79bb1c65212eaf4bf7ec02dfae5a186efcfa3e2a06b08bc31ff162cd4e08ab5b97bb94
-SHA512 (racket-6.12-fix-rpaths.patch) = d844d4d174b1cd92c61d16912aaf48afddbc9010acb2e5950d2d277d3110fc9256b68cbc38f06f69f6e2009f34085b32690a535049934d46d820e5b1491434e1
-SHA512 (racket-6.12-fix-webserver-rpaths.patch) = 807e356726dff3087bbcf505835082bcd2f0cdfb1d45e899d98bdf9b23715586b5c2a4a5703fff9ff2af9e46feb9936eaf685b6fb331388cd77dcc57389fbd76
-SHA512 (racket-6.12-remove-nonfree.patch) = 76e24e03728742073bdf4dc927da734195ddb6400cbcdaedecc09d94e7eac4168de4c9d30423bfd293b5fcd3580b0147b38c9061bded1205ec91e24f4868be2c
-SHA512 (racket-6.12-update-srfi.patch) = cfa97cc312ec3a40ad3dd4c4d662c949274325d6acc991c0d9b2327fc03b6c532cec0aa6e7f9a5563d0c23526742177367264f601f8e92055a1d6c3347e763a4
-SHA512 (racket.spec) = 5c53ad1906aa228848f7cabd72f377dd6da8f711669af515650d35fb40b5d3cb627c0b3daaf347cd2066ed250ce7fbcced7192e24f1aea7509eba1ceee487f49
+SHA512 (racket-6.12-src.tgz) = e373cc1dd94f98d84dd2a105dad1cc2f2068118777b455af3f30ea3d190e6d601392bf17337652eeb84fa86d9c60aaa17563599b1772dc312211a8ac6e2c7060
commit 335d72219631d93c3f29c29fd82070c0af593ef4
Author: dbenoit <dbenoit(a)redhat.com>
Date: Fri Aug 31 14:44:26 2018 -0400
fix gitignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/sources b/sources
new file mode 100644
index 0000000..452da4f
--- /dev/null
+++ b/sources
@@ -0,0 +1,6 @@
+SHA512 (racket-6.12-fix-doc-open-url.patch) = 66a6a7f0f005a0da7acaf1ffbd53831eb796171994aa033bae5a2a973a79bb1c65212eaf4bf7ec02dfae5a186efcfa3e2a06b08bc31ff162cd4e08ab5b97bb94
+SHA512 (racket-6.12-fix-rpaths.patch) = d844d4d174b1cd92c61d16912aaf48afddbc9010acb2e5950d2d277d3110fc9256b68cbc38f06f69f6e2009f34085b32690a535049934d46d820e5b1491434e1
+SHA512 (racket-6.12-fix-webserver-rpaths.patch) = 807e356726dff3087bbcf505835082bcd2f0cdfb1d45e899d98bdf9b23715586b5c2a4a5703fff9ff2af9e46feb9936eaf685b6fb331388cd77dcc57389fbd76
+SHA512 (racket-6.12-remove-nonfree.patch) = 76e24e03728742073bdf4dc927da734195ddb6400cbcdaedecc09d94e7eac4168de4c9d30423bfd293b5fcd3580b0147b38c9061bded1205ec91e24f4868be2c
+SHA512 (racket-6.12-update-srfi.patch) = cfa97cc312ec3a40ad3dd4c4d662c949274325d6acc991c0d9b2327fc03b6c532cec0aa6e7f9a5563d0c23526742177367264f601f8e92055a1d6c3347e763a4
+SHA512 (racket.spec) = 5c53ad1906aa228848f7cabd72f377dd6da8f711669af515650d35fb40b5d3cb627c0b3daaf347cd2066ed250ce7fbcced7192e24f1aea7509eba1ceee487f49
commit f241dafce908418595fbb717060cbbefb6867e61
Author: dbenoit <dbenoit(a)redhat.com>
Date: Fri Aug 31 14:25:40 2018 -0400
add spec and patches
diff --git a/racket-6.12-fix-doc-open-url.patch b/racket-6.12-fix-doc-open-url.patch
new file mode 100644
index 0000000..7c497f5
--- /dev/null
+++ b/racket-6.12-fix-doc-open-url.patch
@@ -0,0 +1,69 @@
+diff -urN racket-6.12-wbsvr/share/pkgs/scribble-lib/help/search.rkt racket-6.12/share/pkgs/scribble-lib/help/search.rkt
+--- racket-6.12-wbsvr/share/pkgs/scribble-lib/help/search.rkt 2018-03-19 17:14:56.017273013 -0400
++++ racket-6.12/share/pkgs/scribble-lib/help/search.rkt 2018-03-19 17:15:37.839113929 -0400
+@@ -17,33 +17,38 @@
+ #:notify [notify void])
+ (define open-url (get-doc-open-url))
+ (cond
+- [open-url
+- (define dest-url (let ([u (string->url open-url)])
+- (combine-url/relative
+- u
+- (string-join
+- (for/list ([s (explode-path sub)])
+- (if (path? s)
+- (path-element->string s)
+- (format "~a" s)))
+- "/"))))
+- (notify (url->string dest-url))
+- (send-url (url->string
+- (struct-copy url dest-url
+- [fragment (or fragment
+- (url-fragment dest-url))]
+- [query (append
+- (url-query dest-url)
+- (if query
+- (url-query
+- (string->url
+- (format "q?~a" query)))
+- null))])))]
+- [else
+- (let* ([path (build-path (find-user-doc-dir) sub)]
+- [path (if (file-exists? path) path (build-path (find-doc-dir) sub))])
+- (notify path)
+- (send-url/file path #:fragment fragment #:query query))]))
++ [open-url
++ (define dest-url (let ([u (string->url open-url)])
++ (combine-url/relative
++ u
++ (string-join
++ (for/list ([s (explode-path sub)])
++ (if (path? s)
++ (path-element->string s)
++ (format "~a" s)))
++ "/"))))
++ (notify (url->string dest-url))
++ (send-url (url->string
++ (struct-copy url dest-url
++ [fragment (or fragment
++ (url-fragment dest-url))]
++ [query (append
++ (url-query dest-url)
++ (if query
++ (url-query
++ (string->url
++ (format "q?~a" query)))
++ null))])))]
++ [else
++ (let* ([path (build-path (find-user-doc-dir) sub)]
++ [path (if (file-exists? path) path (build-path (find-doc-dir) sub))])
++ (notify path)
++ (if (file-exists? path)
++ (send-url/file path #:fragment fragment #:query query)
++ (let ([part (lambda (pfx x) (if x (string-append pfx x) ""))])
++ (send-url (string-append
++ "https://docs.racket-lang.org/"
++ sub (part "#" fragment) (part "?" query))))))]))
+
+ ;; This is an example of changing this code to use the online manuals.
+ ;; Normally, it's better to set `doc-open-url` in "etc/config.rktd",
diff --git a/racket-6.12-fix-rpaths.patch b/racket-6.12-fix-rpaths.patch
new file mode 100644
index 0000000..f76730e
--- /dev/null
+++ b/racket-6.12-fix-rpaths.patch
@@ -0,0 +1,13 @@
+diff -urN racket-6.12-f/collects/racket/runtime-path.rkt racket-6.12/collects/racket/runtime-path.rkt
+--- racket-6.12-f/collects/racket/runtime-path.rkt 2018-02-06 16:04:29.969878308 -0500
++++ racket-6.12/collects/racket/runtime-path.rkt 2018-02-06 16:07:10.549176282 -0500
+@@ -186,7 +186,8 @@
+ (path-of
+ #,(datum->syntax
+ #'orig-stx
+- `(,#'this-expression-source-file))))
++ `(,#'this-expression-source-file)
++ #'orig-stx)))
+ #'void)])
+ (apply to-values (resolve-paths (#%variable-reference)
+ get-dir
diff --git a/racket-6.12-fix-webserver-rpaths.patch b/racket-6.12-fix-webserver-rpaths.patch
new file mode 100644
index 0000000..78614cf
--- /dev/null
+++ b/racket-6.12-fix-webserver-rpaths.patch
@@ -0,0 +1,35 @@
+diff -urN racket-6.12-rp/share/pkgs/web-server-lib/web-server/formlets/lib.rkt racket-6.12-wbsvr/share/pkgs/web-server-lib/web-server/formlets/lib.rkt
+--- racket-6.12-rp/share/pkgs/web-server-lib/web-server/formlets/lib.rkt 2018-02-22 18:42:06.131455756 -0500
++++ racket-6.12-wbsvr/share/pkgs/web-server-lib/web-server/formlets/lib.rkt 2018-03-20 15:07:09.666222028 -0400
+@@ -7,6 +7,7 @@
+ racket/function
+ racket/serialize
+ syntax/location
++ setup/collects
+ (for-syntax racket/base
+ syntax/parse))
+
+@@ -70,20 +71,20 @@
+ #:range-contracts (map (curry coerce-contract 'formlet/c)
+ contracts)))]))
+ (define quote-this-module-path
+- (quote-module-path))
++ (path->collects-relative (quote-module-path)))
+ (define-syntax formlet/c
+ (syntax-parser
+ [(_ range ...)
+ #:declare range (expr/c #'contract?
+ #:name "range contract argument")
+ #'(formlet/c** (-> listof-binding
+- (values (coerce-contract 'formlet/c range.c) ...)))]
++ (values (coerce-contract 'formlet/c range #;.c) ...)))]
+ [name:id
+ #`(contract
+ (-> contract? (... ...) contract?)
+ dynamic-formlet/c
+ quote-this-module-path
+- (quote-module-path)
++ (path->collects-relative (quote-module-path))
+ "formlet/c"
+ #'name)]))
+
diff --git a/racket-6.12-remove-nonfree.patch b/racket-6.12-remove-nonfree.patch
new file mode 100644
index 0000000..4e72a3e
--- /dev/null
+++ b/racket-6.12-remove-nonfree.patch
@@ -0,0 +1,1124 @@
+diff -urN racket-6.12-nf/share/links.rktd racket-6.12/share/links.rktd
+--- racket-6.12-nf/share/links.rktd 2018-01-31 13:04:06.757393819 -0500
++++ racket-6.12/share/links.rktd 2018-01-31 13:04:25.419309681 -0500
+@@ -133,7 +133,6 @@
+ (root "pkgs/r5rs-doc")
+ (root "pkgs/srfi-lite-lib")
+ (root "pkgs/srfi-lib")
+- (root "pkgs/srfi-lib-nonfree")
+ (root "pkgs/html-doc")
+ (root "pkgs/images-gui-lib")
+ (root "pkgs/images-doc")
+@@ -177,7 +176,6 @@
+ (root "pkgs/slideshow-exe")
+ (root "pkgs/slideshow-plugin")
+ (root "pkgs/srfi-doc")
+- (root "pkgs/srfi-doc-nonfree")
+ (root "pkgs/syntax-color-doc")
+ (root "pkgs/web-server-lib")
+ (root "pkgs/unix-socket-lib")
+diff -urN racket-6.12-nf/share/pkgs/srfi/info.rkt racket-6.12/share/pkgs/srfi/info.rkt
+--- racket-6.12-nf/share/pkgs/srfi/info.rkt 2018-01-31 13:04:07.216391749 -0500
++++ racket-6.12/share/pkgs/srfi/info.rkt 2018-01-31 13:05:32.601025227 -0500
+@@ -3,13 +3,9 @@
+ (define collection 'multi)
+
+ (define deps '("srfi-lib"
+- "srfi-lib-nonfree"
+- "srfi-doc"
+- "srfi-doc-nonfree"))
++ "srfi-doc"))
+ (define implies '("srfi-lib"
+- "srfi-lib-nonfree"
+- "srfi-doc"
+- "srfi-foc-nonfree"))
++ "srfi-doc"))
+
+ (define pkg-desc "Legacy SRFI (Scheme) libraries")
+
+diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/info.rkt racket-6.12/share/pkgs/srfi-doc-nonfree/info.rkt
+--- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/info.rkt 2018-01-31 13:04:07.221391727 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,19 +0,0 @@
+-#lang info
+-
+-(define collection 'multi)
+-
+-(define build-deps '("mzscheme-doc"
+- "scheme-lib"
+- "base"
+- "scribble-lib"
+- "srfi-doc"
+- "srfi-lib-nonfree"
+- "racket-doc"
+- "r5rs-doc"
+- "r6rs-doc"
+- "compatibility-lib"))
+-(define update-implies '("srfi-lib-nonfree"))
+-
+-(define pkg-desc "documentation part of \"srfi nonfree\"")
+-
+-(define pkg-authors '(mflatt noel chongkai jay))
+diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt
+--- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 2018-01-31 13:04:07.221391727 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,3 +0,0 @@
+-#lang info
+-
+-(define scribblings '(("srfi-nf.scrbl" (multi-page) (library 100))))
+diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl
+--- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 2018-01-31 13:04:07.221391727 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 1969-12-31 19:00:00.000000000 -0500
+@@ -1,66 +0,0 @@
+-#lang scribble/doc
+-@(require srfi/scribblings/util
+- scribble/manual
+- scribble/eval
+- scriblib/render-cond
+- scribble/core
+- scribble/html-properties
+- (for-syntax scheme/base)
+- (for-label scheme/base
+- racket/stream))
+-
+-@; ----------------------------------------------------------------------
+-
+-@title{SRFI Nonfree Libraries and Documentation}
+-
+-The @link[#:style srfi-std "http://srfi.schemers.org/"]{Scheme Requests for
+-Implementation} (a.k.a. @deftech{SRFI}) process allows individual
+-members of the Scheme community to propose libraries and extensions to
+-be supported by multiple Scheme implementations.
+-
+-Racket is distributed with implementations of many SRFIs, most of
+-which can be implemented as libraries. To import the bindings of SRFI
+-@math{n}, use
+-
+-@racketblock[
+-(require @#,elem{@racketidfont{srfi/}@math{n}})
+-]
+-
+-This document lists the SRFIs that are supported by Racket and
+-provides a link to the original SRFI specification (which is also
+-distributed as part of Racket's documentation).
+-
+-The following SRFI specification documents are licensed restrictively.
+-
+-@table-of-contents[]
+-
+-
+-@; ----------------------------------------
+-
+-@srfi[5]{A compatible let form with signatures and rest arguments}
+-
+-@redirect[5 '(
+- (let #t "unnamed")
+-)]
+-
+-Racket provides this SRFI in the @racket[srfi-lib-nonfree] package.
+-
+-@; ----------------------------------------
+-
+-@srfi[29]{Localization}
+-
+-@redirect[29 '(
+- (current-language #f "current-language")
+- (current-country #f "current-country")
+- (current-locale-details #f "current-locale-details")
+- (declare-bundle! #f "declare-bundle!")
+- (store-bundle #f "store-bundle")
+- (load-bundle! #f "load-bundle!")
+- (localized-template #f "localized-template")
+-)]
+-
+-Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package. Only the SRFI specification document is nonfree.
+-
+-@; ----------------------------------------
+-
+-@index-section[]
+diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html
+--- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 2018-01-31 13:04:07.221391727 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
+@@ -1,507 +0,0 @@
+-<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
+-<html>
+- <head>
+- <meta name="generator" content="HTML Tidy, see www.w3.org">
+- <title>SRFI 29: Localization</title>
+- <meta name="author" content="Scott G. Miller">
+- <meta name="description" content="Localization">
+- </head>
+- <body>
+- <H1>Title</H1>
+-
+- SRFI 29: Localization
+-
+- <H1>Author</H1>
+-
+- Scott G. Miller
+-
+- <H1>Abstract</H1>
+-
+- This document specifies an interface to retrieving and
+- displaying locale sensitive messages. A Scheme program can
+- register one or more translations of templated messages, and
+- then write Scheme code that can transparently retrieve the
+- appropriate message for the locale under which the Scheme
+- system is running. <br>
+-
+-
+- <H1>Rationale</H1>
+-
+- <p>As any programmer that has ever had to deal with making his
+- or her code readable in more than one locale, the process of
+- sufficiently abstracting program messages from their
+- presentation to the user is non-trivial without help from the
+- programming language. Most modern programming language
+- libraries do provide some mechanism for performing this
+- separation.</p>
+-
+- <p>A portable API that allows a piece of code to run without
+- modification in different countries and under different
+- languages is a must for any non-trivial software project.
+- The interface should separate the logic of a program from
+- the myriad of translations that may be necessary.</p>
+-
+- <p>The interface described in this document provides such
+- functionality. The underlying implementation is also allowed to
+- use whatever datastructures it likes to provide access to the
+- translations in the most efficient manner possible. In
+- addition, the implementation is provided with standardized
+- functions that programs will use for accessing an external,
+- unspecified repository of translations.</p>
+-
+- <p>This interface <i>does not</i> cover all aspects of
+- localization, including support for non-latin characters,
+- number and date formatting, etc. Such functionality is the
+- scope of a future SRFI that may extend this one.</p>
+-
+- <H1>Dependencies</H1>
+-
+- An SRFI-29 conformant implementation must also implement
+- SRFI-28, Basic Format Strings. Message templates are strings
+- that must be processed by the <tt>format</tt> function
+- specified in that SRFI.
+-
+- <H1>Specification</H1>
+-
+- <h3>Message Bundles</h3>
+-
+- <p>A Message Bundle is a set of message templates and their
+- identifying keys. Each bundle contains one or more such
+- key/value pairs. The bundle itself is associated with a
+- <i>bundle specifier</i> which uniquely identifies the
+- bundle.</p>
+-
+- <h3>Bundle Specifiers</h3>
+-
+- <p>A Bundle Specifier is a Scheme list that describes, in order
+- of importance, the package and locale of a message bundle.
+- In most cases, a locale specifier will have between one
+- and three elements. The first element is a symbol denoting the
+- package for which this bundle applies. The second and third
+- elements denote a <i>locale</i>. The second element (first
+- element of the locale) if present, is the two letter, ISO 639-1
+- language code for the bundle. The third element, if present, is
+- a two letter ISO 3166-1 country code. In some cases, a
+- fourth element may be present, specifying the encoding used for
+- the bundle. All bundle specifier elements are Scheme
+- symbols.</p>
+-
+- <p>If only one translation is provided, it should be designated
+- only by a package name, for example <tt>(mathlib)</tt>. This
+- translation is called the <i>default</i> translation.</p>
+-
+- <h3>Bundle Searching</h3>
+-
+- <p>When a message template is retrieved from a bundle, the
+- Scheme implementation will provide the locale under which the
+- system is currently running. When the template is retrieved,
+- the package name will be specified. The Scheme system should
+- construct a Bundle Specifier from the provided package name and
+- the active locale. For example, when retrieving a message
+- template for French Canadian, in the <tt>mathlib</tt> package,
+- the bundle specifier '<tt>(mathlib fr ca)</tt>' is used. A
+- program may also retrieve the elements of the current locale
+- using the no-argument procedures:</p>
+-
+- <p><b><a name="current-language"></a><tt>current-language</tt></b> <tt>->
+- <i>symbol</i></tt><br>
+- <tt><b>current-language</b> <i>symbol</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- When given no arguments, returns the current ISO 639-1
+- language code as a symbol. If provided with an
+- argument, the current language is set to that named by the
+- symbol for the currently executing Scheme thread (or for the
+- entire Scheme system if such a distinction is not possible).
+-
+- </blockquote>
+-
+- <p><b><a name="current-country"></a><tt>current-country</tt></b> <tt>->
+- <i>symbol</i></tt><br>
+- <tt><b>current-country</b> <i>symbol</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- returns the current ISO 3166-1 country code as a symbol.
+- If provided with an argument, the current country is
+- set to that named by the symbol for the currently executing
+- Scheme thread (or for the entire Scheme system if such a
+- distinction is not possible).
+- </blockquote>
+-
+- <p><b><a name="current-locale-details"></a><tt>current-locale-details</tt></b> <tt>-> <i>list of
+- symbol</i></tt>s<br>
+- <tt><b>current-locale-details</b> <i>list-of-symbols</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- Returns a list of additional locale details as a list of
+- symbols. This list may contain information about
+- encodings or other more specific information. If
+- provided with an argument, the current locale details are set
+- to those given in the currently executing Scheme thread (or
+- for the entire Scheme system if such a distinction is not
+- possible).
+- </blockquote>
+-
+- <p>The Scheme System should first check for a bundle with the
+- exact name provided. If no such bundle is found, the last
+- element from the list is removed and a search is tried for a
+- bundle with that name. If no bundle is then found, the list is
+- shortened by removing the last element again. If no message is
+- found and the bundle specifier is now the empty list, an error
+- should be raised.</p>
+-
+- <p>The reason for this search order is to provide the most
+- locale sensitive template possible, but to fall back on more
+- general templates if a translation has not yet been provided
+- for the given locale.</p>
+-
+- <h3>Message Templates</h3>
+-
+- <p>A message template is a localized message that may or may
+- not contain one of a number of formatting codes. A message
+- template is a Scheme string. The string is of a form that can
+- be processed by the <tt>format</tt> procedure found in many
+- Scheme systems and formally specified in SRFI-28 (Basic Format
+- Strings).</p>
+-
+- <p>This SRFI also extends SRFI-28 to provide an additional
+- <tt>format</tt> escape code:</p>
+-
+- <blockquote>
+- <tt>~[n]@*</tt> - Causes a value-requiring escape code that
+- follows this code immediately to reference the [N]'th
+- optional value absolutely, rather than the next unconsumed
+- value. The referenced value is <i>not</i> consumed.
+- </blockquote>
+- This extension allows optional values to be positionally
+- referenced, so that message templates can be constructed that
+- can produce the proper word ordering for a language.
+-
+- <h3>Preparing Bundles</h3>
+- Before a bundle may be used by the Scheme system to retrieve
+- localized template messages, they must be made available to the
+- Scheme system. This SRFI specifies a way to portably
+- define the bundles, as well as store them in and retrieve them
+- from an unspecified system which may be provided by resources
+- outside the Scheme system.<br>
+-
+-
+- <p><b><a name="declare-bundle!"></a><tt>declare-bundle!</tt></b> <tt><i>bundle-specifier
+- association-list</i> -> undefined<br>
+- </tt></p>
+-
+- <blockquote>
+- Declares a new bundle named by the given bundle-specifier.
+- The contents of the bundle are defined by the provided
+- association list. The list contains associations
+- between Scheme symbols and the message templates (Scheme
+- strings) they name. If a bundle already exists with the
+- given name, it is overwritten with the newly declared
+- bundle.<br>
+- </blockquote>
+- <tt><a name="store-bundle"></a><b>store-bundle</b> <i>bundle-specifier</i> ->
+- boolean</tt><br>
+-
+-
+- <blockquote>
+- Attempts to store a bundle named by the given bundle
+- specifier, and previously made available using
+- <tt>declare-bundle!</tt> or <tt>load-bundle!</tt>, in an
+- unspecified mechanism that may be persistent across Scheme
+- system restarts. If successful, a non-false value is
+- returned. If unsuccessful, <tt>#f</tt> is returned.<br>
+- </blockquote>
+- <tt><a name="load-bundle!"></a><b>load-bundle!</b> <i>bundle-specifier</i> ->
+- boolean</tt><br>
+-
+-
+- <blockquote>
+- Attempts to retrieve a bundle from an unspecified mechanism
+- which stores bundles outside the Scheme system. If the
+- bundle was retrieved successfully, the function returns a
+- non-false value, and the bundle is immediately available to
+- the Scheme system. If the bundle could not be found or loaded
+- successfully, the function returns <tt>#f</tt>, and the
+- Scheme system's bundle registry remains unaffected.<br>
+- </blockquote>
+- A compliant Scheme system may choose not to provide any
+- external mechanism to store localized bundles. If it does
+- not, it must still provide implementations for
+- <tt>store-bundle</tt> and <tt>load-bundle!</tt>. In such a
+- case, both functions must return <tt>#f</tt> regardless of the
+- arguments given. Users of this SRFI should recognize that the
+- inability to load or store a localized bundle in an external
+- repository is <i>not</i> a fatal error.<br>
+-
+-
+- <h3>Retrieving Localized Message Templates</h3>
+-
+- <p><a name="localized-template"></a><b><tt>localized-template</tt></b> <i><tt>package-name
+- message-template-name</tt></i> <tt>-> <i>string or #f<br>
+- </i></tt></p>
+-
+- <blockquote>
+- Retrieves a localized message template for the given package
+- name and the given message template name (both symbols).
+- If no such message could be found, false (#f) is
+- returned.<br>
+- <br>
+- </blockquote>
+- After retrieving a template, the calling program can use
+- <tt>format</tt> to produce a string that can be displayed to
+- the user.<br>
+-
+-
+- <h2>Examples</h2>
+- The below example makes use of SRFI-29 to display simple,
+- localized messages. It also defines its bundles in such a
+- way that the Scheme system may store and retrieve the bundles
+- from a more efficient system catalog, if available.<br>
+-
+-<pre>
+-(let ((translations
+- '(((en) . ((time . "Its ~a, ~a.")
+- (goodbye . "Goodbye, ~a.")))
+- ((fr) . ((time . "~1@*~a, c'est ~a.")
+- (goodbye . "Au revoir, ~a."))))))
+- (for-each (lambda (translation)
+- (let ((bundle-name (cons 'hello-program (car translation))))
+- (if (not (load-bundle! bundle-name))
+- (begin
+- (declare-bundle! bundle-name (cdr translation))
+- (store-bundle! bundle-name)))))
+- translations))
+-
+-(define localized-message
+- (lambda (message-name . args)
+- (apply format (cons (localized-template 'hello-program
+- message-name)
+- args))))
+-
+-(let ((myname "Fred"))
+- (display (localized-message 'time "12:00" myname))
+- (display #\newline)
+-
+- (display (localized-message 'goodbye myname))
+- (display #\newline))
+-
+-;; Displays (English):
+-;; Its 12:00, Fred.
+-;; Goodbye, Fred.
+-;;
+-;; French:
+-;; Fred, c'est 12:00.
+-;; Au revoir, Fred.
+-</pre>
+-
+- <H1>Implementation</H1>
+-
+- <p>The implementation requires that the Scheme system provide a
+- definition for <tt>current-language</tt> and
+- <tt>current-country</tt> capable of distinguishing the correct
+- locale present during a Scheme session. The definitions of
+- those functions in the reference implementation are not capable
+- of that distinction. Their implementation is provided only so
+- that the following code can run in any R4RS scheme system.
+- <br>
+- </p>
+-
+- <p>In addition, the below implementation of a compliant
+- <tt>format</tt> requires SRFI-6 (Basic String Ports) and
+- SRFI-23 (Error reporting)</p>
+-<pre>
+-;; The association list in which bundles will be stored
+-(define *localization-bundles* '())
+-
+-;; The current-language and current-country functions provided
+-;; here must be rewritten for each Scheme system to default to the
+-;; actual locale of the session
+-(define current-language
+- (let ((current-language-value 'en))
+- (lambda args
+- (if (null? args)
+- current-language-value
+- (set! current-language-value (car args))))))
+-
+-(define current-country
+- (let ((current-country-value 'us))
+- (lambda args
+- (if (null? args)
+- current-country-value
+- (set! current-country-value (car args))))))
+-
+-;; The load-bundle! and store-bundle! both return #f in this
+-;; reference implementation. A compliant implementation need
+-;; not rewrite these procedures.
+-(define load-bundle!
+- (lambda (bundle-specifier)
+- #f))
+-
+-(define store-bundle!
+- (lambda (bundle-specifier)
+- #f))
+-
+-;; Declare a bundle of templates with a given bundle specifier
+-(define declare-bundle!
+- (letrec ((remove-old-bundle
+- (lambda (specifier bundle)
+- (cond ((null? bundle) '())
+- ((equal? (caar bundle) specifier)
+- (cdr bundle))
+- (else (cons (car bundle)
+- (remove-old-bundle specifier
+- (cdr bundle))))))))
+- (lambda (bundle-specifier bundle-assoc-list)
+- (set! *localization-bundles*
+- (cons (cons bundle-specifier bundle-assoc-list)
+- (remove-old-bundle bundle-specifier
+- *localization-bundles*))))))
+-
+-;;Retrieve a localized template given its package name and a template name
+-(define localized-template
+- (letrec ((rdc
+- (lambda (ls)
+- (if (null? (cdr ls))
+- '()
+- (cons (car ls) (rdc (cdr ls))))))
+- (find-bundle
+- (lambda (specifier template-name)
+- (cond ((assoc specifier *localization-bundles*) =>
+- (lambda (bundle) bundle))
+- ((null? specifier) #f)
+- (else (find-bundle (rdc specifier)
+- template-name))))))
+- (lambda (package-name template-name)
+- (let loop ((specifier (cons package-name
+- (list (current-language)
+- (current-country)))))
+- (and (not (null? specifier))
+- (let ((bundle (find-bundle specifier template-name)))
+- (and bundle
+- (cond ((assq template-name bundle) => cdr)
+- ((null? (cdr specifier)) #f)
+- (else (loop (rdc specifier)))))))))))
+-
+-;;An SRFI-28 and SRFI-29 compliant version of format. It requires
+-;;SRFI-23 for error reporting.
+-(define format
+- (lambda (format-string . objects)
+- (let ((buffer (open-output-string)))
+- (let loop ((format-list (string->list format-string))
+- (objects objects)
+- (object-override #f))
+- (cond ((null? format-list) (get-output-string buffer))
+- ((char=? (car format-list) #\~)
+- (cond ((null? (cdr format-list))
+- (error 'format "Incomplete escape sequence"))
+- ((char-numeric? (cadr format-list))
+- (let posloop ((fl (cddr format-list))
+- (pos (string->number
+- (string (cadr format-list)))))
+- (cond ((null? fl)
+- (error 'format "Incomplete escape sequence"))
+- ((and (eq? (car fl) '#\@)
+- (null? (cdr fl)))
+- (error 'format "Incomplete escape sequence"))
+- ((and (eq? (car fl) '#\@)
+- (eq? (cadr fl) '#\*))
+- (loop (cddr fl) objects (list-ref objects pos)))
+- (else
+- (posloop (cdr fl)
+- (+ (* 10 pos)
+- (string->number
+- (string (car fl)))))))))
+- (else
+- (case (cadr format-list)
+- ((#\a)
+- (cond (object-override
+- (begin
+- (display object-override buffer)
+- (loop (cddr format-list) objects #f)))
+- ((null? objects)
+- (error 'format "No value for escape sequence"))
+- (else
+- (begin
+- (display (car objects) buffer)
+- (loop (cddr format-list)
+- (cdr objects) #f)))))
+- ((#\s)
+- (cond (object-override
+- (begin
+- (display object-override buffer)
+- (loop (cddr format-list) objects #f)))
+- ((null? objects)
+- (error 'format "No value for escape sequence"))
+- (else
+- (begin
+- (write (car objects) buffer)
+- (loop (cddr format-list)
+- (cdr objects) #f)))))
+- ((#\%)
+- (if object-override
+- (error 'format "Escape sequence following positional override does not require a value"))
+- (display #\newline buffer)
+- (loop (cddr format-list) objects #f))
+- ((#\~)
+- (if object-override
+- (error 'format "Escape sequence following positional override does not require a value"))
+- (display #\~ buffer)
+- (loop (cddr format-list) objects #f))
+- (else
+- (error 'format "Unrecognized escape sequence"))))))
+- (else (display (car format-list) buffer)
+- (loop (cdr format-list) objects #f)))))))
+-
+-</pre>
+-
+- <H1>Copyright</H1>
+-
+- Copyright (C) Scott G. Miller (2002). All Rights Reserved.
+-
+- <p>This document and translations of it may be copied and
+- furnished to others, and derivative works that comment on or
+- otherwise explain it or assist in its implementation may be
+- prepared, copied, published and distributed, in whole or in
+- part, without restriction of any kind, provided that the above
+- copyright notice and this paragraph are included on all such
+- copies and derivative works. However, this document itself may
+- not be modified in any way, such as by removing the copyright
+- notice or references to the Scheme Request For Implementation
+- process or editors, except as needed for the purpose of
+- developing SRFIs in which case the procedures for copyrights
+- defined in the SRFI process must be followed, or as required to
+- translate it into languages other than English.</p>
+-
+- <p>The limited permissions granted above are perpetual and will
+- not be revoked by the authors or their successors or
+- assigns.</p>
+-
+- <p>This document and the information contained herein is
+- provided on an "AS IS" basis and THE AUTHOR AND THE SRFI
+- EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+- BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+- HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
+- OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
+- <hr>
+-
+- <address>
+- Editor: <a href="mailto:srfi-editors@srfi.schemers.org">David
+- Rush</a>
+- </address>
+-
+- <address>
+- Author: <a href="mailto:scgmille@freenetproject.org">Scott G.
+- Miller</a>
+- </address>
+- <!-- Created: Tue Sep 29 19:20:08 EDT 1998 -->
+- <!-- hhmts start -->Last modified: Mon Jun 17 12:00:08 Pacific
+- Daylight Time 2002 <!-- hhmts end --> <br>
+- </body>
+-</html>
+-
+diff -urN racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html
+--- racket-6.12-nf/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 2018-01-31 13:04:07.221391727 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
+@@ -1,345 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
+-<html>
+-<head>
+- <title>SRFI 5: A compatible let form with signatures and rest arguments</title>
+-</head>
+-<body>
+-
+-<H1>Title</H1>
+-
+-SRFI-5: A compatible <code>let</code> form with signatures and rest arguments
+-
+-<H1>Author</H1>
+-
+-Andy Gaynor
+-
+-<H1>Status</H1>
+-
+-This SRFI is currently in ``final'' status. To see an explanation of each status that a SRFI can hold, see <A HREF="http://srfi.schemers.org/srfi-process.html">here</A>.
+-You can access the discussion on this SRFI via <A HREF="http://srfi.schemers.org/srfi-5/mail-archive/maillist.html">the archive of the mailing list</A>.
+-<P><UL>
+-<LI>Received: 1999/2/2
+-<LI>Draft: 1999/2/10-1999/04/12
+-<LI>Final: 1999/4/26
+-<LI>Revised reference implementation: 2003/01/27
+-</UL>
+-
+-<H1>Abstract</H1>
+-
+-The <i>named-let</i> incarnation of the <code>let</code> form has two slight
+-inconsistencies with the <code>define</code> form. As defined, the <code>let</code>
+-form makes no accommodation for rest arguments, an issue of functionality
+-and consistency. As defined, the <code>let</code> form does not accommodate
+-signature-style syntax, an issue of aesthetics and consistency. Both
+-issues are addressed here in a manner which is compatible with the traditional
+-<code>let</code> form but for minor extensions.
+-
+-<H1>Rationale</H1>
+-
+-<H2>Signature-style Syntax</H2>
+-
+-Consider the following two equivalent definitions:
+-
+-<p><pre>
+-(define fibonacci
+- (lambda (n i f0 f1)
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1)))))
+-
+-(define (fibonacci n i f0 f1)
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-</pre>
+-
+-Although there is a named-let analog for the former form, there is none
+-for the latter. To wit, suppose one wished to compute the 10th element
+-of the Fibonacci sequence using a named let:
+-
+-<p>
+-<pre>
+-(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-Values: 55
+-</pre>
+-
+-As it stands, one cannot equivalently write
+-
+-<p>
+-<pre>
+-(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-</pre>
+-
+-which is consistent with <code>define</code>'s signature-style form.
+-<p>Those that favor the signature style may prefer this extension.
+-In any case, it may be more appropriate to include all bound names within
+-the binding section. As presented, this straightforward extension
+-introduces no ambiguity or incompatibility with the existing definition
+-of let.
+-
+-<H2>Rest Arguments</H2>
+-
+-As it stands, one cannot write a named let with rest arguments, as in
+-
+-<p>
+-<pre>
+-(let (blast (port (current-output-port)) . (x (+ 1 2) 4 5))
+- (if (null? x)
+- 'just-a-silly-contrived-example
+- (begin
+- (write (car x) port)
+- (apply blast port (cdr x)))))
+-</pre>
+-
+-otherwise equivalent to
+-
+-<p>
+-<pre>
+-(letrec ((blast (lambda (port . x)
+- (if (null? x)
+- 'just-a-silly-contrived-example
+- (begin
+- (write (car x) port)
+- (apply blast port (cdr x)))))))
+- (blast (current-output-port) (+ 1 2) 4 5))
+-</pre>
+-
+-While this example is rather contrived, the functionality is not.
+-There are several times when the author has used this construct in practice.
+-Regardless, there is little reason to deny the <code>let</code> form access to
+-all the features of lambda functionality.
+-
+-<H2>Symbols in Binding Sections</H2>
+-
+-Both the features above rely upon the placement of symbols in <code>let</code>
+-binding lists (this statement is intentially simplistic). The only
+-other apparent use of such symbol placement is to tersely bind variables
+-to unspecified values. For example, one might desire to use
+-<code>(let (foo bar baz) ...)</code>
+-to bind <code>foo</code>, <code>bar</code>, and <code>baz</code> to
+-unspecified values.
+-
+-<p>This usage is considered less important in light of the rationales
+-presented above, and an alternate syntax is immediately apparent, as
+-in <code>(let ((foo) (bar) (baz)) ...)</code> This may even
+-be preferable, consistently parenthesizing normal binding clauses.
+-
+-<H1>Specification</H1>
+-
+-<H2>Syntax</H2>
+-
+-<p>
+-A formal specification of the syntax follows. Below, body, expression,
+-and identifier are free. Each instantiation of binding-name must be
+-unique.
+-</p>
+-
+-<p>
+-<pre>
+- let = "(" "let" let-bindings body ")"
+- expressions = nothing | expression expressions
+- let-bindings = let-name bindings
+- | "(" let-name "." bindings ")"
+- let-name = identifier
+- bindings = "(" ")"
+- | rest-binding
+- | "(" normal-bindings ["." rest-binding] ")"
+-normal-bindings = nothing
+- | normal-binding normal-bindings
+- normal-binding = "(" binding-name expression ")"
+- binding-name = identifier
+- rest-binding = "(" binding-name expressions ")"
+-</pre>
+-
+-<p>
+-For clarity and convenience, an informal specification follows.
+-</p>
+-
+-<ol>
+-<li><a name="unnamed">Unnamed</a>
+-
+-<p><pre>
+-(let ((<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-non-sig">
+-Named, non-signature-style, no rest argument</a>
+-
+-<p><pre>
+-(let <name> ((<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-sig">Named, signature-style, no rest argument</a>
+-
+-<p><pre>
+-(let (<name> (<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-non-sig-rest">Named, non-signature-style, rest argument</a>
+-
+-<p><pre>
+-(let <name> ((<parameter> <argument>)...
+-
+-. (<rest-parameter> <rest-argument>...))
+- <body>...)
+-</pre>
+-
+-<li><a name="named-sig-rest">Named, signature-style, rest argument</a>
+-
+-<p><pre>
+-(let (<name> (<parameter> <argument>)...
+-
+-. (<rest-parameter> <rest-argument>...))
+- <body>...)
+-</pre>
+-</li>
+-</ol>
+-
+-<H2>Semantics</H2>
+-
+-Let <code>$lambda</code> and <code>$letrec</code> be hygienic bindings for the <code>lambda</code>
+-and <code>letrec</code> forms, respectively.
+-
+-<ul>
+-<li>For informal syntax 1:
+-
+-<p><pre>
+-(($lambda (<parameter>...) <body>...) <argument>...)
+-</pre>
+-</li>
+-
+-<li>For informal syntaxes 2 and 3:
+-
+-<p>
+-<pre>
+-($letrec ((<name> ($lambda (<parameter>...) <body>...)))
+- (<name> <argument>...))
+-</pre>
+-</li>
+-
+-<li>For informal syntaxes 4 and 5:
+-
+-<p>
+-<pre>
+-($letrec ((<name> ($lambda (<parameter>...
+-
+-. <rest-parameter>) <body>...)))
+- (<name> <argument>... <rest-argument>...))
+-</pre>
+-</li>
+-</ul>
+-
+-<H1>Implementation</H1>
+-
+-Here is an implementation using <code>SYNTAX-RULES</code>.
+-
+-<p>
+-<pre>
+-;; Use your own standard let.
+-;; Or call a lambda.
+-;; (define-syntax standard-let
+-;;
+-;; (syntax-rules ()
+-;;
+-;; ((let ((var val) ...) body ...)
+-;; ((lambda (var ...) body ...) val ...))))
+-
+-(define-syntax let
+-
+- (syntax-rules ()
+-
+- ;; No bindings: use standard-let.
+- ((let () body ...)
+- (standard-let () body ...))
+- ;; Or call a lambda.
+- ;; ((lambda () body ...))
+-
+- ;; All standard bindings: use standard-let.
+- ((let ((var val) ...) body ...)
+- (standard-let ((var val) ...) body ...))
+- ;; Or call a lambda.
+- ;; ((lambda (var ...) body ...) val ...)
+-
+- ;; One standard binding: loop.
+- ;; The all-standard-bindings clause didn't match,
+- ;; so there must be a rest binding.
+- ((let ((var val) . bindings) body ...)
+- (let-loop #f bindings (var) (val) (body ...)))
+-
+- ;; Signature-style name: loop.
+- ((let (name binding ...) body ...)
+- (let-loop name (binding ...) () () (body ...)))
+-
+- ;; defun-style name: loop.
+- ((let name bindings body ...)
+- (let-loop name bindings () () (body ...)))))
+-
+-(define-syntax let-loop
+-
+- (syntax-rules ()
+-
+- ;; Standard binding: destructure and loop.
+- ((let-loop name ((var0 val0) binding ...) (var ... ) (val ... ) body)
+- (let-loop name ( binding ...) (var ... var0) (val ... val0) body))
+-
+- ;; Rest binding, no name: use standard-let, listing the rest values.
+- ;; Because of let's first clause, there is no "no bindings, no name" clause.
+- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
+- (standard-let ((var val) ... (rest-var (list rest-val ...))) . body))
+- ;; Or call a lambda with a rest parameter on all values.
+- ;; ((lambda (var ... . rest-var) . body) val ... rest-val ...))
+- ;; Or use one of several other reasonable alternatives.
+-
+- ;; No bindings, name: call a letrec'ed lambda.
+- ((let-loop name () (var ...) (val ...) body)
+- ((letrec ((name (lambda (var ...) . body)))
+- name)
+- val ...))
+-
+- ;; Rest binding, name: call a letrec'ed lambda.
+- ((let-loop name (rest-var rest-val ...) (var ...) (val ...) body)
+- ((letrec ((name (lambda (var ... . rest-var) . body)))
+- name)
+- val ... rest-val ...))))
+-</pre>
+-
+-
+-<H1>Copyright</H1>
+-
+-Copyright (C) Andy Gaynor (1999). All Rights Reserved.
+-<p>This document and translations of it may be copied and furnished to
+-others, and derivative works that comment on or otherwise explain it or
+-assist in its implementation may be prepared, copied, published and distributed,
+-in whole or in part, without restriction of any kind, provided that the
+-above copyright notice and this paragraph are included on all such copies
+-and derivative works. However, this document itself may not be modified
+-in any way, such as by removing the copyright notice or references to the
+-Scheme Request For Implementation process or editors, except as needed
+-for the purpose of developing SRFIs in which case the procedures for copyrights
+-defined in the SRFI process must be followed, or as required to translate
+-it into languages other than English.
+-<p>The limited permissions granted above are perpetual and will not be
+-revoked by the authors or their successors or assigns.
+-<p>This document and the information contained herein is provided on an
+-"AS IS" basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES,
+-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
+-USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+-WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+-
+- <hr>
+- <address>Editor: <a href="mailto:srfi-editors@srfi.schemers.org">Mike Sperber</a></address>
+-
+-</body>
+-</html>
+diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/info.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/info.rkt
+--- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/info.rkt 2018-01-31 13:04:07.236391659 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,14 +0,0 @@
+-#lang info
+-
+-(define collection 'multi)
+-
+-(define deps '("scheme-lib"
+- "base"
+- "r6rs-lib"
+- "srfi-lib"
+- "compatibility-lib"))
+-
+-
+-(define pkg-desc "implementation (no documentation) part of \"srfi nonfree\"")
+-
+-(define pkg-authors '(mflatt noel chongkai jay))
+diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt
+--- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 2018-01-31 13:04:07.236391659 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1 +0,0 @@
+-#lang s-exp srfi/provider srfi/%3a5
+diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt
+--- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 2018-01-31 13:04:07.236391659 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,3 +0,0 @@
+-#lang s-exp srfi/provider srfi/5
+-
+-;; FIXME: "rest arguments" need to generate mutable lists
+diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt
+--- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 2018-01-31 13:04:07.236391659 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,86 +0,0 @@
+-;;;
+-;;; <let.rkt> ---- SRFI 5 A compatible let form with signatures and rest arguments
+-;;; Time-stamp: <03/04/08 09:56:06 solsona>
+-;;;
+-;;; Usually, I would add a copyright notice, and the announce that
+-;;; this code is under the LGPL licence. Nevertheless, I only did the
+-;;; port to PLT Scheme v200, and here is the copyright notice,
+-;;; comments, and licence from the original source:
+-;;;
+-;;; Copyright (C) Andy Gaynor (1999-2003)
+-;;;
+-;;; The version of my-let here was cleaned up by: Paul Schlie <schlie(a)attbi.com>.
+-;;; Renamed to s:let by Eli Barzilay
+-
+-#lang scheme/base
+-(provide s:let)
+-
+-(define-syntax s:let
+- (syntax-rules ()
+- ;; standard
+- ((s:let () body ...)
+- (let () body ...))
+- ((s:let ((var val) ...) body ...)
+- (let ((var val) ...) body ...))
+-
+- ;; rest style
+- ((s:let ((var val) . bindings) body ...)
+- (let-loop #f bindings (var) (val) (body ...)))
+-
+- ;; signature style
+- ((s:let (name bindings ...) body ...)
+- (let-loop name (bindings ...) () () (body ...)))
+-
+- ;; standard named style
+- ((s:let name (bindings ...) body ...)
+- (let-loop name (bindings ...) () () (body ...)))
+-
+- ))
+-
+-;; A loop to walk down the list of bindings.
+-
+-(define-syntax let-loop
+- (syntax-rules ()
+-
+- ;; No more bindings - make a LETREC.
+- ((let-loop name () (vars ...) (vals ...) body)
+- ((letrec ((name (lambda (vars ...) . body)))
+- name)
+- vals ...))
+-
+- ;; Rest binding, no name
+- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
+- (let ((var val) ... (rest-var (list rest-val ...))) . body))
+-
+- ;; Process a (var val) pair.
+- ((let-loop name ((var val) more ...) (vars ...) (vals ...) body)
+- (let-loop name (more ...) (vars ... var) (vals ... val) body))
+-
+- ;; End with a rest variable - make a LETREC.
+- ((let-loop name (rest-var rest-vals ...) (vars ...) (vals ...) body)
+- ((letrec ((name (lambda (vars ... . rest-var) . body)))
+- name)
+- vals ... rest-vals ...))))
+-
+-;; Four loops - normal and `signature-style', each with and without a rest
+-;; binding.
+-;;
+-;;(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
+-;; (if (= i n)
+-;; f0
+-;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-;;
+-;;(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
+-;; (if (= i n)
+-;; f0
+-;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-;;
+-;;(let fibonacci ((n 10) (i 0) . (f 0 1))
+-;; (if (= i n)
+-;; (car f)
+-;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
+-;;
+-;;(let (fibonacci (n 10) (i 0) . (f 0 1))
+-;; (if (= i n)
+-;; (car f)
+-;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
+diff -urN racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/5.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5.rkt
+--- racket-6.12-nf/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 2018-01-31 13:04:07.236391659 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,2 +0,0 @@
+-;; module loader for SRFI-5
+-#lang s-exp srfi/provider srfi/5/let #:unprefix s:
diff --git a/racket-6.12-update-srfi.patch b/racket-6.12-update-srfi.patch
new file mode 100644
index 0000000..1894e32
--- /dev/null
+++ b/racket-6.12-update-srfi.patch
@@ -0,0 +1,4369 @@
+diff -urN racket-6.12-orig/share/links.rktd racket-6.12/share/links.rktd
+--- racket-6.12-orig/share/links.rktd 2018-01-26 16:12:13.000000000 -0500
++++ racket-6.12/share/links.rktd 2018-01-31 12:22:57.600504036 -0500
+@@ -133,6 +133,7 @@
+ (root "pkgs/r5rs-doc")
+ (root "pkgs/srfi-lite-lib")
+ (root "pkgs/srfi-lib")
++ (root "pkgs/srfi-lib-nonfree")
+ (root "pkgs/html-doc")
+ (root "pkgs/images-gui-lib")
+ (root "pkgs/images-doc")
+@@ -176,6 +177,7 @@
+ (root "pkgs/slideshow-exe")
+ (root "pkgs/slideshow-plugin")
+ (root "pkgs/srfi-doc")
++ (root "pkgs/srfi-doc-nonfree")
+ (root "pkgs/syntax-color-doc")
+ (root "pkgs/web-server-lib")
+ (root "pkgs/unix-socket-lib")
+diff -urN racket-6.12-orig/share/pkgs/srfi/info.rkt racket-6.12/share/pkgs/srfi/info.rkt
+--- racket-6.12-orig/share/pkgs/srfi/info.rkt 2018-01-26 16:10:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi/info.rkt 2018-01-31 12:22:58.139502019 -0500
+@@ -1 +1,16 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "6.12"))) (define collection (quote multi)) (define deps (quote ("srfi-lib" "srfi-doc"))) (define implies (quote ("srfi-lib" "srfi-doc"))) (define pkg-desc "Legacy SRFI (Scheme) libraries") (define pkg-authors (quote (mflatt noel chongkai jay)))))
++#lang info
++
++(define collection 'multi)
++
++(define deps '("srfi-lib"
++ "srfi-lib-nonfree"
++ "srfi-doc"
++ "srfi-doc-nonfree"))
++(define implies '("srfi-lib"
++ "srfi-lib-nonfree"
++ "srfi-doc"
++ "srfi-foc-nonfree"))
++
++(define pkg-desc "Legacy SRFI (Scheme) libraries")
++
++(define pkg-authors '(mflatt noel chongkai jay))
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc/info.rkt racket-6.12/share/pkgs/srfi-doc/info.rkt
+--- racket-6.12-orig/share/pkgs/srfi-doc/info.rkt 2018-01-26 16:10:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc/info.rkt 2018-01-31 12:22:58.139502019 -0500
+@@ -1 +1,24 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "6.12"))) (define collection (quote multi)) (define build-deps (quote ("mzscheme-doc" "scheme-lib" "base" "scribble-lib" "srfi-lib" "racket-doc" "r5rs-doc" "r6rs-doc" "compatibility-lib"))) (define update-implies (quote ("srfi-lib"))) (define pkg-desc "documentation part of \"srfi\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
++#lang info
++
++(define collection 'multi)
++
++(define build-deps '("mzscheme-doc"
++ "scheme-lib"
++ "base"
++ "scribble-lib"
++ "srfi-lib"
++ "racket-doc"
++ "r5rs-doc"
++ "r6rs-doc"
++ "compatibility-lib"))
++
++(define deps '("scheme-lib"
++ "base"
++ "scribble-lib"
++ "compatibility-lib"))
++
++(define update-implies '("srfi-lib"))
++
++(define pkg-desc "documentation part of \"srfi\"")
++
++(define pkg-authors '(mflatt noel chongkai jay))
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi.scrbl racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi.scrbl
+--- racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi.scrbl 2018-01-26 15:34:52.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi.scrbl 2018-01-31 12:22:58.144502000 -0500
+@@ -1,5 +1,6 @@
+ #lang scribble/doc
+-@(require scribble/manual
++@(require srfi/scribblings/util
++ scribble/manual
+ scribble/eval
+ scriblib/render-cond
+ scribble/core
+@@ -8,54 +9,6 @@
+ (for-label scheme/base
+ racket/stream))
+
+-@(define-syntax (srfi stx)
+- (syntax-case stx ()
+- [(_ num #:subdir subdir? . title)
+- (with-syntax ([srfi/n (string->symbol (format "srfi/~a" (syntax-e #'num)))])
+- #'(begin
+- (section #:tag (format "srfi-~a" num)
+- #:style 'unnumbered
+- (format "SRFI ~a: " num)
+- . title)
+- (defmodule srfi/n)
+- "Original specification: "
+- (let* ([label (format "SRFI ~a" num)]
+- [sub (if subdir? (format "srfi-~a/" num) "")]
+- [url (λ (b) (format "~a/srfi-std/~asrfi-~a.html" b sub num))])
+- (cond-element
+- [(or latex text) @link[(url "http://docs.racket-lang.org") label]]
+- [else @link[(url ".") label]]))))]
+- [(_ num . title) #'(srfi num #:subdir #f . title)]))
+-
+-@;{ The `lst' argument is a list of
+- (list sym syntactic-form? html-anchor) }
+-@(define (redirect n lst #:subdir [subdir? #f])
+- (let ([file (if subdir?
+- (format "srfi-~a/srfi-~a.html" n n)
+- (format "srfi-~a.html" n))]
+- [mod-path (string->symbol (format "srfi/~a" n))])
+- (make-binding-redirect-elements mod-path
+- (map (lambda (b)
+- (list (car b) (cadr b)
+- (build-path "srfi-std" file)
+- (caddr b)))
+- lst))))
+-
+-@(define in-core
+- (case-lambda
+- [() (in-core ".")]
+- [(k) @elem{This SRFI's bindings are also available in
+- @racketmodname[racket/base]@|k|}]))
+-
+-@(begin
+- (define-syntax-rule (def-mz mz-if)
+- (begin
+- (require (for-label mzscheme))
+- (define mz-if (racket if))))
+- (def-mz mz-if))
+-
+-@(define srfi-std (style #f (list (install-resource "srfi-std"))))
+-
+ @; ----------------------------------------------------------------------
+
+ @title{SRFIs: Libraries}
+@@ -245,14 +198,6 @@
+
+ @; ----------------------------------------
+
+-@srfi[5]{A compatible let form with signatures and rest arguments}
+-
+-@redirect[5 '(
+- (let #t "unnamed")
+-)]
+-
+-@; ----------------------------------------
+-
+ @srfi[6]{Basic String Ports}
+
+ @redirect[6 '(
+@@ -671,20 +616,6 @@
+
+ @; ----------------------------------------
+
+-@srfi[29]{Localization}
+-
+-@redirect[29 '(
+- (current-language #f "current-language")
+- (current-country #f "current-country")
+- (current-locale-details #f "current-locale-details")
+- (declare-bundle! #f "declare-bundle!")
+- (store-bundle #f "store-bundle")
+- (load-bundle! #f "load-bundle!")
+- (localized-template #f "localized-template")
+-)]
+-
+-@; ----------------------------------------
+-
+ @srfi[30]{Nested Multi-line Comments}
+
+ This SRFI's syntax is part of Racket's default reader.
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-29.html racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-29.html
+--- racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-29.html 2018-01-26 15:34:52.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
+@@ -1,507 +0,0 @@
+-<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
+-<html>
+- <head>
+- <meta name="generator" content="HTML Tidy, see www.w3.org">
+- <title>SRFI 29: Localization</title>
+- <meta name="author" content="Scott G. Miller">
+- <meta name="description" content="Localization">
+- </head>
+- <body>
+- <H1>Title</H1>
+-
+- SRFI 29: Localization
+-
+- <H1>Author</H1>
+-
+- Scott G. Miller
+-
+- <H1>Abstract</H1>
+-
+- This document specifies an interface to retrieving and
+- displaying locale sensitive messages. A Scheme program can
+- register one or more translations of templated messages, and
+- then write Scheme code that can transparently retrieve the
+- appropriate message for the locale under which the Scheme
+- system is running. <br>
+-
+-
+- <H1>Rationale</H1>
+-
+- <p>As any programmer that has ever had to deal with making his
+- or her code readable in more than one locale, the process of
+- sufficiently abstracting program messages from their
+- presentation to the user is non-trivial without help from the
+- programming language. Most modern programming language
+- libraries do provide some mechanism for performing this
+- separation.</p>
+-
+- <p>A portable API that allows a piece of code to run without
+- modification in different countries and under different
+- languages is a must for any non-trivial software project.
+- The interface should separate the logic of a program from
+- the myriad of translations that may be necessary.</p>
+-
+- <p>The interface described in this document provides such
+- functionality. The underlying implementation is also allowed to
+- use whatever datastructures it likes to provide access to the
+- translations in the most efficient manner possible. In
+- addition, the implementation is provided with standardized
+- functions that programs will use for accessing an external,
+- unspecified repository of translations.</p>
+-
+- <p>This interface <i>does not</i> cover all aspects of
+- localization, including support for non-latin characters,
+- number and date formatting, etc. Such functionality is the
+- scope of a future SRFI that may extend this one.</p>
+-
+- <H1>Dependencies</H1>
+-
+- An SRFI-29 conformant implementation must also implement
+- SRFI-28, Basic Format Strings. Message templates are strings
+- that must be processed by the <tt>format</tt> function
+- specified in that SRFI.
+-
+- <H1>Specification</H1>
+-
+- <h3>Message Bundles</h3>
+-
+- <p>A Message Bundle is a set of message templates and their
+- identifying keys. Each bundle contains one or more such
+- key/value pairs. The bundle itself is associated with a
+- <i>bundle specifier</i> which uniquely identifies the
+- bundle.</p>
+-
+- <h3>Bundle Specifiers</h3>
+-
+- <p>A Bundle Specifier is a Scheme list that describes, in order
+- of importance, the package and locale of a message bundle.
+- In most cases, a locale specifier will have between one
+- and three elements. The first element is a symbol denoting the
+- package for which this bundle applies. The second and third
+- elements denote a <i>locale</i>. The second element (first
+- element of the locale) if present, is the two letter, ISO 639-1
+- language code for the bundle. The third element, if present, is
+- a two letter ISO 3166-1 country code. In some cases, a
+- fourth element may be present, specifying the encoding used for
+- the bundle. All bundle specifier elements are Scheme
+- symbols.</p>
+-
+- <p>If only one translation is provided, it should be designated
+- only by a package name, for example <tt>(mathlib)</tt>. This
+- translation is called the <i>default</i> translation.</p>
+-
+- <h3>Bundle Searching</h3>
+-
+- <p>When a message template is retrieved from a bundle, the
+- Scheme implementation will provide the locale under which the
+- system is currently running. When the template is retrieved,
+- the package name will be specified. The Scheme system should
+- construct a Bundle Specifier from the provided package name and
+- the active locale. For example, when retrieving a message
+- template for French Canadian, in the <tt>mathlib</tt> package,
+- the bundle specifier '<tt>(mathlib fr ca)</tt>' is used. A
+- program may also retrieve the elements of the current locale
+- using the no-argument procedures:</p>
+-
+- <p><b><a name="current-language"></a><tt>current-language</tt></b> <tt>->
+- <i>symbol</i></tt><br>
+- <tt><b>current-language</b> <i>symbol</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- When given no arguments, returns the current ISO 639-1
+- language code as a symbol. If provided with an
+- argument, the current language is set to that named by the
+- symbol for the currently executing Scheme thread (or for the
+- entire Scheme system if such a distinction is not possible).
+-
+- </blockquote>
+-
+- <p><b><a name="current-country"></a><tt>current-country</tt></b> <tt>->
+- <i>symbol</i></tt><br>
+- <tt><b>current-country</b> <i>symbol</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- returns the current ISO 3166-1 country code as a symbol.
+- If provided with an argument, the current country is
+- set to that named by the symbol for the currently executing
+- Scheme thread (or for the entire Scheme system if such a
+- distinction is not possible).
+- </blockquote>
+-
+- <p><b><a name="current-locale-details"></a><tt>current-locale-details</tt></b> <tt>-> <i>list of
+- symbol</i></tt>s<br>
+- <tt><b>current-locale-details</b> <i>list-of-symbols</i> ->
+- undefined</tt><br>
+- </p>
+-
+- <blockquote>
+- Returns a list of additional locale details as a list of
+- symbols. This list may contain information about
+- encodings or other more specific information. If
+- provided with an argument, the current locale details are set
+- to those given in the currently executing Scheme thread (or
+- for the entire Scheme system if such a distinction is not
+- possible).
+- </blockquote>
+-
+- <p>The Scheme System should first check for a bundle with the
+- exact name provided. If no such bundle is found, the last
+- element from the list is removed and a search is tried for a
+- bundle with that name. If no bundle is then found, the list is
+- shortened by removing the last element again. If no message is
+- found and the bundle specifier is now the empty list, an error
+- should be raised.</p>
+-
+- <p>The reason for this search order is to provide the most
+- locale sensitive template possible, but to fall back on more
+- general templates if a translation has not yet been provided
+- for the given locale.</p>
+-
+- <h3>Message Templates</h3>
+-
+- <p>A message template is a localized message that may or may
+- not contain one of a number of formatting codes. A message
+- template is a Scheme string. The string is of a form that can
+- be processed by the <tt>format</tt> procedure found in many
+- Scheme systems and formally specified in SRFI-28 (Basic Format
+- Strings).</p>
+-
+- <p>This SRFI also extends SRFI-28 to provide an additional
+- <tt>format</tt> escape code:</p>
+-
+- <blockquote>
+- <tt>~[n]@*</tt> - Causes a value-requiring escape code that
+- follows this code immediately to reference the [N]'th
+- optional value absolutely, rather than the next unconsumed
+- value. The referenced value is <i>not</i> consumed.
+- </blockquote>
+- This extension allows optional values to be positionally
+- referenced, so that message templates can be constructed that
+- can produce the proper word ordering for a language.
+-
+- <h3>Preparing Bundles</h3>
+- Before a bundle may be used by the Scheme system to retrieve
+- localized template messages, they must be made available to the
+- Scheme system. This SRFI specifies a way to portably
+- define the bundles, as well as store them in and retrieve them
+- from an unspecified system which may be provided by resources
+- outside the Scheme system.<br>
+-
+-
+- <p><b><a name="declare-bundle!"></a><tt>declare-bundle!</tt></b> <tt><i>bundle-specifier
+- association-list</i> -> undefined<br>
+- </tt></p>
+-
+- <blockquote>
+- Declares a new bundle named by the given bundle-specifier.
+- The contents of the bundle are defined by the provided
+- association list. The list contains associations
+- between Scheme symbols and the message templates (Scheme
+- strings) they name. If a bundle already exists with the
+- given name, it is overwritten with the newly declared
+- bundle.<br>
+- </blockquote>
+- <tt><a name="store-bundle"></a><b>store-bundle</b> <i>bundle-specifier</i> ->
+- boolean</tt><br>
+-
+-
+- <blockquote>
+- Attempts to store a bundle named by the given bundle
+- specifier, and previously made available using
+- <tt>declare-bundle!</tt> or <tt>load-bundle!</tt>, in an
+- unspecified mechanism that may be persistent across Scheme
+- system restarts. If successful, a non-false value is
+- returned. If unsuccessful, <tt>#f</tt> is returned.<br>
+- </blockquote>
+- <tt><a name="load-bundle!"></a><b>load-bundle!</b> <i>bundle-specifier</i> ->
+- boolean</tt><br>
+-
+-
+- <blockquote>
+- Attempts to retrieve a bundle from an unspecified mechanism
+- which stores bundles outside the Scheme system. If the
+- bundle was retrieved successfully, the function returns a
+- non-false value, and the bundle is immediately available to
+- the Scheme system. If the bundle could not be found or loaded
+- successfully, the function returns <tt>#f</tt>, and the
+- Scheme system's bundle registry remains unaffected.<br>
+- </blockquote>
+- A compliant Scheme system may choose not to provide any
+- external mechanism to store localized bundles. If it does
+- not, it must still provide implementations for
+- <tt>store-bundle</tt> and <tt>load-bundle!</tt>. In such a
+- case, both functions must return <tt>#f</tt> regardless of the
+- arguments given. Users of this SRFI should recognize that the
+- inability to load or store a localized bundle in an external
+- repository is <i>not</i> a fatal error.<br>
+-
+-
+- <h3>Retrieving Localized Message Templates</h3>
+-
+- <p><a name="localized-template"></a><b><tt>localized-template</tt></b> <i><tt>package-name
+- message-template-name</tt></i> <tt>-> <i>string or #f<br>
+- </i></tt></p>
+-
+- <blockquote>
+- Retrieves a localized message template for the given package
+- name and the given message template name (both symbols).
+- If no such message could be found, false (#f) is
+- returned.<br>
+- <br>
+- </blockquote>
+- After retrieving a template, the calling program can use
+- <tt>format</tt> to produce a string that can be displayed to
+- the user.<br>
+-
+-
+- <h2>Examples</h2>
+- The below example makes use of SRFI-29 to display simple,
+- localized messages. It also defines its bundles in such a
+- way that the Scheme system may store and retrieve the bundles
+- from a more efficient system catalog, if available.<br>
+-
+-<pre>
+-(let ((translations
+- '(((en) . ((time . "Its ~a, ~a.")
+- (goodbye . "Goodbye, ~a.")))
+- ((fr) . ((time . "~1@*~a, c'est ~a.")
+- (goodbye . "Au revoir, ~a."))))))
+- (for-each (lambda (translation)
+- (let ((bundle-name (cons 'hello-program (car translation))))
+- (if (not (load-bundle! bundle-name))
+- (begin
+- (declare-bundle! bundle-name (cdr translation))
+- (store-bundle! bundle-name)))))
+- translations))
+-
+-(define localized-message
+- (lambda (message-name . args)
+- (apply format (cons (localized-template 'hello-program
+- message-name)
+- args))))
+-
+-(let ((myname "Fred"))
+- (display (localized-message 'time "12:00" myname))
+- (display #\newline)
+-
+- (display (localized-message 'goodbye myname))
+- (display #\newline))
+-
+-;; Displays (English):
+-;; Its 12:00, Fred.
+-;; Goodbye, Fred.
+-;;
+-;; French:
+-;; Fred, c'est 12:00.
+-;; Au revoir, Fred.
+-</pre>
+-
+- <H1>Implementation</H1>
+-
+- <p>The implementation requires that the Scheme system provide a
+- definition for <tt>current-language</tt> and
+- <tt>current-country</tt> capable of distinguishing the correct
+- locale present during a Scheme session. The definitions of
+- those functions in the reference implementation are not capable
+- of that distinction. Their implementation is provided only so
+- that the following code can run in any R4RS scheme system.
+- <br>
+- </p>
+-
+- <p>In addition, the below implementation of a compliant
+- <tt>format</tt> requires SRFI-6 (Basic String Ports) and
+- SRFI-23 (Error reporting)</p>
+-<pre>
+-;; The association list in which bundles will be stored
+-(define *localization-bundles* '())
+-
+-;; The current-language and current-country functions provided
+-;; here must be rewritten for each Scheme system to default to the
+-;; actual locale of the session
+-(define current-language
+- (let ((current-language-value 'en))
+- (lambda args
+- (if (null? args)
+- current-language-value
+- (set! current-language-value (car args))))))
+-
+-(define current-country
+- (let ((current-country-value 'us))
+- (lambda args
+- (if (null? args)
+- current-country-value
+- (set! current-country-value (car args))))))
+-
+-;; The load-bundle! and store-bundle! both return #f in this
+-;; reference implementation. A compliant implementation need
+-;; not rewrite these procedures.
+-(define load-bundle!
+- (lambda (bundle-specifier)
+- #f))
+-
+-(define store-bundle!
+- (lambda (bundle-specifier)
+- #f))
+-
+-;; Declare a bundle of templates with a given bundle specifier
+-(define declare-bundle!
+- (letrec ((remove-old-bundle
+- (lambda (specifier bundle)
+- (cond ((null? bundle) '())
+- ((equal? (caar bundle) specifier)
+- (cdr bundle))
+- (else (cons (car bundle)
+- (remove-old-bundle specifier
+- (cdr bundle))))))))
+- (lambda (bundle-specifier bundle-assoc-list)
+- (set! *localization-bundles*
+- (cons (cons bundle-specifier bundle-assoc-list)
+- (remove-old-bundle bundle-specifier
+- *localization-bundles*))))))
+-
+-;;Retrieve a localized template given its package name and a template name
+-(define localized-template
+- (letrec ((rdc
+- (lambda (ls)
+- (if (null? (cdr ls))
+- '()
+- (cons (car ls) (rdc (cdr ls))))))
+- (find-bundle
+- (lambda (specifier template-name)
+- (cond ((assoc specifier *localization-bundles*) =>
+- (lambda (bundle) bundle))
+- ((null? specifier) #f)
+- (else (find-bundle (rdc specifier)
+- template-name))))))
+- (lambda (package-name template-name)
+- (let loop ((specifier (cons package-name
+- (list (current-language)
+- (current-country)))))
+- (and (not (null? specifier))
+- (let ((bundle (find-bundle specifier template-name)))
+- (and bundle
+- (cond ((assq template-name bundle) => cdr)
+- ((null? (cdr specifier)) #f)
+- (else (loop (rdc specifier)))))))))))
+-
+-;;An SRFI-28 and SRFI-29 compliant version of format. It requires
+-;;SRFI-23 for error reporting.
+-(define format
+- (lambda (format-string . objects)
+- (let ((buffer (open-output-string)))
+- (let loop ((format-list (string->list format-string))
+- (objects objects)
+- (object-override #f))
+- (cond ((null? format-list) (get-output-string buffer))
+- ((char=? (car format-list) #\~)
+- (cond ((null? (cdr format-list))
+- (error 'format "Incomplete escape sequence"))
+- ((char-numeric? (cadr format-list))
+- (let posloop ((fl (cddr format-list))
+- (pos (string->number
+- (string (cadr format-list)))))
+- (cond ((null? fl)
+- (error 'format "Incomplete escape sequence"))
+- ((and (eq? (car fl) '#\@)
+- (null? (cdr fl)))
+- (error 'format "Incomplete escape sequence"))
+- ((and (eq? (car fl) '#\@)
+- (eq? (cadr fl) '#\*))
+- (loop (cddr fl) objects (list-ref objects pos)))
+- (else
+- (posloop (cdr fl)
+- (+ (* 10 pos)
+- (string->number
+- (string (car fl)))))))))
+- (else
+- (case (cadr format-list)
+- ((#\a)
+- (cond (object-override
+- (begin
+- (display object-override buffer)
+- (loop (cddr format-list) objects #f)))
+- ((null? objects)
+- (error 'format "No value for escape sequence"))
+- (else
+- (begin
+- (display (car objects) buffer)
+- (loop (cddr format-list)
+- (cdr objects) #f)))))
+- ((#\s)
+- (cond (object-override
+- (begin
+- (display object-override buffer)
+- (loop (cddr format-list) objects #f)))
+- ((null? objects)
+- (error 'format "No value for escape sequence"))
+- (else
+- (begin
+- (write (car objects) buffer)
+- (loop (cddr format-list)
+- (cdr objects) #f)))))
+- ((#\%)
+- (if object-override
+- (error 'format "Escape sequence following positional override does not require a value"))
+- (display #\newline buffer)
+- (loop (cddr format-list) objects #f))
+- ((#\~)
+- (if object-override
+- (error 'format "Escape sequence following positional override does not require a value"))
+- (display #\~ buffer)
+- (loop (cddr format-list) objects #f))
+- (else
+- (error 'format "Unrecognized escape sequence"))))))
+- (else (display (car format-list) buffer)
+- (loop (cdr format-list) objects #f)))))))
+-
+-</pre>
+-
+- <H1>Copyright</H1>
+-
+- Copyright (C) Scott G. Miller (2002). All Rights Reserved.
+-
+- <p>This document and translations of it may be copied and
+- furnished to others, and derivative works that comment on or
+- otherwise explain it or assist in its implementation may be
+- prepared, copied, published and distributed, in whole or in
+- part, without restriction of any kind, provided that the above
+- copyright notice and this paragraph are included on all such
+- copies and derivative works. However, this document itself may
+- not be modified in any way, such as by removing the copyright
+- notice or references to the Scheme Request For Implementation
+- process or editors, except as needed for the purpose of
+- developing SRFIs in which case the procedures for copyrights
+- defined in the SRFI process must be followed, or as required to
+- translate it into languages other than English.</p>
+-
+- <p>The limited permissions granted above are perpetual and will
+- not be revoked by the authors or their successors or
+- assigns.</p>
+-
+- <p>This document and the information contained herein is
+- provided on an "AS IS" basis and THE AUTHOR AND THE SRFI
+- EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+- BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+- HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
+- OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
+- <hr>
+-
+- <address>
+- Editor: <a href="mailto:srfi-editors@srfi.schemers.org">David
+- Rush</a>
+- </address>
+-
+- <address>
+- Author: <a href="mailto:scgmille@freenetproject.org">Scott G.
+- Miller</a>
+- </address>
+- <!-- Created: Tue Sep 29 19:20:08 EDT 1998 -->
+- <!-- hhmts start -->Last modified: Mon Jun 17 12:00:08 Pacific
+- Daylight Time 2002 <!-- hhmts end --> <br>
+- </body>
+-</html>
+-
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-5.html racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-5.html
+--- racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-5.html 2018-01-26 15:34:52.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
+@@ -1,345 +0,0 @@
+-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
+-<html>
+-<head>
+- <title>SRFI 5: A compatible let form with signatures and rest arguments</title>
+-</head>
+-<body>
+-
+-<H1>Title</H1>
+-
+-SRFI-5: A compatible <code>let</code> form with signatures and rest arguments
+-
+-<H1>Author</H1>
+-
+-Andy Gaynor
+-
+-<H1>Status</H1>
+-
+-This SRFI is currently in ``final'' status. To see an explanation of each status that a SRFI can hold, see <A HREF="http://srfi.schemers.org/srfi-process.html">here</A>.
+-You can access the discussion on this SRFI via <A HREF="http://srfi.schemers.org/srfi-5/mail-archive/maillist.html">the archive of the mailing list</A>.
+-<P><UL>
+-<LI>Received: 1999/2/2
+-<LI>Draft: 1999/2/10-1999/04/12
+-<LI>Final: 1999/4/26
+-<LI>Revised reference implementation: 2003/01/27
+-</UL>
+-
+-<H1>Abstract</H1>
+-
+-The <i>named-let</i> incarnation of the <code>let</code> form has two slight
+-inconsistencies with the <code>define</code> form. As defined, the <code>let</code>
+-form makes no accommodation for rest arguments, an issue of functionality
+-and consistency. As defined, the <code>let</code> form does not accommodate
+-signature-style syntax, an issue of aesthetics and consistency. Both
+-issues are addressed here in a manner which is compatible with the traditional
+-<code>let</code> form but for minor extensions.
+-
+-<H1>Rationale</H1>
+-
+-<H2>Signature-style Syntax</H2>
+-
+-Consider the following two equivalent definitions:
+-
+-<p><pre>
+-(define fibonacci
+- (lambda (n i f0 f1)
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1)))))
+-
+-(define (fibonacci n i f0 f1)
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-</pre>
+-
+-Although there is a named-let analog for the former form, there is none
+-for the latter. To wit, suppose one wished to compute the 10th element
+-of the Fibonacci sequence using a named let:
+-
+-<p>
+-<pre>
+-(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-Values: 55
+-</pre>
+-
+-As it stands, one cannot equivalently write
+-
+-<p>
+-<pre>
+-(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
+- (if (= i n)
+- f0
+- (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-</pre>
+-
+-which is consistent with <code>define</code>'s signature-style form.
+-<p>Those that favor the signature style may prefer this extension.
+-In any case, it may be more appropriate to include all bound names within
+-the binding section. As presented, this straightforward extension
+-introduces no ambiguity or incompatibility with the existing definition
+-of let.
+-
+-<H2>Rest Arguments</H2>
+-
+-As it stands, one cannot write a named let with rest arguments, as in
+-
+-<p>
+-<pre>
+-(let (blast (port (current-output-port)) . (x (+ 1 2) 4 5))
+- (if (null? x)
+- 'just-a-silly-contrived-example
+- (begin
+- (write (car x) port)
+- (apply blast port (cdr x)))))
+-</pre>
+-
+-otherwise equivalent to
+-
+-<p>
+-<pre>
+-(letrec ((blast (lambda (port . x)
+- (if (null? x)
+- 'just-a-silly-contrived-example
+- (begin
+- (write (car x) port)
+- (apply blast port (cdr x)))))))
+- (blast (current-output-port) (+ 1 2) 4 5))
+-</pre>
+-
+-While this example is rather contrived, the functionality is not.
+-There are several times when the author has used this construct in practice.
+-Regardless, there is little reason to deny the <code>let</code> form access to
+-all the features of lambda functionality.
+-
+-<H2>Symbols in Binding Sections</H2>
+-
+-Both the features above rely upon the placement of symbols in <code>let</code>
+-binding lists (this statement is intentially simplistic). The only
+-other apparent use of such symbol placement is to tersely bind variables
+-to unspecified values. For example, one might desire to use
+-<code>(let (foo bar baz) ...)</code>
+-to bind <code>foo</code>, <code>bar</code>, and <code>baz</code> to
+-unspecified values.
+-
+-<p>This usage is considered less important in light of the rationales
+-presented above, and an alternate syntax is immediately apparent, as
+-in <code>(let ((foo) (bar) (baz)) ...)</code> This may even
+-be preferable, consistently parenthesizing normal binding clauses.
+-
+-<H1>Specification</H1>
+-
+-<H2>Syntax</H2>
+-
+-<p>
+-A formal specification of the syntax follows. Below, body, expression,
+-and identifier are free. Each instantiation of binding-name must be
+-unique.
+-</p>
+-
+-<p>
+-<pre>
+- let = "(" "let" let-bindings body ")"
+- expressions = nothing | expression expressions
+- let-bindings = let-name bindings
+- | "(" let-name "." bindings ")"
+- let-name = identifier
+- bindings = "(" ")"
+- | rest-binding
+- | "(" normal-bindings ["." rest-binding] ")"
+-normal-bindings = nothing
+- | normal-binding normal-bindings
+- normal-binding = "(" binding-name expression ")"
+- binding-name = identifier
+- rest-binding = "(" binding-name expressions ")"
+-</pre>
+-
+-<p>
+-For clarity and convenience, an informal specification follows.
+-</p>
+-
+-<ol>
+-<li><a name="unnamed">Unnamed</a>
+-
+-<p><pre>
+-(let ((<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-non-sig">
+-Named, non-signature-style, no rest argument</a>
+-
+-<p><pre>
+-(let <name> ((<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-sig">Named, signature-style, no rest argument</a>
+-
+-<p><pre>
+-(let (<name> (<parameter> <argument>)...)
+- <body>...)
+-</pre>
+-</li>
+-
+-<li><a name="named-non-sig-rest">Named, non-signature-style, rest argument</a>
+-
+-<p><pre>
+-(let <name> ((<parameter> <argument>)...
+-
+-. (<rest-parameter> <rest-argument>...))
+- <body>...)
+-</pre>
+-
+-<li><a name="named-sig-rest">Named, signature-style, rest argument</a>
+-
+-<p><pre>
+-(let (<name> (<parameter> <argument>)...
+-
+-. (<rest-parameter> <rest-argument>...))
+- <body>...)
+-</pre>
+-</li>
+-</ol>
+-
+-<H2>Semantics</H2>
+-
+-Let <code>$lambda</code> and <code>$letrec</code> be hygienic bindings for the <code>lambda</code>
+-and <code>letrec</code> forms, respectively.
+-
+-<ul>
+-<li>For informal syntax 1:
+-
+-<p><pre>
+-(($lambda (<parameter>...) <body>...) <argument>...)
+-</pre>
+-</li>
+-
+-<li>For informal syntaxes 2 and 3:
+-
+-<p>
+-<pre>
+-($letrec ((<name> ($lambda (<parameter>...) <body>...)))
+- (<name> <argument>...))
+-</pre>
+-</li>
+-
+-<li>For informal syntaxes 4 and 5:
+-
+-<p>
+-<pre>
+-($letrec ((<name> ($lambda (<parameter>...
+-
+-. <rest-parameter>) <body>...)))
+- (<name> <argument>... <rest-argument>...))
+-</pre>
+-</li>
+-</ul>
+-
+-<H1>Implementation</H1>
+-
+-Here is an implementation using <code>SYNTAX-RULES</code>.
+-
+-<p>
+-<pre>
+-;; Use your own standard let.
+-;; Or call a lambda.
+-;; (define-syntax standard-let
+-;;
+-;; (syntax-rules ()
+-;;
+-;; ((let ((var val) ...) body ...)
+-;; ((lambda (var ...) body ...) val ...))))
+-
+-(define-syntax let
+-
+- (syntax-rules ()
+-
+- ;; No bindings: use standard-let.
+- ((let () body ...)
+- (standard-let () body ...))
+- ;; Or call a lambda.
+- ;; ((lambda () body ...))
+-
+- ;; All standard bindings: use standard-let.
+- ((let ((var val) ...) body ...)
+- (standard-let ((var val) ...) body ...))
+- ;; Or call a lambda.
+- ;; ((lambda (var ...) body ...) val ...)
+-
+- ;; One standard binding: loop.
+- ;; The all-standard-bindings clause didn't match,
+- ;; so there must be a rest binding.
+- ((let ((var val) . bindings) body ...)
+- (let-loop #f bindings (var) (val) (body ...)))
+-
+- ;; Signature-style name: loop.
+- ((let (name binding ...) body ...)
+- (let-loop name (binding ...) () () (body ...)))
+-
+- ;; defun-style name: loop.
+- ((let name bindings body ...)
+- (let-loop name bindings () () (body ...)))))
+-
+-(define-syntax let-loop
+-
+- (syntax-rules ()
+-
+- ;; Standard binding: destructure and loop.
+- ((let-loop name ((var0 val0) binding ...) (var ... ) (val ... ) body)
+- (let-loop name ( binding ...) (var ... var0) (val ... val0) body))
+-
+- ;; Rest binding, no name: use standard-let, listing the rest values.
+- ;; Because of let's first clause, there is no "no bindings, no name" clause.
+- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
+- (standard-let ((var val) ... (rest-var (list rest-val ...))) . body))
+- ;; Or call a lambda with a rest parameter on all values.
+- ;; ((lambda (var ... . rest-var) . body) val ... rest-val ...))
+- ;; Or use one of several other reasonable alternatives.
+-
+- ;; No bindings, name: call a letrec'ed lambda.
+- ((let-loop name () (var ...) (val ...) body)
+- ((letrec ((name (lambda (var ...) . body)))
+- name)
+- val ...))
+-
+- ;; Rest binding, name: call a letrec'ed lambda.
+- ((let-loop name (rest-var rest-val ...) (var ...) (val ...) body)
+- ((letrec ((name (lambda (var ... . rest-var) . body)))
+- name)
+- val ... rest-val ...))))
+-</pre>
+-
+-
+-<H1>Copyright</H1>
+-
+-Copyright (C) Andy Gaynor (1999). All Rights Reserved.
+-<p>This document and translations of it may be copied and furnished to
+-others, and derivative works that comment on or otherwise explain it or
+-assist in its implementation may be prepared, copied, published and distributed,
+-in whole or in part, without restriction of any kind, provided that the
+-above copyright notice and this paragraph are included on all such copies
+-and derivative works. However, this document itself may not be modified
+-in any way, such as by removing the copyright notice or references to the
+-Scheme Request For Implementation process or editors, except as needed
+-for the purpose of developing SRFIs in which case the procedures for copyrights
+-defined in the SRFI process must be followed, or as required to translate
+-it into languages other than English.
+-<p>The limited permissions granted above are perpetual and will not be
+-revoked by the authors or their successors or assigns.
+-<p>This document and the information contained herein is provided on an
+-"AS IS" basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES,
+-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
+-USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+-WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+-
+- <hr>
+- <address>Editor: <a href="mailto:srfi-editors@srfi.schemers.org">Mike Sperber</a></address>
+-
+-</body>
+-</html>
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/util.rkt racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/util.rkt
+--- racket-6.12-orig/share/pkgs/srfi-doc/srfi/scribblings/util.rkt 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc/srfi/scribblings/util.rkt 2018-01-31 12:22:58.144502000 -0500
+@@ -0,0 +1,61 @@
++#lang scribble/doc
++
++@(require scribble/manual
++ scribble/eval
++ scriblib/render-cond
++ scribble/core
++ scribble/html-properties
++ (for-syntax scheme/base)
++ (for-label scheme/base
++ racket/stream))
++
++@(provide (all-defined-out))
++
++@(define-syntax (srfi stx)
++ (syntax-case stx ()
++ [(_ num #:subdir subdir? . title)
++ (with-syntax ([srfi/n (string->symbol (format "srfi/~a" (syntax-e #'num)))])
++ #'(begin
++ (section #:tag (format "srfi-~a" num)
++ #:style 'unnumbered
++ (format "SRFI ~a: " num)
++ . title)
++ (defmodule srfi/n)
++ "Original specification: "
++ (let* ([label (format "SRFI ~a" num)]
++ [sub (if subdir? (format "srfi-~a/" num) "")]
++ [url (λ (b) (format "~a/srfi-std/~asrfi-~a.html" b sub num))])
++ (cond-element
++ [(or latex text) @link[(url "http://docs.racket-lang.org") label]]
++ [else @link[(url ".") label]]))))]
++ [(_ num . title) #'(srfi num #:subdir #f . title)]))
++
++@;{ The `lst' argument is a list of
++ (list sym syntactic-form? html-anchor) }
++@(define (redirect n lst #:subdir [subdir? #f])
++ (let ([file (if subdir?
++ (format "srfi-~a/srfi-~a.html" n n)
++ (format "srfi-~a.html" n))]
++ [mod-path (string->symbol (format "srfi/~a" n))])
++ (make-binding-redirect-elements mod-path
++ (map (lambda (b)
++ (list (car b) (cadr b)
++ (build-path "srfi-std" file)
++ (caddr b)))
++ lst))))
++
++@(define in-core
++ (case-lambda
++ [() (in-core ".")]
++ [(k) @elem{This SRFI's bindings are also available in
++ @racketmodname[racket/base]@|k|}]))
++
++@(begin
++ (define-syntax-rule (def-mz mz-if)
++ (begin
++ (require (for-label mzscheme))
++ (define mz-if (racket if))))
++ (def-mz mz-if))
++
++@(define srfi-std (style #f (list (install-resource "srfi-std"))))
++
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/info.rkt racket-6.12/share/pkgs/srfi-doc-nonfree/info.rkt
+--- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/info.rkt 2018-01-31 12:22:58.144502000 -0500
+@@ -0,0 +1,19 @@
++#lang info
++
++(define collection 'multi)
++
++(define build-deps '("mzscheme-doc"
++ "scheme-lib"
++ "base"
++ "scribble-lib"
++ "srfi-doc"
++ "srfi-lib-nonfree"
++ "racket-doc"
++ "r5rs-doc"
++ "r6rs-doc"
++ "compatibility-lib"))
++(define update-implies '("srfi-lib-nonfree"))
++
++(define pkg-desc "documentation part of \"srfi nonfree\"")
++
++(define pkg-authors '(mflatt noel chongkai jay))
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt
+--- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/info.rkt 2018-01-31 12:22:58.144502000 -0500
+@@ -0,0 +1,3 @@
++#lang info
++
++(define scribblings '(("srfi-nf.scrbl" (multi-page) (library 100))))
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl
+--- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-nf.scrbl 2018-01-31 12:22:58.144502000 -0500
+@@ -0,0 +1,66 @@
++#lang scribble/doc
++@(require srfi/scribblings/util
++ scribble/manual
++ scribble/eval
++ scriblib/render-cond
++ scribble/core
++ scribble/html-properties
++ (for-syntax scheme/base)
++ (for-label scheme/base
++ racket/stream))
++
++@; ----------------------------------------------------------------------
++
++@title{SRFI Nonfree Libraries and Documentation}
++
++The @link[#:style srfi-std "http://srfi.schemers.org/"]{Scheme Requests for
++Implementation} (a.k.a. @deftech{SRFI}) process allows individual
++members of the Scheme community to propose libraries and extensions to
++be supported by multiple Scheme implementations.
++
++Racket is distributed with implementations of many SRFIs, most of
++which can be implemented as libraries. To import the bindings of SRFI
++@math{n}, use
++
++@racketblock[
++(require @#,elem{@racketidfont{srfi/}@math{n}})
++]
++
++This document lists the SRFIs that are supported by Racket and
++provides a link to the original SRFI specification (which is also
++distributed as part of Racket's documentation).
++
++The following SRFI specification documents are licensed restrictively.
++
++@table-of-contents[]
++
++
++@; ----------------------------------------
++
++@srfi[5]{A compatible let form with signatures and rest arguments}
++
++@redirect[5 '(
++ (let #t "unnamed")
++)]
++
++Racket provides this SRFI in the @racket[srfi-lib-nonfree] package.
++
++@; ----------------------------------------
++
++@srfi[29]{Localization}
++
++@redirect[29 '(
++ (current-language #f "current-language")
++ (current-country #f "current-country")
++ (current-locale-details #f "current-locale-details")
++ (declare-bundle! #f "declare-bundle!")
++ (store-bundle #f "store-bundle")
++ (load-bundle! #f "load-bundle!")
++ (localized-template #f "localized-template")
++)]
++
++Racket provides a free implementation of this SRFI in the @racket[srfi-lib] package. Only the SRFI specification document is nonfree.
++
++@; ----------------------------------------
++
++@index-section[]
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html
+--- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-29.html 2018-01-31 12:22:58.144502000 -0500
+@@ -0,0 +1,507 @@
++<!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
++<html>
++ <head>
++ <meta name="generator" content="HTML Tidy, see www.w3.org">
++ <title>SRFI 29: Localization</title>
++ <meta name="author" content="Scott G. Miller">
++ <meta name="description" content="Localization">
++ </head>
++ <body>
++ <H1>Title</H1>
++
++ SRFI 29: Localization
++
++ <H1>Author</H1>
++
++ Scott G. Miller
++
++ <H1>Abstract</H1>
++
++ This document specifies an interface to retrieving and
++ displaying locale sensitive messages. A Scheme program can
++ register one or more translations of templated messages, and
++ then write Scheme code that can transparently retrieve the
++ appropriate message for the locale under which the Scheme
++ system is running. <br>
++
++
++ <H1>Rationale</H1>
++
++ <p>As any programmer that has ever had to deal with making his
++ or her code readable in more than one locale, the process of
++ sufficiently abstracting program messages from their
++ presentation to the user is non-trivial without help from the
++ programming language. Most modern programming language
++ libraries do provide some mechanism for performing this
++ separation.</p>
++
++ <p>A portable API that allows a piece of code to run without
++ modification in different countries and under different
++ languages is a must for any non-trivial software project.
++ The interface should separate the logic of a program from
++ the myriad of translations that may be necessary.</p>
++
++ <p>The interface described in this document provides such
++ functionality. The underlying implementation is also allowed to
++ use whatever datastructures it likes to provide access to the
++ translations in the most efficient manner possible. In
++ addition, the implementation is provided with standardized
++ functions that programs will use for accessing an external,
++ unspecified repository of translations.</p>
++
++ <p>This interface <i>does not</i> cover all aspects of
++ localization, including support for non-latin characters,
++ number and date formatting, etc. Such functionality is the
++ scope of a future SRFI that may extend this one.</p>
++
++ <H1>Dependencies</H1>
++
++ An SRFI-29 conformant implementation must also implement
++ SRFI-28, Basic Format Strings. Message templates are strings
++ that must be processed by the <tt>format</tt> function
++ specified in that SRFI.
++
++ <H1>Specification</H1>
++
++ <h3>Message Bundles</h3>
++
++ <p>A Message Bundle is a set of message templates and their
++ identifying keys. Each bundle contains one or more such
++ key/value pairs. The bundle itself is associated with a
++ <i>bundle specifier</i> which uniquely identifies the
++ bundle.</p>
++
++ <h3>Bundle Specifiers</h3>
++
++ <p>A Bundle Specifier is a Scheme list that describes, in order
++ of importance, the package and locale of a message bundle.
++ In most cases, a locale specifier will have between one
++ and three elements. The first element is a symbol denoting the
++ package for which this bundle applies. The second and third
++ elements denote a <i>locale</i>. The second element (first
++ element of the locale) if present, is the two letter, ISO 639-1
++ language code for the bundle. The third element, if present, is
++ a two letter ISO 3166-1 country code. In some cases, a
++ fourth element may be present, specifying the encoding used for
++ the bundle. All bundle specifier elements are Scheme
++ symbols.</p>
++
++ <p>If only one translation is provided, it should be designated
++ only by a package name, for example <tt>(mathlib)</tt>. This
++ translation is called the <i>default</i> translation.</p>
++
++ <h3>Bundle Searching</h3>
++
++ <p>When a message template is retrieved from a bundle, the
++ Scheme implementation will provide the locale under which the
++ system is currently running. When the template is retrieved,
++ the package name will be specified. The Scheme system should
++ construct a Bundle Specifier from the provided package name and
++ the active locale. For example, when retrieving a message
++ template for French Canadian, in the <tt>mathlib</tt> package,
++ the bundle specifier '<tt>(mathlib fr ca)</tt>' is used. A
++ program may also retrieve the elements of the current locale
++ using the no-argument procedures:</p>
++
++ <p><b><a name="current-language"></a><tt>current-language</tt></b> <tt>->
++ <i>symbol</i></tt><br>
++ <tt><b>current-language</b> <i>symbol</i> ->
++ undefined</tt><br>
++ </p>
++
++ <blockquote>
++ When given no arguments, returns the current ISO 639-1
++ language code as a symbol. If provided with an
++ argument, the current language is set to that named by the
++ symbol for the currently executing Scheme thread (or for the
++ entire Scheme system if such a distinction is not possible).
++
++ </blockquote>
++
++ <p><b><a name="current-country"></a><tt>current-country</tt></b> <tt>->
++ <i>symbol</i></tt><br>
++ <tt><b>current-country</b> <i>symbol</i> ->
++ undefined</tt><br>
++ </p>
++
++ <blockquote>
++ returns the current ISO 3166-1 country code as a symbol.
++ If provided with an argument, the current country is
++ set to that named by the symbol for the currently executing
++ Scheme thread (or for the entire Scheme system if such a
++ distinction is not possible).
++ </blockquote>
++
++ <p><b><a name="current-locale-details"></a><tt>current-locale-details</tt></b> <tt>-> <i>list of
++ symbol</i></tt>s<br>
++ <tt><b>current-locale-details</b> <i>list-of-symbols</i> ->
++ undefined</tt><br>
++ </p>
++
++ <blockquote>
++ Returns a list of additional locale details as a list of
++ symbols. This list may contain information about
++ encodings or other more specific information. If
++ provided with an argument, the current locale details are set
++ to those given in the currently executing Scheme thread (or
++ for the entire Scheme system if such a distinction is not
++ possible).
++ </blockquote>
++
++ <p>The Scheme System should first check for a bundle with the
++ exact name provided. If no such bundle is found, the last
++ element from the list is removed and a search is tried for a
++ bundle with that name. If no bundle is then found, the list is
++ shortened by removing the last element again. If no message is
++ found and the bundle specifier is now the empty list, an error
++ should be raised.</p>
++
++ <p>The reason for this search order is to provide the most
++ locale sensitive template possible, but to fall back on more
++ general templates if a translation has not yet been provided
++ for the given locale.</p>
++
++ <h3>Message Templates</h3>
++
++ <p>A message template is a localized message that may or may
++ not contain one of a number of formatting codes. A message
++ template is a Scheme string. The string is of a form that can
++ be processed by the <tt>format</tt> procedure found in many
++ Scheme systems and formally specified in SRFI-28 (Basic Format
++ Strings).</p>
++
++ <p>This SRFI also extends SRFI-28 to provide an additional
++ <tt>format</tt> escape code:</p>
++
++ <blockquote>
++ <tt>~[n]@*</tt> - Causes a value-requiring escape code that
++ follows this code immediately to reference the [N]'th
++ optional value absolutely, rather than the next unconsumed
++ value. The referenced value is <i>not</i> consumed.
++ </blockquote>
++ This extension allows optional values to be positionally
++ referenced, so that message templates can be constructed that
++ can produce the proper word ordering for a language.
++
++ <h3>Preparing Bundles</h3>
++ Before a bundle may be used by the Scheme system to retrieve
++ localized template messages, they must be made available to the
++ Scheme system. This SRFI specifies a way to portably
++ define the bundles, as well as store them in and retrieve them
++ from an unspecified system which may be provided by resources
++ outside the Scheme system.<br>
++
++
++ <p><b><a name="declare-bundle!"></a><tt>declare-bundle!</tt></b> <tt><i>bundle-specifier
++ association-list</i> -> undefined<br>
++ </tt></p>
++
++ <blockquote>
++ Declares a new bundle named by the given bundle-specifier.
++ The contents of the bundle are defined by the provided
++ association list. The list contains associations
++ between Scheme symbols and the message templates (Scheme
++ strings) they name. If a bundle already exists with the
++ given name, it is overwritten with the newly declared
++ bundle.<br>
++ </blockquote>
++ <tt><a name="store-bundle"></a><b>store-bundle</b> <i>bundle-specifier</i> ->
++ boolean</tt><br>
++
++
++ <blockquote>
++ Attempts to store a bundle named by the given bundle
++ specifier, and previously made available using
++ <tt>declare-bundle!</tt> or <tt>load-bundle!</tt>, in an
++ unspecified mechanism that may be persistent across Scheme
++ system restarts. If successful, a non-false value is
++ returned. If unsuccessful, <tt>#f</tt> is returned.<br>
++ </blockquote>
++ <tt><a name="load-bundle!"></a><b>load-bundle!</b> <i>bundle-specifier</i> ->
++ boolean</tt><br>
++
++
++ <blockquote>
++ Attempts to retrieve a bundle from an unspecified mechanism
++ which stores bundles outside the Scheme system. If the
++ bundle was retrieved successfully, the function returns a
++ non-false value, and the bundle is immediately available to
++ the Scheme system. If the bundle could not be found or loaded
++ successfully, the function returns <tt>#f</tt>, and the
++ Scheme system's bundle registry remains unaffected.<br>
++ </blockquote>
++ A compliant Scheme system may choose not to provide any
++ external mechanism to store localized bundles. If it does
++ not, it must still provide implementations for
++ <tt>store-bundle</tt> and <tt>load-bundle!</tt>. In such a
++ case, both functions must return <tt>#f</tt> regardless of the
++ arguments given. Users of this SRFI should recognize that the
++ inability to load or store a localized bundle in an external
++ repository is <i>not</i> a fatal error.<br>
++
++
++ <h3>Retrieving Localized Message Templates</h3>
++
++ <p><a name="localized-template"></a><b><tt>localized-template</tt></b> <i><tt>package-name
++ message-template-name</tt></i> <tt>-> <i>string or #f<br>
++ </i></tt></p>
++
++ <blockquote>
++ Retrieves a localized message template for the given package
++ name and the given message template name (both symbols).
++ If no such message could be found, false (#f) is
++ returned.<br>
++ <br>
++ </blockquote>
++ After retrieving a template, the calling program can use
++ <tt>format</tt> to produce a string that can be displayed to
++ the user.<br>
++
++
++ <h2>Examples</h2>
++ The below example makes use of SRFI-29 to display simple,
++ localized messages. It also defines its bundles in such a
++ way that the Scheme system may store and retrieve the bundles
++ from a more efficient system catalog, if available.<br>
++
++<pre>
++(let ((translations
++ '(((en) . ((time . "Its ~a, ~a.")
++ (goodbye . "Goodbye, ~a.")))
++ ((fr) . ((time . "~1@*~a, c'est ~a.")
++ (goodbye . "Au revoir, ~a."))))))
++ (for-each (lambda (translation)
++ (let ((bundle-name (cons 'hello-program (car translation))))
++ (if (not (load-bundle! bundle-name))
++ (begin
++ (declare-bundle! bundle-name (cdr translation))
++ (store-bundle! bundle-name)))))
++ translations))
++
++(define localized-message
++ (lambda (message-name . args)
++ (apply format (cons (localized-template 'hello-program
++ message-name)
++ args))))
++
++(let ((myname "Fred"))
++ (display (localized-message 'time "12:00" myname))
++ (display #\newline)
++
++ (display (localized-message 'goodbye myname))
++ (display #\newline))
++
++;; Displays (English):
++;; Its 12:00, Fred.
++;; Goodbye, Fred.
++;;
++;; French:
++;; Fred, c'est 12:00.
++;; Au revoir, Fred.
++</pre>
++
++ <H1>Implementation</H1>
++
++ <p>The implementation requires that the Scheme system provide a
++ definition for <tt>current-language</tt> and
++ <tt>current-country</tt> capable of distinguishing the correct
++ locale present during a Scheme session. The definitions of
++ those functions in the reference implementation are not capable
++ of that distinction. Their implementation is provided only so
++ that the following code can run in any R4RS scheme system.
++ <br>
++ </p>
++
++ <p>In addition, the below implementation of a compliant
++ <tt>format</tt> requires SRFI-6 (Basic String Ports) and
++ SRFI-23 (Error reporting)</p>
++<pre>
++;; The association list in which bundles will be stored
++(define *localization-bundles* '())
++
++;; The current-language and current-country functions provided
++;; here must be rewritten for each Scheme system to default to the
++;; actual locale of the session
++(define current-language
++ (let ((current-language-value 'en))
++ (lambda args
++ (if (null? args)
++ current-language-value
++ (set! current-language-value (car args))))))
++
++(define current-country
++ (let ((current-country-value 'us))
++ (lambda args
++ (if (null? args)
++ current-country-value
++ (set! current-country-value (car args))))))
++
++;; The load-bundle! and store-bundle! both return #f in this
++;; reference implementation. A compliant implementation need
++;; not rewrite these procedures.
++(define load-bundle!
++ (lambda (bundle-specifier)
++ #f))
++
++(define store-bundle!
++ (lambda (bundle-specifier)
++ #f))
++
++;; Declare a bundle of templates with a given bundle specifier
++(define declare-bundle!
++ (letrec ((remove-old-bundle
++ (lambda (specifier bundle)
++ (cond ((null? bundle) '())
++ ((equal? (caar bundle) specifier)
++ (cdr bundle))
++ (else (cons (car bundle)
++ (remove-old-bundle specifier
++ (cdr bundle))))))))
++ (lambda (bundle-specifier bundle-assoc-list)
++ (set! *localization-bundles*
++ (cons (cons bundle-specifier bundle-assoc-list)
++ (remove-old-bundle bundle-specifier
++ *localization-bundles*))))))
++
++;;Retrieve a localized template given its package name and a template name
++(define localized-template
++ (letrec ((rdc
++ (lambda (ls)
++ (if (null? (cdr ls))
++ '()
++ (cons (car ls) (rdc (cdr ls))))))
++ (find-bundle
++ (lambda (specifier template-name)
++ (cond ((assoc specifier *localization-bundles*) =>
++ (lambda (bundle) bundle))
++ ((null? specifier) #f)
++ (else (find-bundle (rdc specifier)
++ template-name))))))
++ (lambda (package-name template-name)
++ (let loop ((specifier (cons package-name
++ (list (current-language)
++ (current-country)))))
++ (and (not (null? specifier))
++ (let ((bundle (find-bundle specifier template-name)))
++ (and bundle
++ (cond ((assq template-name bundle) => cdr)
++ ((null? (cdr specifier)) #f)
++ (else (loop (rdc specifier)))))))))))
++
++;;An SRFI-28 and SRFI-29 compliant version of format. It requires
++;;SRFI-23 for error reporting.
++(define format
++ (lambda (format-string . objects)
++ (let ((buffer (open-output-string)))
++ (let loop ((format-list (string->list format-string))
++ (objects objects)
++ (object-override #f))
++ (cond ((null? format-list) (get-output-string buffer))
++ ((char=? (car format-list) #\~)
++ (cond ((null? (cdr format-list))
++ (error 'format "Incomplete escape sequence"))
++ ((char-numeric? (cadr format-list))
++ (let posloop ((fl (cddr format-list))
++ (pos (string->number
++ (string (cadr format-list)))))
++ (cond ((null? fl)
++ (error 'format "Incomplete escape sequence"))
++ ((and (eq? (car fl) '#\@)
++ (null? (cdr fl)))
++ (error 'format "Incomplete escape sequence"))
++ ((and (eq? (car fl) '#\@)
++ (eq? (cadr fl) '#\*))
++ (loop (cddr fl) objects (list-ref objects pos)))
++ (else
++ (posloop (cdr fl)
++ (+ (* 10 pos)
++ (string->number
++ (string (car fl)))))))))
++ (else
++ (case (cadr format-list)
++ ((#\a)
++ (cond (object-override
++ (begin
++ (display object-override buffer)
++ (loop (cddr format-list) objects #f)))
++ ((null? objects)
++ (error 'format "No value for escape sequence"))
++ (else
++ (begin
++ (display (car objects) buffer)
++ (loop (cddr format-list)
++ (cdr objects) #f)))))
++ ((#\s)
++ (cond (object-override
++ (begin
++ (display object-override buffer)
++ (loop (cddr format-list) objects #f)))
++ ((null? objects)
++ (error 'format "No value for escape sequence"))
++ (else
++ (begin
++ (write (car objects) buffer)
++ (loop (cddr format-list)
++ (cdr objects) #f)))))
++ ((#\%)
++ (if object-override
++ (error 'format "Escape sequence following positional override does not require a value"))
++ (display #\newline buffer)
++ (loop (cddr format-list) objects #f))
++ ((#\~)
++ (if object-override
++ (error 'format "Escape sequence following positional override does not require a value"))
++ (display #\~ buffer)
++ (loop (cddr format-list) objects #f))
++ (else
++ (error 'format "Unrecognized escape sequence"))))))
++ (else (display (car format-list) buffer)
++ (loop (cdr format-list) objects #f)))))))
++
++</pre>
++
++ <H1>Copyright</H1>
++
++ Copyright (C) Scott G. Miller (2002). All Rights Reserved.
++
++ <p>This document and translations of it may be copied and
++ furnished to others, and derivative works that comment on or
++ otherwise explain it or assist in its implementation may be
++ prepared, copied, published and distributed, in whole or in
++ part, without restriction of any kind, provided that the above
++ copyright notice and this paragraph are included on all such
++ copies and derivative works. However, this document itself may
++ not be modified in any way, such as by removing the copyright
++ notice or references to the Scheme Request For Implementation
++ process or editors, except as needed for the purpose of
++ developing SRFIs in which case the procedures for copyrights
++ defined in the SRFI process must be followed, or as required to
++ translate it into languages other than English.</p>
++
++ <p>The limited permissions granted above are perpetual and will
++ not be revoked by the authors or their successors or
++ assigns.</p>
++
++ <p>This document and the information contained herein is
++ provided on an "AS IS" basis and THE AUTHOR AND THE SRFI
++ EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
++ BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
++ HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES
++ OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.</p>
++ <hr>
++
++ <address>
++ Editor: <a href="mailto:srfi-editors@srfi.schemers.org">David
++ Rush</a>
++ </address>
++
++ <address>
++ Author: <a href="mailto:scgmille@freenetproject.org">Scott G.
++ Miller</a>
++ </address>
++ <!-- Created: Tue Sep 29 19:20:08 EDT 1998 -->
++ <!-- hhmts start -->Last modified: Mon Jun 17 12:00:08 Pacific
++ Daylight Time 2002 <!-- hhmts end --> <br>
++ </body>
++</html>
++
+diff -urN racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html
+--- racket-6.12-orig/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-doc-nonfree/srfi/scribblings/srfi-std/srfi-5.html 2018-01-31 12:22:58.144502000 -0500
+@@ -0,0 +1,345 @@
++<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
++<html>
++<head>
++ <title>SRFI 5: A compatible let form with signatures and rest arguments</title>
++</head>
++<body>
++
++<H1>Title</H1>
++
++SRFI-5: A compatible <code>let</code> form with signatures and rest arguments
++
++<H1>Author</H1>
++
++Andy Gaynor
++
++<H1>Status</H1>
++
++This SRFI is currently in ``final'' status. To see an explanation of each status that a SRFI can hold, see <A HREF="http://srfi.schemers.org/srfi-process.html">here</A>.
++You can access the discussion on this SRFI via <A HREF="http://srfi.schemers.org/srfi-5/mail-archive/maillist.html">the archive of the mailing list</A>.
++<P><UL>
++<LI>Received: 1999/2/2
++<LI>Draft: 1999/2/10-1999/04/12
++<LI>Final: 1999/4/26
++<LI>Revised reference implementation: 2003/01/27
++</UL>
++
++<H1>Abstract</H1>
++
++The <i>named-let</i> incarnation of the <code>let</code> form has two slight
++inconsistencies with the <code>define</code> form. As defined, the <code>let</code>
++form makes no accommodation for rest arguments, an issue of functionality
++and consistency. As defined, the <code>let</code> form does not accommodate
++signature-style syntax, an issue of aesthetics and consistency. Both
++issues are addressed here in a manner which is compatible with the traditional
++<code>let</code> form but for minor extensions.
++
++<H1>Rationale</H1>
++
++<H2>Signature-style Syntax</H2>
++
++Consider the following two equivalent definitions:
++
++<p><pre>
++(define fibonacci
++ (lambda (n i f0 f1)
++ (if (= i n)
++ f0
++ (fibonacci n (+ i 1) f1 (+ f0 f1)))))
++
++(define (fibonacci n i f0 f1)
++ (if (= i n)
++ f0
++ (fibonacci n (+ i 1) f1 (+ f0 f1))))
++</pre>
++
++Although there is a named-let analog for the former form, there is none
++for the latter. To wit, suppose one wished to compute the 10th element
++of the Fibonacci sequence using a named let:
++
++<p>
++<pre>
++(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
++ (if (= i n)
++ f0
++ (fibonacci n (+ i 1) f1 (+ f0 f1))))
++Values: 55
++</pre>
++
++As it stands, one cannot equivalently write
++
++<p>
++<pre>
++(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
++ (if (= i n)
++ f0
++ (fibonacci n (+ i 1) f1 (+ f0 f1))))
++</pre>
++
++which is consistent with <code>define</code>'s signature-style form.
++<p>Those that favor the signature style may prefer this extension.
++In any case, it may be more appropriate to include all bound names within
++the binding section. As presented, this straightforward extension
++introduces no ambiguity or incompatibility with the existing definition
++of let.
++
++<H2>Rest Arguments</H2>
++
++As it stands, one cannot write a named let with rest arguments, as in
++
++<p>
++<pre>
++(let (blast (port (current-output-port)) . (x (+ 1 2) 4 5))
++ (if (null? x)
++ 'just-a-silly-contrived-example
++ (begin
++ (write (car x) port)
++ (apply blast port (cdr x)))))
++</pre>
++
++otherwise equivalent to
++
++<p>
++<pre>
++(letrec ((blast (lambda (port . x)
++ (if (null? x)
++ 'just-a-silly-contrived-example
++ (begin
++ (write (car x) port)
++ (apply blast port (cdr x)))))))
++ (blast (current-output-port) (+ 1 2) 4 5))
++</pre>
++
++While this example is rather contrived, the functionality is not.
++There are several times when the author has used this construct in practice.
++Regardless, there is little reason to deny the <code>let</code> form access to
++all the features of lambda functionality.
++
++<H2>Symbols in Binding Sections</H2>
++
++Both the features above rely upon the placement of symbols in <code>let</code>
++binding lists (this statement is intentially simplistic). The only
++other apparent use of such symbol placement is to tersely bind variables
++to unspecified values. For example, one might desire to use
++<code>(let (foo bar baz) ...)</code>
++to bind <code>foo</code>, <code>bar</code>, and <code>baz</code> to
++unspecified values.
++
++<p>This usage is considered less important in light of the rationales
++presented above, and an alternate syntax is immediately apparent, as
++in <code>(let ((foo) (bar) (baz)) ...)</code> This may even
++be preferable, consistently parenthesizing normal binding clauses.
++
++<H1>Specification</H1>
++
++<H2>Syntax</H2>
++
++<p>
++A formal specification of the syntax follows. Below, body, expression,
++and identifier are free. Each instantiation of binding-name must be
++unique.
++</p>
++
++<p>
++<pre>
++ let = "(" "let" let-bindings body ")"
++ expressions = nothing | expression expressions
++ let-bindings = let-name bindings
++ | "(" let-name "." bindings ")"
++ let-name = identifier
++ bindings = "(" ")"
++ | rest-binding
++ | "(" normal-bindings ["." rest-binding] ")"
++normal-bindings = nothing
++ | normal-binding normal-bindings
++ normal-binding = "(" binding-name expression ")"
++ binding-name = identifier
++ rest-binding = "(" binding-name expressions ")"
++</pre>
++
++<p>
++For clarity and convenience, an informal specification follows.
++</p>
++
++<ol>
++<li><a name="unnamed">Unnamed</a>
++
++<p><pre>
++(let ((<parameter> <argument>)...)
++ <body>...)
++</pre>
++</li>
++
++<li><a name="named-non-sig">
++Named, non-signature-style, no rest argument</a>
++
++<p><pre>
++(let <name> ((<parameter> <argument>)...)
++ <body>...)
++</pre>
++</li>
++
++<li><a name="named-sig">Named, signature-style, no rest argument</a>
++
++<p><pre>
++(let (<name> (<parameter> <argument>)...)
++ <body>...)
++</pre>
++</li>
++
++<li><a name="named-non-sig-rest">Named, non-signature-style, rest argument</a>
++
++<p><pre>
++(let <name> ((<parameter> <argument>)...
++
++. (<rest-parameter> <rest-argument>...))
++ <body>...)
++</pre>
++
++<li><a name="named-sig-rest">Named, signature-style, rest argument</a>
++
++<p><pre>
++(let (<name> (<parameter> <argument>)...
++
++. (<rest-parameter> <rest-argument>...))
++ <body>...)
++</pre>
++</li>
++</ol>
++
++<H2>Semantics</H2>
++
++Let <code>$lambda</code> and <code>$letrec</code> be hygienic bindings for the <code>lambda</code>
++and <code>letrec</code> forms, respectively.
++
++<ul>
++<li>For informal syntax 1:
++
++<p><pre>
++(($lambda (<parameter>...) <body>...) <argument>...)
++</pre>
++</li>
++
++<li>For informal syntaxes 2 and 3:
++
++<p>
++<pre>
++($letrec ((<name> ($lambda (<parameter>...) <body>...)))
++ (<name> <argument>...))
++</pre>
++</li>
++
++<li>For informal syntaxes 4 and 5:
++
++<p>
++<pre>
++($letrec ((<name> ($lambda (<parameter>...
++
++. <rest-parameter>) <body>...)))
++ (<name> <argument>... <rest-argument>...))
++</pre>
++</li>
++</ul>
++
++<H1>Implementation</H1>
++
++Here is an implementation using <code>SYNTAX-RULES</code>.
++
++<p>
++<pre>
++;; Use your own standard let.
++;; Or call a lambda.
++;; (define-syntax standard-let
++;;
++;; (syntax-rules ()
++;;
++;; ((let ((var val) ...) body ...)
++;; ((lambda (var ...) body ...) val ...))))
++
++(define-syntax let
++
++ (syntax-rules ()
++
++ ;; No bindings: use standard-let.
++ ((let () body ...)
++ (standard-let () body ...))
++ ;; Or call a lambda.
++ ;; ((lambda () body ...))
++
++ ;; All standard bindings: use standard-let.
++ ((let ((var val) ...) body ...)
++ (standard-let ((var val) ...) body ...))
++ ;; Or call a lambda.
++ ;; ((lambda (var ...) body ...) val ...)
++
++ ;; One standard binding: loop.
++ ;; The all-standard-bindings clause didn't match,
++ ;; so there must be a rest binding.
++ ((let ((var val) . bindings) body ...)
++ (let-loop #f bindings (var) (val) (body ...)))
++
++ ;; Signature-style name: loop.
++ ((let (name binding ...) body ...)
++ (let-loop name (binding ...) () () (body ...)))
++
++ ;; defun-style name: loop.
++ ((let name bindings body ...)
++ (let-loop name bindings () () (body ...)))))
++
++(define-syntax let-loop
++
++ (syntax-rules ()
++
++ ;; Standard binding: destructure and loop.
++ ((let-loop name ((var0 val0) binding ...) (var ... ) (val ... ) body)
++ (let-loop name ( binding ...) (var ... var0) (val ... val0) body))
++
++ ;; Rest binding, no name: use standard-let, listing the rest values.
++ ;; Because of let's first clause, there is no "no bindings, no name" clause.
++ ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
++ (standard-let ((var val) ... (rest-var (list rest-val ...))) . body))
++ ;; Or call a lambda with a rest parameter on all values.
++ ;; ((lambda (var ... . rest-var) . body) val ... rest-val ...))
++ ;; Or use one of several other reasonable alternatives.
++
++ ;; No bindings, name: call a letrec'ed lambda.
++ ((let-loop name () (var ...) (val ...) body)
++ ((letrec ((name (lambda (var ...) . body)))
++ name)
++ val ...))
++
++ ;; Rest binding, name: call a letrec'ed lambda.
++ ((let-loop name (rest-var rest-val ...) (var ...) (val ...) body)
++ ((letrec ((name (lambda (var ... . rest-var) . body)))
++ name)
++ val ... rest-val ...))))
++</pre>
++
++
++<H1>Copyright</H1>
++
++Copyright (C) Andy Gaynor (1999). All Rights Reserved.
++<p>This document and translations of it may be copied and furnished to
++others, and derivative works that comment on or otherwise explain it or
++assist in its implementation may be prepared, copied, published and distributed,
++in whole or in part, without restriction of any kind, provided that the
++above copyright notice and this paragraph are included on all such copies
++and derivative works. However, this document itself may not be modified
++in any way, such as by removing the copyright notice or references to the
++Scheme Request For Implementation process or editors, except as needed
++for the purpose of developing SRFIs in which case the procedures for copyrights
++defined in the SRFI process must be followed, or as required to translate
++it into languages other than English.
++<p>The limited permissions granted above are perpetual and will not be
++revoked by the authors or their successors or assigns.
++<p>This document and the information contained herein is provided on an
++"AS IS" basis and THE AUTHOR AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE
++USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
++WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
++
++ <hr>
++ <address>Editor: <a href="mailto:srfi-editors@srfi.schemers.org">Mike Sperber</a></address>
++
++</body>
++</html>
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib/info.rkt racket-6.12/share/pkgs/srfi-lib/info.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib/info.rkt 2018-01-26 16:10:02.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib/info.rkt 2018-01-31 12:22:58.144502000 -0500
+@@ -1 +1,15 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "6.12"))) (define collection (quote multi)) (define deps (quote ("scheme-lib" "base" "srfi-lite-lib" "r6rs-lib" "compatibility-lib"))) (define implies (quote ("srfi-lite-lib"))) (define pkg-desc "implementation (no documentation) part of \"srfi\"") (define pkg-authors (quote (mflatt noel chongkai jay)))))
++#lang info
++
++(define collection 'multi)
++
++(define deps '("scheme-lib"
++ "base"
++ "srfi-lite-lib"
++ "r6rs-lib"
++ "compatibility-lib"))
++
++(define implies '("srfi-lite-lib"))
++
++(define pkg-desc "implementation (no documentation) part of \"srfi\"")
++
++(define pkg-authors '(mflatt noel chongkai jay))
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/32/sort.txt racket-6.12/share/pkgs/srfi-lib/srfi/32/sort.txt
+--- racket-6.12-orig/share/pkgs/srfi-lib/srfi/32/sort.txt 2018-01-26 15:34:52.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib/srfi/32/sort.txt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,1069 +0,0 @@
+-The SRFI-32 sort libraries -*- outline -*-
+-Olin Shivers
+-First draft: 1998/10/19
+-Last update: 2002/7/21
+-
+-[Todo: del-list-neighbor-dups!
+- vector-copy -> subvector
+- use srfi-23 for reporting errors
+- use srfi-16 for n-aries?
+-
+-Emacs should display this document in outline mode. Say c-h m for
+-instructions on how to move through it by sections (e.g., c-c c-n, c-c c-p).
+-
+-* Table of contents
+--------------------
+-Abstract
+-Procedure index
+-Introduction
+-What's wrong with the current state of affairs?
+-Design rules
+- What vs. how
+- Consistency across function signatures
+- Data parameter first, less-than parameter after
+- Ordering, comparison functions & stability
+- All vector operations accept optional subrange parameters
+- Required vs. allowed side-effects
+-Procedure specification
+- Procedure naming and functionality
+- Types of parameters and return values
+- sort-lib - general sorting package
+- Algorithm-specific sorting packages
+-Algorithmic properties
+-Topics to be resolved during discussion phase
+-Porting and optimisation
+-References & Links
+-Acknowledgements
+-Copyright
+-
+-
+-* Abstract
+-----------
+-Current Scheme sorting packages are, every one of them, surprisingly bad. I've
+-designed the API for a full-featured sort toolkit, which I propose as a SRFI.
+-
+-The spec comes with 1200 lines of high-quality reference code: tightly
+-written, highly commented, portable code, available for free. Implementors
+-want this code. It's better than what you have.
+-
+--------------------------------------------------------------------------------
+-* Procedure index
+------------------
+-list-sorted? vector-sorted?
+-
+-list-merge vector-merge
+-list-sort vector-sort
+-list-stable-sort vector-stable-sort
+-list-delete-neighbor-dups vector-delete-neighbor-dups
+-
+-list-merge! vector-merge!
+-list-sort! vector-sort!
+-list-stable-sort! vector-stable-sort!
+-list-delete-neighbor-dups! vector-delete-neighbor-dups!
+-
+-quick-sort heap-sort insert-sort list-merge-sort vector-merge-sort
+-quick-sort! heap-sort! insert-sort! list-merge-sort! vector-merge-sort!
+-quick-sort3!
+-
+-vector-binary-search
+-vector-binary-search3
+-
+--------------------------------------------------------------------------------
+-* Introduction
+---------------
+-As I'll detail below, I wasn't very happy with the state of the Scheme
+-world for sorting and merging lists and vectors. So I have designed and
+-written a fairly comprehensive sorting & merging toolkit. It is
+-
+- - very portable,
+-
+- - much better code than what is currently in Elk, Gambit, Bigloo,
+- Scheme->C, MzScheme, RScheme, Scheme48, MIT Scheme, or slib, and
+-
+- - priced to move: free code.
+-
+-The package includes
+- - Vector insert sort (stable)
+- - Vector heap sort
+- - Vector quick sort (with median-of-3 pivot picking)
+- - Vector merge sort (stable)
+- - Pure and destructive list merge sort (stable)
+- - Stable vector and list merge
+- - Miscellaneous sort-related procedures: Vector and list merging,
+- sorted? predicates, vector binary search, vector and list
+- delete-equal-neighbor procedures.
+- - A general, non-algorithmic set of procedure names for general sorting
+- and merging.
+-
+-Scheme programmers may want to adopt this package. I'd like Scheme
+-implementors to adopt this code and its API -- in fact, the code is a bribe to
+-make it easy for implementors to converge on the suggested API. I mean, you'd
+-really have to be a boor to take this free code I wrote and mutate its
+-interface over to your incompatible, unportable API, wouldn't you? But you
+-could, of course -- it's freely available. More in the spirit of the offering,
+-you could make this API available, and then also write a little module
+-providing your old interface that is defined in terms of this API. "Scheme
+-implementors," in this context, includes slib, which is not a standalone
+-implementation of Scheme, but rather an influential collection of API's and
+-code.
+-
+-The code is tightly bummed. It is clearly written, and commented in my usual
+-voluminous style. This includes notes on porting and implementation-specific
+-optimisations.
+-
+-
+--------------------------------------------------------------------------------
+-* What's wrong with the current state of affairs?
+--------------------------------------------------
+-
+-It's just amazing to me that in 2002, sorting and merging hasn't been
+-completely put to bed. These are well-understood algorithms, each of them well
+-under a page of code. The straightforward algorithms are basic, core stuff --
+-sophomore-level. But if you tour the major Scheme implementations out there on
+-the Net, you find badly written code that provides extremely spotty coverage
+-of the algorithm space. One implementation even has a buggy implementation
+-that has been in use for about 20 years. Another has an O(n^2) algorithm...
+-implemented in C for speed.
+-
+-Open source-code is a wonderful thing. In a couple of hours, I was able to
+-download and check the sources of 9 Scheme systems. Here are my notes from the
+-systems I checked. You can skip to the next section if you aren't morbidly
+-curious.
+-
+-slib
+- sorted? vector-or-list <
+- merge list1 list2 <
+- merge! list1 list2 <
+- sort vector-or-list <
+- sort! vector-or-list <
+-
+- Richard O'Keefe's stable list merge sort is right idea, but implemented
+- using gratuitous variable side effects. It also does redundant SET-CDR!s.
+- The vector sort converts to list, merge sorts, then reconverts
+- to vector. This is a bad idea -- non-local pointer chasing bad; vector
+- shuffling good. If you must allocate temp storage, might as well allocate
+- a temp vector and use vector merge sort.
+-
+-MIT Scheme
+- sort! vector <
+- merge-sort! vector <
+- quick-sort! vector <
+-
+- sort vector-or-list <
+- merge-sort vector-or-list <
+- quick-sort vector-or-list <
+-
+- Naive vector quicksort: loser, for worst-case performance reasons.
+- List sort by "list->vector; quicksort; vector->list," hence also loser.
+- A clever stable vector merge sort, albeit not very bummed.
+-
+-Scheme 48 & T
+- sort-list list <
+- sort-list! list <
+- list-merge! list1 list2 <
+-
+- Bob Nix's implementation of online merge-sort, written in the early 80's.
+- Conses unnecessary bookkeeping structure, which isn't necessary with a
+- proper recursive formulation. Also, does redundant SET-CDR!s. No vector
+- sort. Also, has a bug -- is claimed to be a stable sort, but isn't! To see
+- this, get the S48 code, and try
+- (define (my< x y) (< (abs x) (abs y)))
+- (list-merge! (list 0 2) (list -2) my<) ; -> (0 2 -2)
+- (list-merge! (list 2) (list 0 -2) my<) ; -> (0 -2 2)
+- This could be fixed very easily, but it isn't worth it given the
+- other problems with the algorithm.
+-
+-RScheme
+- vector-sort! vector <
+- sort collection <
+-
+- Good basic implementation of vector heapsort, which has O(n lg n)
+- worst-case time. Code ugly, needs tuning. List sort by "list->vector;
+- sort; vector->list." Nothing for stable sorting.
+-
+-MzScheme
+- quicksort lis <
+- mergesort alox <
+-
+- Sorts lists with (list->vector; quicksort; vector->list) -- but the core
+- quicksort is not available for vector sorting. Nothing for stable sorting.
+- Quicksort picks pivot naively, inducing O(n^2) worse-case behaviour on a
+- fairly common case: an already-sorted list.
+-
+-Bigloo, STK
+- sort vector-or-list <
+- Uses an O(n^2) algorithm... implemented in C for speed. Hmm.
+- (See runtime/Ieee/vector.scm and runtime/Clib/cvector.c)
+-
+-Gambit
+- sort-list list <
+- Nothing for vectors. Simple, slow, unstable merge sort for lists.
+-
+-Elk
+- Another naive quicksort. Lists handled by converting to vector.
+- sort vector-or-list <
+- sort! vector-or-list <
+-
+-Chez Scheme
+- merge < list1 list2
+- merge! < list1 list2
+- sort < list
+- sort! < list
+-
+- These are stable. I have not seen the source code.
+-
+-Common Lisp
+- sort sequence < [key]
+- stable-sort sequence < [key]
+- merge result-type sequence1 sequence2 < [key]
+-
+- The sort procedures are allowed, but not required, to be destructive.
+-
+-SML/NJ
+- sort: ('a*'a -> bool) -> 'a list -> 'a list
+- "Smooth applicative merge sort," which is stable.
+- There is also a highly bummed quicksort for vectors.
+-
+-The right solution: Implement a full toolbox of carefully written standard sort
+-routines.
+-
+-Having the source of all these above-cited Schemes available for study made
+-life a lot easier writing this code. I appreciate the authors making their
+-source available under such open terms.
+-
+-
+--------------------------------------------------------------------------------
+-* Design rules
+---------------
+-
+-** What vs. how
+-===============
+-There are two different interfaces: "what" (simple) & "how" (detailed).
+-
+- - Simple: you specify semantics: datatype (list or vector),
+- mutability, and stability.
+-
+- - Detailed: you specify the actual algorithm (quick, heap,
+- insert, merge). Different algorithms have different properties,
+- both semantic & pragmatic, so these exports are necessary.
+-
+- It is necessarily the case that the specifications of these procedures
+- make statements about execution "pragmatics." For example, the sole
+- distinction between heap sort and quick sort -- both of which are
+- provided by this library -- is one of execution time, which is not a
+- "semantic" distinction. Similar resource-use statements are made about
+- "iterative" procedures, meaning that they can execute on input of
+- arbitrary size in a constant number of stack frames.
+-
+-** Consistency across function signatures
+-=========================================
+-The two interfaces share common function signatures wherever
+-possible, to facilitate switching a given call from one procedure
+-to another.
+-
+-** Less-than parameter first, data parameter after
+-==================================================
+-These procedures uniformly observe the following parameter order:
+-the data to be sorted comes after the comparison function.
+-That is, we write
+- (sort < lis)
+-not
+- (sort lis <).
+-
+-With the sole exception of Chez Scheme, this is the exact opposite of
+-every sort function out there in current use in the Scheme world. (See
+-the summary of related APIs above.) However, it is consistent with common
+-practice across Scheme libraries in general to put the ordering function
+-first -- the "operation currying" convention. (E.g., consider FOR-EACH or
+-MAP or FIND.)
+-
+-The original draft of this SRFI used the data-first/comparison-last convention
+-for backwards compatibility -- a decision I made with internal misgivings.
+-Happily, however, the overwhelming response from the discussion phase
+-supported "cleaning up" this issue and re-converging the parameter order with
+-the general Scheme "op currying" convention. So the original decision was
+-inverted in favor of the comparison-first/data-last convention.
+-
+-** Ordering, comparison functions & stability
+-=============================================
+-These routines take a < comparison function, not a <= comparison
+-function, and they sort into increasing order. The difference between
+-a < spec and a <= spec comes up in three places:
+- - the definition of an ordered or sorted data set,
+- - the definition of a stable sorting algorithm, and
+- - correctness of quicksort.
+-
+-+ We say that a data set (a list or vector) is *sorted* or *ordered*
+- if it contains no adjacent pair of values ... X Y ... such that Y < X.
+-
+- In other words, scanning across the data never takes a "downwards" step.
+-
+- If you use a <= procedure where these algorithms expect a <
+- procedure, you may not get the answers you expect. For example,
+- the LIST-SORTED? function will return false if you pass it a <= comparison
+- function and an ordered list containing adjacent equal elements.
+-
+-+ A "stable" sort is one that preserves the pre-existing order of equal
+- elements. Suppose, for example, that we sort a list of numbers by
+- comparing their absolute values, i.e., using comparison function
+- (lambda (x y) (< (abs x) (abs y)))
+- If we sort a list that contains both 3 and -3:
+- ... 3 ... -3 ...
+- then a stable sort is an algorithm that will not swap the order
+- of these two elements, that is, the answer is guaranteed to to look like
+- ... 3 -3 ...
+- not
+- ... -3 3 ...
+-
+- Choosing < for the comparison function instead of <= affects how stability
+- is coded. Given an adjacent pair X Y, (< y x) means "Y should be moved in
+- front of X" -- otherwise, leave things as they are. So using a <= function
+- where a < function is expected will *invert* stability.
+-
+- This is due to the definition of equality, given a < comparator:
+- (and (not (< x y))
+- (not (< y x)))
+- The definition is rather different, given a <= comparator:
+- (and (<= x y)
+- (<= y x))
+-
+-+ A "stable" merge is one that reliably favors one of its data sets
+- when equal items appear in both data sets. *All merge operations in
+- this library are stable*, breaking ties between data sets in favor
+- of the first data set -- elements of the first list come before equal
+- elements in the second list.
+-
+- So, if we are merging two lists of numbers ordered by absolute value,
+- the stable merge operation LIST-MERGE
+- (list-merge (lambda (x y) (< (abs x) (abs y)))
+- '(0 -2 4 8 -10) '(-1 3 -4 7))
+- reliably places the 4 of the first list before the equal-comparing -4
+- of the second list:
+- (0 -1 -2 4 -4 7 8 -10)
+-
+-+ Some sort algorithms will *not work correctly* if given a <= when they
+- expect a < comparison (or vice-versa). For example, violating quicksort's
+- spec may cause it to produce wrong answers, diverge, raise an error, or do
+- some fourth thing. To see why, consider the left-scan part of the standard
+- quicksort partition step:
+- (let ((i (let scan ((i i)) (if (elt< (vector-ref v i) pivot)
+- (scan (+ i 1))
+- i))))
+- ...)
+- Consider applying this loop to a vector of all zeroes (hence, PIVOT, as
+- well, is zero), but erroneously using <= for the ELT< function. The loop
+- will scan right off the end of the vector, producing a vector-index error.
+- The guarantee that the scan loop will terminate before running off the end
+- of the vector depends critically upon ELT< performing as a true, irreflexive
+- < relation. Running off the end of the vector is only one of a variety of
+- possibly ways to lose -- other, variant implementations of quicksort can,
+- instead, loop forever on some data sets if ELT< is a <= predicate.
+-
+-In short, if your comparison function F answers true to (F x x), then
+- - using a stable sorting or merging algorithm will not give you a
+- stable sort or merge,
+- - LIST-SORTED? may surprise you, and
+- - quicksort may fail in a variety of possible ways.
+-Note that you can synthesize a < function from a <= function with
+- (lambda (x y) (not (<= y x)))
+-if need be.
+-
+-Precise definitions give sharp edges to tools, but require care in use.
+-"Measure twice, cut once."
+-
+-I have adopted the choice of < from Common Lisp. One would assume the definers
+-of Common Lisp had a good reason for adopting < instead of <=, but canvassing
+-several of the principal actors in the definition process has turned up no
+-better reason than "an arbitrary but consistent choice." At minimum, then,
+-this SRFI extends the coverage of that consistent choice.
+-
+-** All vector operations accept optional subrange parameters
+-============================================================
+-The vector operations specified below all take optional START/END arguments
+-indicating a selected subrange of a vector's elements. If a START parameter or
+-START/END parameter pair is given to such a procedure, they must be exact,
+-non-negative integers, such that
+- 0 <= START <= END <= (VECTOR-LENGTH V)
+-where V is the related vector parameter. If not specified, they default to 0
+-and the length of the vector, respectively. They are interpreted to select the
+-range [START,END), that is, all elements from index START (inclusive) up to,
+-but not including, index END.
+-
+-** Required vs. allowed side-effects
+-====================================
+-LIST-SORT! and LIST-STABLE-SORT! are allowed, but not required,
+-to alter their arguments' cons cells to construct the result list. This is
+-consistent with the what-not-how character of the group of procedures
+-to which they belong (the "sort-lib" package).
+-
+-The LIST-DELETE-NEIGHBOR-DUPS!, LIST-MERGE! and LIST-MERGE-SORT! procedures,
+-on the other hand, provide specific algorithms, and, as such, explicitly
+-commit to the use of side-effects on their input lists in order to guarantee
+-their key algorithmic properties (e.g., linear-time operation, constant-space
+-stack use).
+-
+--------------------------------------------------------------------------------
+-* Procedure specification
+--------------------------
+-The procedures are split into several packages. In a Scheme system that has a
+-module or package system, these procedures should be contained in modules
+-named as follows:
+- Package name Functionality
+- ------------ -------------
+- sort-lib General sorting for lists & vectors
+- sorted?-lib Sorted predicates for lists & vectors
+- list-merge-sort-lib List merge sort
+- vector-merge-sort-lib Vector merge sort
+- vector-heap-sort-lib Vector heap sort
+- vector-quick-sort-lib Vector quick sort
+- vector-insert-sort-lib Vector insertion sort
+- delndup-lib List and vector delete neighbor duplicates
+- binsearch-lib Vector binary search
+-
+-A Scheme system without a module system should provide all of the bindings
+-defined in all of these modules as components of the "SRFI-32" package.
+-
+-Note that there is no "list insert sort" package, as you might as well always
+-use list merge sort. The reference implementation's destructive list merge
+-sort will do fewer SET-CDR!s than a destructive insert sort.
+-
+-** Procedure naming and functionality
+-=====================================
+-Almost all of the procedures described below are variants of two basic
+-operations: sorting and merging. These procedures are consistently named
+-by composing a set of basic lexemes to indicate what they do.
+-
+-Lexeme Meaning
+------- -------
+-"sort" The procedure sorts its input data set by some < comparison function.
+-
+-"merge" The procedure merges two ordered data sets into a single ordered
+- result.
+-
+-"stable" This lexeme indicates that the sort is a stable one.
+-
+-"vector" The procedure operates upon vectors.
+-
+-"list" The procedure operates upon lists.
+-
+-"!" Procedures that end in "!" are allowed, and sometimes required,
+- to reuse their input storage to construct their answer.
+-
+-** Types of parameters and return values
+-========================================
+-In the procedures specified below,
+- - A LIS parameter is a list;
+-
+- - A V parameter is a vector;
+-
+- - A < or = parameter is a procedure accepting two arguments taken from the
+- specified procedure's data set(s), and returning a boolean;
+-
+- - START and END parameters are exact, non-negative integers that
+- serve as vector indices selecting a subrange of some associated vector.
+- When specified, they must satisfy the relation
+- 0 <= start <= end <= (vector-length v)
+- where V is the associated vector.
+-
+-Passing values to procedures with these parameters that do not satisfy these
+-types is an error.
+-
+-If a procedure is said to return "unspecified," this means that nothing at all
+-is said about what the procedure returns, not even the number of return
+-values. Such a procedure is not even required to be consistent from call to
+-call in the nature or number of its return values. It is simply required to
+-return a value (or values) that may be passed to a command continuation, e.g.
+-as the value of an expression appearing as a non-terminal subform of a BEGIN
+-expression. Note that in R5RS, this restricts such a procedure to returning a
+-single value; non-R5RS systems may not even provide this restriction.
+-
+-** sort-lib - general sorting package
+-=====================================
+-This library provides basic sorting and merging functionality suitable for
+-general programming. The procedures are named by their semantic properties,
+-i.e., what they do to the data (sort, stable sort, merge, and so forth).
+-
+- Procedure Suggested algorithm
+- -------------------------------------------------------------------------
+- list-sorted? < lis -> boolean
+- list-merge < lis1 lis2 -> list
+- list-merge! < lis1 lis2 -> list
+- list-sort < lis -> list (vector heap or quick)
+- list-sort! < lis -> list (list merge sort)
+- list-stable-sort < lis -> list (vector merge sort)
+- list-stable-sort! < lis -> list (list merge sort)
+- list-delete-neighbor-dups = lis -> list
+- list-delete-neighbor-dups! = lis -> list
+-
+- vector-sorted? < v [start end] -> boolean
+- vector-merge < v1 v2 [start1 end1 start2 end2] -> vector
+- vector-merge! < v v1 v2 [start start1 end1 start2 end2] -> unspecified
+- vector-sort < v [start end] -> vector (heap or quick sort)
+- vector-sort! < v [start end] -> unspecified (heap or quick sort)
+- vector-stable-sort < v [start end] -> vector (vector merge sort)
+- vector-stable-sort! < v [start end] -> unspecified (vector merge sort)
+- vector-delete-neighbor-dups = v [start end] -> vector
+- vector-delete-neighbor-dups! = target source [t-start s-start s-end] -> t-end
+-
+- LIST-SORTED? and VECTOR-SORTED? return true if their input list or vector
+- is in sorted order, as determined by their < comparison parameter.
+-
+- All four merge operations are stable: an element of the initial list LIS1
+- or vector V1 will come before an equal-comparing element in the second
+- list LIS2 or vector V2 in the result.
+-
+- The procedures
+- LIST-MERGE
+- LIST-SORT
+- LIST-STABLE-SORT
+- LIST-DELETE-NEIGHBOR-DUPS
+- do not alter their inputs and are allowed to return a value that shares
+- a common tail with a list argument.
+-
+- The procedures
+- LIST-SORT!
+- LIST-STABLE-SORT!
+- are "linear update" operators -- they are allowed, but not required, to
+- alter the cons cells of their arguments to produce their results.
+-
+- On the other hand, the procedures
+- LIST-DELETE-NEIGHBOR-DUPS!
+- LIST-MERGE!
+- make only a single, iterative, linear-time pass over their argument lists,
+- using SET-CDR!s to rearrange the cells of the lists into the final result
+- -- they work "in place." Hence, any cons cell appearing in the result must
+- have originally appeared in an input. The intent of this
+- iterative-algorithm commitment is to allow the programmer to be sure that
+- if, for example, LIST-MERGE! is asked to merge two ten-million-element
+- lists, the operation will complete without performing some extremely
+- (possibly twenty-million) deep recursion.
+-
+- The vector procedures
+- VECTOR-SORT
+- VECTOR-STABLE-SORT
+- VECTOR-DELETE-NEIGHBOR-DUPS
+- do not alter their inputs, but allocate a fresh vector for their result,
+- of length END - START.
+-
+- The vector procedures
+- VECTOR-SORT!
+- VECTOR-STABLE-SORT!
+- sort their data in-place. (But note that VECTOR-STABLE-SORT! may
+- allocate temporary storage proportional to the size of the input --
+- I am not aware of O(n lg n) stable vector-sorting algorithms that
+- run in constant space.)
+-
+- VECTOR-MERGE returns a vector of length (END1-START1)+(END2-START2).
+-
+- VECTOR-MERGE! writes its result into vector V, beginning at index START,
+- for indices less than END = START + (END1-START1) + (END2-START2). The
+- target subvector
+- V[start,end)
+- may not overlap either source subvector
+- V1[start1,end1)
+- V2[start2,end2).
+-
+- The ...-DELETE-NEIGHBOR-DUPS-... procedures:
+- These procedures delete adjacent duplicate elements from a list or a
+- vector, using a given element-equality procedure. The first/leftmost
+- element of a run of equal elements is the one that survives. The list or
+- vector is not otherwise disordered.
+-
+- These procedures are linear time -- much faster than the O(n^2) general
+- duplicate-element deletors that do not assume any "bunching" of elements
+- (such as the ones provided by SRFI-1). If you want to delete duplicate
+- elements from a large list or vector, you can sort the elements to bring
+- equal items together, then use one of these procedures, for a total time
+- of O(n lg n).
+-
+- The comparison function = passed to these procedures is always applied
+- (= x y)
+- where X comes before Y in the containing list or vector.
+-
+- - LIST-DELETE-NEIGHBOR-DUPS does not alter its input list; its answer
+- may share storage with the input list.
+-
+- - VECTOR-DELETE-NEIGHBOR-DUPS does not alter its input vector, but
+- rather allocates a fresh vector to hold the result.
+-
+- - LIST-DELETE-NEIGHBOR-DUPS! is permitted, but not required, to
+- mutate its input list in order to construct its answer.
+-
+- - VECTOR-DELETE-NEIGHBOR-DUPS! reuses its input vector to hold the
+- answer, packing its answer into the index range [start,end'), where
+- END' is the non-negative exact integer returned as its value. It
+- returns END' as its result. The vector is not altered outside the range
+- [start,end').
+-
+- - VECTOR-DELETE-NEIGHBOR-DUPS! scans vector SOURCE in range
+- [S-START,S-END), writing its result to vector TARGET beginning at index
+- T-START. It returns exact, non-negative integer T-END, which indicates
+- that the results of the operation are found in index range
+- [T-START,T-END) of TARGET; elements of TARGET outside this range
+- are unaltered.
+-
+- It is an error for memory cell TARGET[T-START] to be a memory cell in
+- the region SOURCE[1 + S-START, S-END). In a Scheme implementation
+- that does not allow distinct vectors to share storage, this means
+- that one of the following must be true:
+- 1. (not (eq? source target))
+- 2. t-start not-in [s-start + 1, s-end)
+-
+- - Examples:
+- (list-delete-neighbor-dups = '(1 1 2 7 7 7 0 -2 -2))
+- => (1 2 7 0 -2)
+-
+- (vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2))
+- => #(1 2 7 0 -2)
+-
+- (vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2) 3 7)
+- => #(7 0 -2)
+-
+- ;; Result left in v[3,9):
+- (let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6)))
+- (cons (vector-delete-neighbor-dups! = v 3)
+- v))
+- => (9 . #(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6))
+-
+-
+-** Algorithm-specific sorting packages
+-======================================
+-These packages provide more specific sorting functionality, that is,
+-specific commitment to particular algorithms that have particular
+-pragmatic consequences (such as memory locality, asymptotic running time)
+-beyond their semantic behaviour (sorting, stable sorting, merging, etc.).
+-Programmers that need a particular algorithm can use one of these packages.
+-
+-sorted?-lib - sorted predicates
+- list-sorted? < lis -> boolean
+- vector-sorted? < v [start end] -> boolean
+-
+- Return #f iff there is an adjacent pair ... X Y ... in the input
+- list or vector such that Y < X. The optional START/END range
+- arguments restrict VECTOR-SORTED? to the indicated subvector.
+-
+-list-merge-sort-lib - list merge sort
+- list-merge-sort < lis -> list
+- list-merge-sort! < lis -> list
+- list-merge lis1 < lis2 -> list
+- list-merge! lis1 < lis2 -> list
+-
+- The sort procedures sort their data using a list merge sort, which is
+- stable. (The reference implementation is, additionally, a "natural" sort.
+- See below for the properties of this algorithm.)
+-
+- The ! procedures are destructive -- they use SET-CDR!s to rearrange the
+- cells of the lists into the proper order. As such, they do not allocate
+- any extra cons cells -- they are "in place" sorts. Additionally,
+- LIST-MERGE! is iterative -- it can operate on arguments of arbitrary size
+- with a constant number of stack frames.
+-
+- The merge operations are stable: an element of LIS1 will come before an
+- equal-comparing element in LIS2 in the result list.
+-
+-vector-merge-sort-lib - vector merge sort
+- vector-merge-sort < v [start end temp] -> vector
+- vector-merge-sort! < v [start end temp] -> unspecified
+- vector-merge < v1 v2 [start1 end1 start2 end2] -> vector
+- vector-merge! < v v1 v2 [start start1 end1 start2 end2] -> unspecified
+-
+- The sort procedures sort their data using vector merge sort, which is
+- stable. (The reference implementation is, additionally, a "natural" sort.
+- See below for the properties of this algorithm.)
+-
+- The optional START/END arguments provide for sorting of subranges, and
+- default to 0 and the length of the corresponding vector.
+-
+- Merge-sorting a vector requires the allocation of a temporary "scratch"
+- work vector for the duration of the sort. This scratch vector can be
+- passed in by the client as the optional TEMP argument; if so, the supplied
+- vector must be of size >= END, and will not be altered outside the range
+- [start,end). If not supplied, the sort routines allocate one themselves.
+-
+- The merge operations are stable: an element of V1 will come before an
+- equal-comparing element in V2 in the result vector.
+-
+- VECTOR-MERGE-SORT! leaves its result in V[start,end).
+-
+- VECTOR-MERGE-SORT returns a vector of length END-START.
+-
+- VECTOR-MERGE returns a vector of length (END1-START1)+(END2-START2).
+-
+- VECTOR-MERGE! writes its result into vector V, beginning at index START,
+- for indices less than END = START + (END1-START1) + (END2-START2). The
+- target subvector
+- V[start,end)
+- may not overlap either source subvector
+- V1[start1,end1)
+- V2[start2,end2).
+-
+-vector-heap-sort-lib - vector heap sort
+- heap-sort < v [start end] -> vector
+- heap-sort! < v [start end] -> unspecified
+-
+- These procedures sort their data using heap sort,
+- which is not a stable sorting algorithm.
+-
+- HEAP-SORT returns a vector of length END-START.
+- HEAP-SORT! is in-place, leaving its result in V[start,end).
+-
+-vector-quick-sort-lib - vector quick sort
+- quick-sort < v [start end] -> vector
+- quick-sort! < v [start end] -> unspecified
+- quick-sort3! c v [start end] -> unspecified
+-
+- These procedures sort their data using quick sort,
+- which is not a stable sorting algorithm.
+-
+- QUICK-SORT returns a vector of length END-START.
+- QUICK-SORT! is in-place, leaving its result in V[start,end).
+-
+- QUICK-SORT3! is a variant of quick-sort that takes a three-way
+- comparison function C. C compares a pair of elements and returns
+- an exact integer whose sign indicates their relationship:
+- (c x y) < 0 => x<y
+- (c x y) = 0 => x=y
+- (c x y) > 0 => x>y
+- To help remember the relationship between the sign of the result and
+- the relation, use the function - as the model for C: (- x y) < 0
+- means that x < y; (- x y) > 0 means that x > y.
+-
+- The extra discrimination provided by the three-way comparison can
+- provide significant speedups when sorting data sets with many duplicates,
+- especially when the comparison function is relatively expensive (e.g.,
+- comparing long strings).
+-
+- WARNING: Some sort algorithms, such as insertion sort or heap sort,
+- can tolerate being passed a <= comparison function when they expect a <
+- function -- insertion and merge sort may simply invert stability; and
+- heap sort will run a bit slower, but otherwise produce a correct answer.
+-
+- Quicksort, however, is much more critically sensitive to the distinction
+- between a < and a <= comparison. If QUICK-SORT or QUICK-SORT! expect a <
+- comparison function, and are erroneously given a <= function, they may,
+- depending on implementation, produce an unsorted result, go into an
+- infinite loop, cause a run-time error, occasionally produce a correct
+- result, or do some fifth thing.
+-
+- Implementors may wish to write QUICKSORT3! so that it (a) tests the
+- comparison function (by checking that (c v[start] v[start]) produces
+- false), or (b) is tolerant of an erroneous <= function, or (c) both.
+- Clients of this function, however, should not count on this.
+-
+-vector-insert-sort-lib - vector insertion sort
+- insert-sort < v [start end] -> vector
+- insert-sort! < v [start end] -> unspecified
+-
+- These procedures stably sort their data using insertion sort.
+-
+- INSERT-SORT returns a vector of length END-START.
+- INSERT-SORT! is in-place, leaving its result in V[start,end).
+-
+-delndup-lib - list and vector delete neighbor duplicates
+- list-delete-neighbor-dups = lis -> list
+- list-delete-neighbor-dups! = lis -> list
+-
+- vector-delete-neighbor-dups = v [start end] -> vector
+- vector-delete-neighbor-dups! = v [start end] -> end'
+-
+- These procedures delete adjacent duplicate elements from a list or
+- a vector, using a given element-equality procedure =. The first/leftmost
+- element of a run of equal elements is the one that survives. The list
+- or vector is not otherwise disordered.
+-
+- These procedures are linear time -- much faster than the O(n^2) general
+- duplicate-element deletors that do not assume any "bunching" of elements
+- (such as the ones provided by SRFI-1). If you want to delete duplicate
+- elements from a large list or vector, you can sort the elements to bring
+- equal items together, then use one of these procedures, for a total time
+- of O(n lg n).
+-
+- The comparison function = passed to these procedures is always applied
+- (= x y)
+- where X comes before Y in the containing list or vector.
+-
+- LIST-DELETE-NEIGHBOR-DUPS does not alter its input list; its answer
+- may share storage with the input list.
+-
+- VECTOR-DELETE-NEIGHBOR-DUPS does not alter its input vector, but
+- rather allocates a fresh vector to hold the result.
+-
+- LIST-DELETE-NEIGHBOR-DUPS! is permitted, but not required, to
+- mutate its input list in order to construct its answer.
+-
+- VECTOR-DELETE-NEIGHBOR-DUPS! reuses its input vector to hold the
+- answer, packing its answer into the index range [start,end'), where
+- END' is the non-negative exact integer returned as its value. It
+- returns END' as its result. The vector is not altered outside the range
+- [start,end').
+-
+- Examples:
+- (list-delete-neighbor-dups = '(1 1 2 7 7 7 0 -2 -2))
+- => (1 2 7 0 -2)
+-
+- (vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2))
+- => #(1 2 7 0 -2)
+-
+- (vector-delete-neighbor-dups = '#(1 1 2 7 7 7 0 -2 -2) 3 7)
+- => #(7 0 -2)
+-
+- ;; Result left in v[3,9):
+- (let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6)))
+- (cons (vector-delete-neighbor-dups! = v 3)
+- v))
+- => (9 . #(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6))
+-
+-binsearch-lib - vector binary search lib
+- vector-binary-search elt< elt->key key v [start end] -> integer-or-false
+- vector-binary-search3 c v [start end] -> integer-or-false
+-
+- VECTOR-BINARY-SEARCH searches vector V in range [START,END) (which
+- default to 0 and the length of V, respectively) for an element whose
+- associated key is equal to KEY. The procedure ELT->KEY is used to map
+- an element to its associated key. The elements of the vector are assumed
+- to be ordered by the ELT< relation on these keys. That is,
+- (vector-sorted? (lambda (x y) (elt< (elt->key x) (elt->key y)))
+- v start end) => true
+- An element E of V is a match for KEY if it's neither less nor greater
+- than the key:
+- (and (not (elt< (elt->key e) key))
+- (not (elt< key (elt->key e))))
+- If there is such an element, the procedure returns its index in the
+- vector as an exact integer. If there is no such element in the searched
+- range, the procedure returns false.
+-
+- (vector-binary-search < car 4 '#((1 . one) (3 . three)
+- (4 . four) (25 . twenty-five)))
+- => 2
+-
+- (vector-binary-search < car 7 '#((1 . one) (3 . three)
+- (4 . four) (25 . twenty-five)))
+- => #f
+-
+- VECTOR-BINARY-SEARCH3 is a variant that uses a three-way comparison
+- function C. C compares its parameter to the search key, and returns an
+- exact integer whose sign indicates its relationship to the search key.
+- (c x) < 0 => x < search-key
+- (c x) = 0 => x = search-key
+- (c x) > 0 => x > search-key
+-
+- (vector-binary-search3 (lambda (elt) (- (car elt) 4))
+- '#((1 . one) (3 . three)
+- (4 . four) (25 . twenty-five)))
+- => 2
+-
+- Rationale:
+- - Why isn't VECTOR-BINARY-SEARCH's ELT->KEY computation simply absorbed
+- into the < function? It is separated out because the < function is
+- applied twice inside the binary-search inner loop, once with the search
+- key for the first argument and the element key for the second argument,
+- and once, with the reverse argument order. This is not necessary for
+- VECTOR-BINARY-SEARCH3.
+-
+- - When a comparison operation is able to produce a three-way
+- discrimination, the inner loop of the binary search can trim the number
+- of per-iteration comparisons from an average of 1.5 to a guaranteed
+- single comparison per iteration. This can be a significant savings when
+- searching with an expensive comparison operation (e.g., one that
+- uses string compare, sends email, references a database, or queries
+- a network service such as a web server).
+-
+- - Failure is signaled by false (rather than, say, -1) so that searches
+- can be used in conditional forms such as
+- (or (vector-binary-search ...) ...)
+- or
+- (cond ((vector-binary-search ...) => index-consumer)
+- ...)
+-
+--------------------------------------------------------------------------------
+-* Algorithmic properties
+-------------------------
+-Different sort and merge algorithms have different properties.
+-Choose the algorithm that matches your needs:
+-
+-Vector insert sort
+- Stable, but only suitable for small vectors -- O(n^2).
+-
+-Vector quick sort
+- Not stable. Is fast on average -- O(n lg n) -- but has bad worst-case
+- behaviour. Has good memory locality for big vectors (unlike heap sort).
+- A clever pivot-picking trick (median of three samples) helps avoid
+- worst-case behaviour, but pathological cases can still blow up.
+-
+-Vector heap sort
+- Not stable. Guaranteed fast -- O(n lg n) *worst* case. Poor locality
+- on large vectors. A very reliable workhorse.
+-
+-Vector merge sort
+- Stable. Not in-place -- requires a temporary buffer of equal size.
+- Fast -- O(n lg n) -- and has good memory locality for large vectors.
+-
+- The implementation of vector merge sort provided by this SRFI's reference
+- implementation is, additionally, a "natural" sort, meaning that it
+- exploits existing order in the input data, providing O(n) best case.
+-
+-Destructive list merge sort
+- Stable, fast and in-place (i.e., allocates no new cons cells). "Fast"
+- means O(n lg n) worse-case, and substantially better if the data
+- is already mostly ordered, all the way down to linear time for
+- a completely-ordered input list (i.e., it is a "natural" sort).
+-
+- Note that sorting lists involves chasing pointers through memory, which
+- can be a loser on modern machine architectures because of poor cache &
+- page locality. Pointer *writing*, which is what the SET-CDR!s of a
+- destructive list-sort algorithm do, is even worse, especially if your
+- Scheme has a generational GC -- the writes will thrash the write-barrier.
+- Sorting vectors has inherently better locality.
+-
+- This SRFI's destructive list merge and merge sort implementations are
+- opportunistic -- they avoid redundant SET-CDR!s, and try to take long
+- already-ordered runs of list structure as-is when doing the merges.
+-
+-Pure list merge sort
+- Stable and fast -- O(n lg n) worst-case, and possibly O(n), depending
+- upon the input list (see discussion above).
+-
+-
+-Algorithm Stable? Worst case Average case In-place
+-------------------------------------------------------
+-Vector insert Yes O(n^2) O(n^2) Yes
+-Vector quick No O(n^2) O(n lg n) Yes
+-Vector heap No O(n lg n) O(n lg n) Yes
+-Vector merge Yes O(n lg n) O(n lg n) No
+-List merge Yes O(n lg n) O(n lg n) Either
+-
+-
+--------------------------------------------------------------------------------
+-* Porting and optimisation
+---------------------------
+-This package should be trivial to port. There are only four non-R4RS bits
+-in the code:
+-- Use of multiple-value return, with the R5RS VALUES procedure, and the
+- simple (RECEIVE (var ...) mv-exp body ...) multiple-value binding macro
+- of SRFI-8.
+-
+-- A VECTOR-COPY procedure. This is a tiny little procedure:
+- (vector-copy v [start end])
+-
+-- Use of the LET-OPTIONALS macro from scsh to parse and default optional
+- arguments to three routines. Again, easy to port the macro or rewrite
+- the code to parse, default, and error check the args by hand.
+-
+-- Calls to an ERROR function for complaining about bad arguments.
+-
+-This code is tightly bummed, as far as I can go in portable Scheme.
+-
+-You could speed up the vector code a lot by error-checking the procedure
+-parameters and then shifting over to fixnum-specific arithmetic and dangerous
+-vector-indexing and vector-setting primitives. The comments in the code
+-indicate where the initial error checks would have to be added. There are
+-several (QUOTIENT N 2)'s that could be changed to a fixnum right-shift, as
+-well, in both the list and vector code (SRFI 33 provides such an operator).
+-The code is designed to enable this -- each file usually exports one or two
+-"safe" procedures that end up calling an internal "dangerous" primitive. The
+-little exported cover procedures are where you move the error checks.
+-
+-This should provide *big* speedups. In fact, all the code bumming I've done
+-pretty much disappears in the noise unless you have a good compiler and also
+-can dump the vector-index checks and generic arithmetic -- so I've really just
+-set things up for you to exploit.
+-
+-The optional-arg parsing, defaulting, and error checking is done with a
+-portable R4RS macro. But if your Scheme has a faster mechanism (e.g., Chez),
+-you should definitely port over to it. Note that argument defaulting and
+-error-checking are interleaved -- you don't have to error-check defaulted
+-START/END args to see if they are fixnums that are legal vector indices for
+-the corresponding vector, etc.
+-
+-
+--------------------------------------------------------------------------------
+-* References & Links
+---------------------
+-
+-This document, in HTML:
+- http://srfi.schemers.org/srfi-32/srfi-32.html
+- [This link may not be valid while the SRFI is in draft form.]
+-
+-This document, in simple text format:
+- http://srfi.schemers.org/srfi-32/srfi-32.txt
+-
+-Archive of SRFI-32 discussion-list email:
+- http://srfi.schemers.org/srfi-32/mail-archive/maillist.html
+-
+-SRFI web site:
+- http://srfi.schemers.org/
+-
+-[CommonLisp]
+- Common Lisp: the Language
+- Guy L. Steele Jr. (editor).
+- Digital Press, Maynard, Mass., second edition 1990.
+- Available at http://www.elwood.com/alu/table/references.htm#cltl2
+-
+- The Common Lisp "HyperSpec," produced by Kent Pitman, is essentially
+- the ANSI spec for Common Lisp:
+- http://www.xanalys.com/software_tools/reference/HyperSpec/
+-
+-[R5RS]
+- Revised^5 Report on the Algorithmic Language Scheme,
+- R. Kelsey, W. Clinger, J. Rees (editors).
+- Higher-Order and Symbolic Computation, Vol. 11, No. 1, September, 1998.
+- and ACM SIGPLAN Notices, Vol. 33, No. 9, October, 1998.
+-
+- Available at http://www.schemers.org/Documents/Standards/
+-
+-
+--------------------------------------------------------------------------------
+-* Acknowledgements
+-------------------
+-
+-I thank the authors of the open source I consulted when designing this
+-library, particularly Richard O'Keefe, Donovan Kolby and the MIT Scheme Team.
+-
+-
+--------------------------------------------------------------------------------
+-* Copyright
+------------
+-
+-** SRFI text
+-============
+-This document is copyright (C) Olin Shivers (1998, 1999).
+-All Rights Reserved.
+-
+-This document and translations of it may be copied and furnished to others,
+-and derivative works that comment on or otherwise explain it or assist in its
+-implementation may be prepared, copied, published and distributed, in whole or
+-in part, without restriction of any kind, provided that the above copyright
+-notice and this paragraph are included on all such copies and derivative
+-works. However, this document itself may not be modified in any way, such as
+-by removing the copyright notice or references to the Scheme Request For
+-Implementation process or editors, except as needed for the purpose of
+-developing SRFIs in which case the procedures for copyrights defined in the
+-SRFI process must be followed, or as required to translate it into languages
+-other than English.
+-
+-The limited permissions granted above are perpetual and will not be revoked by
+-the authors or their successors or assigns.
+-
+-This document and the information contained herein is provided on an "AS IS"
+-basis and THE AUTHORS AND THE SRFI EDITORS DISCLAIM ALL WARRANTIES, EXPRESS OR
+-IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+-INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+-
+-** Reference implementation
+-===========================
+-Short summary: no restrictions.
+-
+-While I wrote all of this code myself, I read a lot of code before I began
+-writing. However, all such code is, itself, either open source or public
+-domain, rendering irrelevant any issue of "copyright taint."
+-
+-The natural merge sorts (pure list, destructive list, and vector) are not only
+-my own code, but are implementations of an algorithm of my own devising. They
+-run in O(n lg n) worst case, O(n) best case, and require only a logarithmic
+-number of stack frames. And they are stable. And the destructive-list variant
+-allocates zero cons cells; it simply rearranges the cells of the input list.
+-
+-Hence the reference implementation is
+- Copyright (c) 1998 by Olin Shivers.
+-and made available under the same copyright as the SRFI text (see above).
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/32/srfi-32.txt racket-6.12/share/pkgs/srfi-lib/srfi/32/srfi-32.txt
+--- racket-6.12-orig/share/pkgs/srfi-lib/srfi/32/srfi-32.txt 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib/srfi/32/srfi-32.txt 2018-01-31 12:22:58.152501970 -0500
+@@ -0,0 +1,938 @@
++The SRFI-32 sort libraries -*- outline -*-
++Olin Shivers
++First draft: 1998/10/19
++Last update: 2002/7/21
++
++Emacs should display this document in outline mode. Say c-h m for
++instructions on how to move through it by sections (e.g., c-c c-n, c-c c-p).
++
++* Table of contents
++-------------------
++Abstract
++Procedure index
++Introduction
++What's wrong with the current state of affairs?
++Design rules
++ What vs. how
++ Consistency across function signatures
++ Data parameter first, less-than parameter after
++ Ordering, comparison functions & stability
++ All vector operations accept optional subrange parameters
++ Required vs. allowed side-effects
++Procedure specification
++ Procedure naming and functionality
++ Types of parameters and return values
++ sort-lib - general sorting package
++ Algorithm-specific sorting packages
++Algorithmic properties
++Topics to be resolved during discussion phase
++Porting and optimisation
++References & Links
++Acknowledgements
++Copyright
++
++
++* Abstract
++----------
++Current Scheme sorting packages are, every one of them, surprisingly bad. I've
++designed the API for a full-featured sort toolkit, which I propose as an SRFI.
++The spec comes with 1200 lines of high-quality reference code: tightly
++written, highly commented, portable code, available for free. Implementors
++want this code. It's better than what you have.
++
++-------------------------------------------------------------------------------
++* Procedure index
++-----------------
++list-sorted? vector-sorted?
++
++list-merge vector-merge
++list-sort vector-sort
++list-stable-sort vector-stable-sort
++list-delete-neighbor-dups vector-delete-neighbor-dups
++
++list-merge! vector-merge!
++list-sort! vector-sort!
++list-stable-sort! vector-stable-sort!
++list-delete-neighbor-dups! vector-delete-neighbor-dups!
++
++heap-sort quick-sort insert-sort list-merge-sort vector-merge-sort
++heap-sort! quick-sort! insert-sort! list-merge-sort! vector-merge-sort!
++
++-------------------------------------------------------------------------------
++* Introduction
++--------------
++As I'll detail bewlow, I wasn't very happy with the state of the Scheme
++world for sorting and merging lists and vectors. So I have designed and
++written a fairly comprehensive sorting & merging toolkit. It is
++
++ - very portable,
++
++ - much better code than what is currently in Elk, Gambit, Bigloo,
++ Scheme->C, MzScheme, RScheme, Scheme48, MIT Scheme, or slib, and
++
++ - priced to move: free code.
++
++The package includes
++ - Vector insert sort (stable)
++ - Vector heap sort
++ - Vector quick sort (with median-of-3 pivot picking)
++ - Vector merge sort (stable)
++ - Pure and destructive list merge sort (stable)
++ - Stable vector and list merge
++ - Miscellaneous sort-related procedures: Vector and list merging,
++ sorted? predicates, vector binary search, vector and list
++ delete-equal-neighbor procedures.
++ - A general, non-algorithmic set of procedure names for general sorting
++ and merging.
++
++Scheme programmers may want to adopt this package. I'd like Scheme
++implementors to adopt this code and its API -- in fact, the code is a bribe to
++make it easy for implementors to converge on the suggested API. I mean, you'd
++really have to be a boor to take this free code I wrote and mutate its
++interface over to your incompatible, unportable API, wouldn't you? But you
++could, of course -- it's freely available. More in the spirit of the offering,
++you could make this API available, and then also write a little module
++providing your old interface that is defined in terms of this API. "Scheme
++implementors," in this context, includes slib, which isn't really a standalone
++implementation of Scheme, but is an influential collection of API's and code.
++
++The code is tightly bummed. It is clearly written, and commented in my usual
++voluminous style. This includes notes on porting and implementation-specific
++optimisations.
++
++
++-------------------------------------------------------------------------------
++* What's wrong with the current state of affairs?
++-------------------------------------------------
++
++It's just amazing to me that in 2002, sorting and merging hasn't been
++completely put to bed. These are well-understood algorithms, each of them well
++under a page of code. The straightforward algorithms are basic, core stuff --
++sophomore-level. But if you tour the major Scheme implementations out there on
++the Net, you find badly written code that provides extremely spotty coverage
++of the algorithm space. One implementation even has a buggy implementation
++that has been in use for about 20 years!
++
++Open source-code is a wonderful thing. In a couple of hours, I was able to
++download and check the sources of 9 Scheme systems. Here are my notes from the
++systems I checked. You can skip to the next section if you aren't morbidly
++curious.
++
++slib
++ sorted? vector-or-list <
++ merge list1 list2 <
++ merge! list1 list2 <
++ sort vector-or-list <
++ sort! vector-or-list <
++
++ Richard O'Keefe's stable list merge sort is right idea, but implemented
++ using gratuitous variable side effects. It also does redundant SET-CDR!s.
++ The vector sort converts to list, merge sorts, then reconverts
++ to vector. This is a bad idea -- non-local pointer chasing bad; vector
++ shuffling good.
++
++MIT Scheme
++ sort! vector <
++ merge-sort! vector <
++ quick-sort! vector <
++
++ sort vector-or-list <
++ merge-sort vector-or-list <
++ quick-sort vector-or-list <
++
++ Naive vector quicksort: loser, for worst-case performance reasons.
++ List sort by "list->vector; quicksort; vector->list," hence also loser.
++ A clever stable vector merge sort, albeit not very bummed.
++
++Scheme 48 & T
++ sort-list list <
++ sort-list! list <
++ list-merge! list1 list2 <
++
++ Bob Nix's implementation of online merge-sort, written in the early 80's.
++ Conses unnecessary bookkeeping structure, which isn't necessary with a
++ proper recursive formulation. Also, does redundant SET-CDR!s. No vector
++ sort. Also, has a bug -- is claimed to be a stable sort, but isn't! To see
++ this, get the S48 code, and try
++ (define (my< x y) (< (quotient x 2) (quotient y 2)))
++ (list-merge! (list 0 2) (list 3) my<) ; -> (0 2 3)
++ (list-merge! (list 2) (list 0 3) my<) ; -> (0 3 2)
++ This could be fixed very easily, but it isn't worth it given the
++ other problems with the algorithm.
++
++RScheme
++ vector-sort! vector <
++ sort collection <
++
++ Good basic implementation of vector heapsort, which has O(n lg n)
++ worst-case time. Code ugly, needs tuning. List sort by "list->vector;
++ sort; vector->list", which allocates unneeded temp storage. Nothing
++ for stable sorting.
++
++MzScheme
++ Naive quicksort -- but not available for vector sorting, even
++ though it internally uses a vector. Nothing for stable sorting,
++ and naive quicksort has bad worst-case behaviour.
++
++Bigloo, Scheme->C
++ Couldn't find anything -- but maybe I didn't search for the right
++ thing, since the Bigloo names are French. (I invite correction from
++ the Bigloo implementors.)
++
++Gambit
++ sort-list list <
++ Nothing for vectors. Simple, slow, unstable merge sort for lists.
++
++Elk
++ Another naive quicksort. Lists handled by converting to vector.
++ sort vector-or-list <
++ sort! vector-or-list <
++
++Chez Scheme
++ merge < list1 list2
++ merge! < list1 list2
++ sort < list
++ sort! < list
++
++ These are stable. I have not seen the source code.
++
++Common Lisp
++ sort sequence < [key]
++ stable-sort sequence < [key]
++ merge result-type sequence1 sequence2 < [key]
++
++ The sort procedures are allowed, but not required, to be destructive.
++
++SML/NJ
++ sort: ('a*'a -> bool) -> 'a list -> 'a list
++ "Smooth applicative merge sort," which is stable.
++ There is also a highly bummed quicksort for vectors.
++
++The right solution: Implement a full toolbox of carefully written standard sort
++routines.
++
++Having the source available for all of these above-cited Schemes made
++life a lot easier writing this code. I appreciate the authors making their
++source available under such open terms.
++
++
++-------------------------------------------------------------------------------
++* Design rules
++--------------
++
++** What vs. how
++===============
++There are two different interfaces: "what" (simple) & "how" (detailed).
++
++ - Simple: you specify semantics: datatype (list or vector),
++ mutability, and stability.
++
++ - Detailed: you specify the actual algorithm (quick, heap,
++ insert, merge). Different algorithms have different properties,
++ both semantic & pragmatic, so these exports are necessary.
++
++ It is necessarily the case that the specifications of these procedures
++ make statements about execution "pragmatics." For example, the sole
++ distinction between heap sort and quick sort -- both of which are
++ provided by this library -- is one of execution time, which is not a
++ "semantic" distinction. Similar resource-use statements are made about
++ "iterative" procedures, meaning that they can execute on input of
++ arbitrary size without needing to allocate an unbounded number of stack
++ frames.
++
++** Consistency across function signatures
++=========================================
++The two interfaces share common function signatures wherever
++possible, to facilitate switching a given call from one procedure
++to another.
++
++** Data parameter first, less-than parameter after
++==================================================
++These procedures uniformly observe the following parameter order:
++the data to be sorted come before the the comparison function.
++That is, we write
++ (sort lis <)
++not
++ (sort < lis).
++This is consistent with every single implementation out there, with
++the sole exception of Chez Scheme.
++
++In my opinion, it would be more consistent with other Scheme libraries
++to put the ordering function first -- the "operation currying" convention.
++(E.g., consider FOR-EACH or MAP or FIND.) I decided to leave things as they
++are in favor of near-total backwards compatibility with existing practice.
++
++[Perhaps this should be discussed.]
++
++** Ordering, comparison functions & stability
++=============================================
++These routines take a < comparison function, not a <= comparison
++function, and they sort into increasing order. The difference between
++a < spec and a <= spec comes up in two places:
++ - the definition of an ordered or sorted data set, and
++ - the definition of a stable sorting algorithm.
++
+++ We say that a data set (a list or vector) is *sorted* or *ordered*
++ if it contains no adjacent pair of values ... X Y ... such that Y < X.
++
++ In other words, scanning across the data never takes a "downwards" step.
++
++ If you use a <= procedure where these algorithms expect a <
++ procedure, you may not get the answers you expect. For example,
++ the LIST-SORTED? function will return false if you pass it a <= comparison
++ function and an ordered list containing adjacent equal elements.
++
+++ A "stable" sort is one that preserves the pre-existing order of equal
++ elements. Suppose, for example, that we sort a list of numbers by
++ comparing their absolute values, i.e., using comparison function
++ (lambda (x y) (< (abs x) (abs y)))
++ If we sort a list that contains both 3 and -3:
++ ... 3 ... -3 ...
++ then a stable sort is an algorithm that will not swap the order
++ of these two elements, that is, the answer will look like
++ ... 3 -3 ...
++ not
++ ... -3 3 ...
++
++ Choosing < for the comparison function instead of <= affects how stability
++ is coded. Given an adjacent pair X Y, (< y x) means "Y should be moved in
++ front of X" -- otherwise, leave things as they are. So using a <= function
++ where a < function is expected will *invert* stability.
++
++ This is due to the definition of equality, given a < comparator:
++ (and (not (< x y))
++ (not (< y x)))
++ The definition is rather different, given a <= comparator:
++ (and (<= x y)
++ (<= x y))
++
+++ A "stable" merge is one that reliably favors one of its data sets
++ when equal items appear in both data sets. *All merge operations in
++ this library are stable*, breaking ties between data sets in favor
++ of the first data set -- elements of the first list come before equal
++ elements in the second list.
++
++ So, if we are merging two lists of numbers ordered by absolute value
++ using the stable merge operation LIST-MERGE
++ (list-merge '(0 -2 4 8 -10) '(-1 3 -4 7)
++ (lambda (x y) (< (abs x) (abs y))))
++ reliably places the 4 of the first list before the equal-comparing -4
++ of the second list:
++ (0 -1 -2 4 -4 7 8 -10)
++
++In short, if your comparison function F answers true to (F x x), then
++using a stable sorting or merging algorithm will not give you a stable sort
++or merge, and LIST-SORTED? may surprise you. Note that you can synthesize a <
++function from a <= function with
++ (lambda (x y) (not (<= y x)))
++if need be.
++
++Precise definitions give sharp edges to tools, but require care
++in use. "Measure twice, cut once."
++
++I have adopted the choice of < from Common Lisp. I assume they
++had a good reason for adopting < instead of <=. I'd love to know
++what this reason is; send me email if you can explain it, please.
++
++** All vector operations accept optional subrange parameters
++============================================================
++The vector operations specified below all take optional START/END arguments
++indicating a selected subrange of a vector's elements. If a START parameter or
++START/END parameter pair is given to such a procedure, they must be exact,
++non-negative integers, such that
++ 0 <= START <= END <= (VECTOR-LENGTH V)
++where V is the related vector parameter. If not specified, they default to 0
++and the length of the vector, respectively. They are interpreted to select the
++range [START,END), that is, all elements from index START (inclusive) up to,
++but not including, index END.
++
++** Required vs. allowed side-effects
++====================================
++LIST-SORT! and LIST-STABLE-SORT! are allowed, but not required,
++to alter their arguments' cons cells to construct the result list. This is
++consistent with the what-not-how character of the group of procedures
++to which they belong (the "sort-lib" package).
++
++The LIST-DELETE-NEIGHBOR-DUPS!, LIST-MERGE! and LIST-MERGE-SORT! procedures,
++on the other hand, provide specific algorithms, and, as such, explicitly
++commit to the use of side-effects on their input lists in order to guarantee
++their key algorithmic properties (e.g., linear-time operation, constant-space
++stack use).
++
++-------------------------------------------------------------------------------
++* Procedure specification
++-------------------------
++The procedures are split into several packages. In a Scheme system that has a
++module or package system, these procedures should be contained in modules
++named as follows:
++ Package name Functionality
++ ------------ -------------
++ sort-lib General sorting for lists & vectors
++ sorted?-lib Sorted predicates for lists & vectors
++ list-merge-sort-lib List merge sort
++ vector-merge-sort-lib Vector merge sort
++ vector-heap-sort-lib Vector heap sort
++ vector-quick-sort-lib Vector quick sort
++ vector-insert-sort-lib Vector insertion sort
++ delndup-lib List and vector delete neighbor duplicates
++
++A Scheme system without a module system should provide all of the bindings
++defined in all of these modules as components of the "SRFI-32" package.
++
++Note that there is no list insert sort package, as you might as well always
++use list merge sort. The reference implementation's destructive list merge
++sort will do fewer SET-CDR!s than a destructive insert sort.
++
++** Procedure naming and functionality
++=====================================
++Almost all of the procedures described below are variants of two basic
++operations: sorting and merging. These procedures are consistently named
++by composing a set of basic lexemes to indicate what they do.
++
++Lexeme Meaning
++------ -------
++"sort" The procedure sorts its input data set by some < comparison function.
++
++"merge" The procedure merges two ordered data sets into a single ordered
++ result.
++
++"stable" This lexeme indicates that the sort is a stable one.
++
++"vector" The procedure operates upon vectors.
++
++"list" The procedure operates upon lists.
++
++"!" Procedures that end in "!" are allowed, and sometimes required,
++ to reuse their input storage to construct their answer.
++
++** Types of parameters and return values
++========================================
++In the procedures specified below,
++ - A LIS parameter is a list;
++
++ - A V parameter is a vector;
++
++ - A < or = parameter is a procedure accepting two arguments taken from the
++ specified procedure's data set(s), and returning a boolean;
++
++ - START and END parameters are exact, non-negative integers that
++ serve as vector indices selecting a subrange of some associated vector.
++ When specified, they must satisfy the relation
++ 0 <= start <= end <= (vector-length v)
++ where V is the associated vector.
++
++Passing values to procedures with these parameters that do not satisfy these
++types is an error.
++
++If a procedure is said to return "unspecified," this means that nothing at all
++is said about what the procedure returns, not even the number of return
++values. Such a procedure is not even required to be consistent from call to
++call in the nature or number of its return values. It is simply required to
++return a value (or values) that may be passed to a command continuation, e.g.
++as the value of an expression appearing as a non-terminal subform of a BEGIN
++expression. Note that in R5RS, this restricts such a procedure to returning a
++single value; non-R5RS systems may not even provide this restriction.
++
++** sort-lib - general sorting package
++=====================================
++This library provides basic sorting and merging functionality suitable for
++general programming. The procedures are named by their semantic properties,
++i.e., what they do to the data (sort, stable sort, merge, and so forth).
++
++ Procedure Suggested algorithm
++ -------------------------------------------------------------------------
++ list-sorted? lis < -> boolean
++ list-merge lis1 lis2 < -> list
++ list-merge! lis1 lis2 < -> list
++ list-sort lis < -> list (vector heap or quick)
++ list-sort! lis < -> list (list merge sort)
++ list-stable-sort lis < -> list (vector merge sort)
++ list-stable-sort! lis < -> list (list merge sort)
++ list-delete-neighbor-dups lis = -> list
++ list-delete-neighbor-dups! lis = -> list
++
++ vector-sorted? v < [start end] -> boolean
++ vector-merge v1 v2 < [start1 end1 start2 end2] -> vector
++ vector-merge! v v1 v2 < [start start1 end1 start2 end2] -> unspecific
++ vector-sort v < [start end] -> vector (heap or quick sort)
++ vector-sort! v < [start end] -> unspecific (heap or quick sort)
++ vector-stable-sort v < [start end] -> vector (vector merge sort)
++ vector-stable-sort! v < [start end] -> unspecific (vector merge sort)
++ vector-delete-neighbor-dups v = [start end] -> vector
++ vector-delete-neighbor-dups! v = [start end] -> end'
++
++ LIST-SORTED? and VECTOR-SORTED? return true if their input list or vector
++ is in sorted order, as determined by their < comparison parameter.
++
++ All four merge operations are stable: an element of the initial list LIS1
++ or vector V1 will come before an equal-comparing element in the second
++ list LIS2 or vector V2 in the result.
++
++ The procedures
++ LIST-MERGE
++ LIST-SORT
++ LIST-STABLE-SORT
++ LIST-DELETE-NEIGHBOR-DUPS
++ do not alter their inputs and are allowed to return a value that shares
++ a common tail with a list argument.
++
++ The procedures
++ LIST-SORT!
++ LIST-STABLE-SORT!
++ are "linear update" operators -- they are allowed, but not required, to
++ alter the cons cells of their arguments to produce their results.
++
++ On the other hand, the procedures
++ LIST-DELETE-NEIGHBOR-DUPS!
++ LIST-MERGE!
++ make only a single, iterative, linear-time pass over their argument lists,
++ using SET-CDR!s to rearrange the cells of the lists into the final result
++ -- they work "in place." Hence, any cons cell appearing in the result must
++ have originally appeared in an input. The intent of this
++ iterative-algorithm commitment is to allow the programmer to be sure that
++ if, for example, LIST-MERGE! is asked to merge two ten-million-element
++ lists, the operation will complete without performing some extremely
++ (possibly twenty-million) deep recursion.
++
++ The vector procedures
++ VECTOR-SORT
++ VECTOR-STABLE-SORT
++ VECTOR-DELETE-NEIGHBOR-DUPS
++ do not alter their inputs, but allocate a fresh vector for their result,
++ of length END-START.
++
++ The vector procedures
++ VECTOR-SORT!
++ VECTOR-STABLE-SORT!
++ sort their data in-place. (But note that VECTOR-STABLE-SORT! may
++ allocate temporary storage proportional to the size of the input --
++ I am not aware of O(n lg n) stable vector sorting algorithms that
++ run in constant space.)
++
++ VECTOR-MERGE returns a vector of length (END1-START1)+(END2-START2).
++
++ VECTOR-MERGE! writes its result into vector V, beginning at index START0,
++ for indices less than END0 = START0 + (END1-START1) + (END2-START2). The
++ target subvector
++ V[start0,end0)
++ may not overlap either source subvector
++ V1[start1,end1)
++ V2[start2,end2).
++
++ The DELETE-NEIGHBOR-DUP-... procedures:
++ These procedures delete adjacent duplicate elements from a list or a
++ vector, using a given element-equality procedure. The first/leftmost
++ element of a run of equal elements is the one that survives. The list or
++ vector is not otherwise disordered.
++
++ These procedures are linear time -- much faster than the O(n^2) general
++ duplicate-element deletors that do not assume any "bunching" of elements
++ (such as the ones provided by SRFI-1). If you want to delete duplicate
++ elements from a large list or vector, sort the elements to bring equal
++ items together, then use one of these procedures, for a total time of
++ O(n lg n).
++
++ The comparison function = passed to these procedures is always applied
++ (= x y)
++ where X comes before Y in the containing list or vector.
++
++ - LIST-DELETE-NEIGHBOR-DUPS does not alter its input list; its answer
++ may share storage with the input list.
++
++ - VECTOR-DELETE-NEIGHBOR-DUPS does not alter its input vector, but
++ rather allocates a fresh vector to hold the result.
++
++ - LIST-DELETE-NEIGHBOR-DUPS! is permitted, but not required, to
++ mutate its input list in order to construct its answer.
++
++ - VECTOR-DELETE-NEIGHBOR-DUPS! reuses its input vector to hold the
++ answer, packing its answer into the index range [start,end'), where
++ END' is the non-negative exact integer returned as its value. It
++ returns END' as its result. The vector is not altered outside the range
++ [start,end').
++
++ [Maybe this procedure should take a "target" vector to write?]
++
++ - Examples:
++ (list-delete-neighbor-dups '(1 1 2 7 7 7 0 -2 -2) =)
++ => (1 2 7 0 -2)
++
++ (vector-delete-neighbor-dups '#(1 1 2 7 7 7 0 -2 -2) =)
++ => #(1 2 7 0 -2)
++
++ (vector-delete-neighbor-dups '#(1 1 2 7 7 7 0 -2 -2) = 3 7)
++ => #(7 0 -2)
++
++ ;; Result left in v[3,9):
++ (let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6)))
++ (cons (vector-delete-neighbor-dups! v = 3)
++ v))
++ => (9 . #(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6))
++
++
++** Algorithm-specific sorting packages
++======================================
++These packages provide more specific sorting functionality, that is,
++specific committment to particular algorithms that have particular
++pragmatic consequences (such as memory locality, asymptotic running time)
++beyond their semantic behaviour (sorting, stable sorting, merging, etc.).
++Programmers that need a particular algorithm can use one of these packages.
++
++sorted?-lib - sorted predicates
++ list-sorted? lis < -> boolean
++ vector-sorted? v < [start end] -> boolean
++
++ Return #f iff there is an adjacent pair ... X Y ... in the input
++ list or vector such that Y < X. The optional START/END range
++ arguments restrict VECTOR-SORTED? to the indicated subvector.
++
++list-merge-sort-lib - list merge sort
++ list-merge-sort lis < -> list
++ list-merge-sort! lis < -> list
++ list-merge lis1 lis2 < -> list
++ list-merge! lis1 lis2 < -> list
++
++ The sort procedures sort their data using a list merge sort, which is
++ stable. (The reference implementation is, additionally, a "natural" sort.
++ See below for the properties of this algorithm.)
++
++ The ! procedures are destructive -- they use SET-CDR!s to rearrange the
++ cells of the lists into the proper order. As such, they do not allocate
++ any extra cons cells -- they are "in place" sorts. Additionally,
++ LIST-MERGE! is iterative, not recursive -- it can operate on arguments of
++ arbitrary size without requiring an unbounded amount of stack space.
++
++ The merge operations are stable: an element of LIS1 will come before an
++ equal-comparing element in LIS2 in the result list.
++
++vector-merge-sort-lib - vector merge sort
++ vector-merge-sort v < [start end temp] -> vector
++ vector-merge-sort! v < [start end temp] -> unspecific
++ vector-merge v1 v2 < [start1 end1 start2 end2] -> vector
++ vector-merge! v v1 v2 < [start0 start1 end1 start2 end2] -> unspecific
++
++ The sort procedures sort their data using vector merge sort, which is
++ stable. (The reference implementation is, additionally, a "natural" sort.
++ See below for the properties of this algorithm.)
++
++ The optional START/END arguments provide for sorting of subranges, and
++ default to 0 and the length of the corresponding vector.
++
++ Merge-sorting a vector requires the allocation of a temporary "scratch"
++ work vector for the duration of the sort. This scratch vector can be
++ passed in by the client as the optional TEMP argument; if so, the supplied
++ vector must be of size >= END, and will not be altered outside the range
++ [start,end). If not supplied, the sort routines allocate one themselves.
++
++ The merge operations are stable: an element of V1 will come before an
++ equal-comparing element in V2 in the result vector.
++
++ VECTOR-MERGE-SORT! leaves its result in V[start,end).
++
++ VECTOR-MERGE-SORT returns a vector of length END-START.
++
++ VECTOR-MERGE returns a vector of length (END1-START1)+(END2-START2).
++
++ VECTOR-MERGE! writes its result into vector V, beginning at index START0,
++ for indices less than END0 = START0 + (END1-START1) + (END2-START2). The
++ target subvector
++ V[start0,end0)
++ may not overlap either source subvector
++ V1[start1,end1)
++ V2[start2,end2).
++
++vector-heap-sort-lib - vector heap sort
++ heap-sort v < [start end] -> vector
++ heap-sort! v < [start end] -> unspecific
++
++ These procedures sort their data using heap sort,
++ which is not a stable sorting algorithm.
++
++ HEAP-SORT returns a vector of length END-START.
++ HEAP-SORT! is in-place, leaving its result in V[start,end).
++
++vector-quick-sort-lib - vector quick sort
++ quick-sort v < [start end] -> vector
++ quick-sort! v < [start end] -> unspecific
++
++ These procedures sort their data using quick sort,
++ which is not a stable sorting algorithm.
++
++ QUICK-SORT returns a vector of length END-START.
++ QUICK-SORT! is in-place, leaving its result in V[start,end).
++
++vector-insert-sort-lib - vector insertion sort
++ insert-sort v < [start end] -> vector
++ insert-sort! v < [start end] -> unspecific
++
++ These procedures stably sort their data using insertion sort.
++
++ INSERT-SORT returns a vector of length END-START.
++ INSERT-SORT! is in-place, leaving its result in V[start,end).
++
++delndup-lib - list and vector delete neighbor duplicates
++ list-delete-neighbor-dups lis = -> list
++ list-delete-neighbor-dups! lis = -> list
++
++ vector-delete-neighbor-dups v = [start end] -> vector
++ vector-delete-neighbor-dups! v = [start end] -> end'
++
++ These procedures delete adjacent duplicate elements from a list or
++ a vector, using a given element-equality procedure =. The first/leftmost
++ element of a run of equal elements is the one that survives. The list
++ or vector is not otherwise disordered.
++
++ These procedures are linear time -- much faster than the O(n^2) general
++ duplicate-element deletors that do not assume any "bunching" of elements
++ (such as the ones provided by SRFI-1). If you want to delete duplicate
++ elements from a large list or vector, sort the elements to bring equal
++ items together, then use one of these procedures, for a total time of
++ O(n lg n).
++
++ The comparison function = passed to these procedures is always applied
++ (= x y)
++ where X comes before Y in the containing list or vector.
++
++ LIST-DELETE-NEIGHBOR-DUPS does not alter its input list; its answer
++ may share storage with the input list.
++
++ VECTOR-DELETE-NEIGHBOR-DUPS does not alter its input vector, but
++ rather allocates a fresh vector to hold the result.
++
++ LIST-DELETE-NEIGHBOR-DUPS! is permitted, but not required, to
++ mutate its input list in order to construct its answer.
++
++ VECTOR-DELETE-NEIGHBOR-DUPS! reuses its input vector to hold the
++ answer, packing its answer into the index range [start,end'), where
++ END' is the non-negative exact integer returned as its value. It
++ returns END' as its result. The vector is not altered outside the range
++ [start,end').
++
++ Examples:
++ (list-delete-neighbor-dups '(1 1 2 7 7 7 0 -2 -2) =)
++ => (1 2 7 0 -2)
++
++ (vector-delete-neighbor-dups '#(1 1 2 7 7 7 0 -2 -2) =)
++ => #(1 2 7 0 -2)
++
++ (vector-delete-neighbor-dups '#(1 1 2 7 7 7 0 -2 -2) = 3 7)
++ => #(7 0 -2)
++
++ ;; Result left in v[3,9):
++ (let ((v (vector 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6)))
++ (cons (vector-delete-neighbor-dups! v = 3)
++ v))
++ => (9 . #(0 0 0 1 2 3 4 5 6 4 4 5 5 6 6))
++
++
++-------------------------------------------------------------------------------
++* Algorithmic properties
++------------------------
++Different sort and merge algorithms have different properties.
++Choose the algorithm that matches your needs:
++
++Vector insert sort
++ Stable, but only suitable for small vectors -- O(n^2).
++
++Vector quick sort
++ Not stable. Is fast on average -- O(n lg n) -- but has bad worst-case
++ behaviour. Has good memory locality for big vectors (unlike heap sort).
++ A clever pivot-picking trick (median of three samples) helps avoid
++ worst-case behaviour, but pathological cases can still blow up.
++
++Vector heap sort
++ Not stable. Guaranteed fast -- O(n lg n) *worst* case. Poor locality
++ on large vectors. A very reliable workhorse.
++
++Vector merge sort
++ Stable. Not in-place -- requires a temporary buffer of equal size.
++ Fast -- O(n lg n) -- and has good memory locality for large vectors.
++
++ The implementation of vector merge sort provided by this SRFI's reference
++ implementation is, additionally, a "natural" sort, meaning that it
++ exploits existing order in the input data, providing O(n) best case.
++
++Destructive list merge sort
++ Stable, fast and in-place (i.e., allocates no new cons cells). "Fast"
++ means O(n lg n) worse-case, and substantially better if the data
++ is already mostly ordered, all the way down to linear time for
++ a completely-ordered input list (i.e., it is a "natural" sort).
++
++ Note that sorting lists involves chasing pointers through memory, which
++ can be a loser on modern machine architectures because of poor cache &
++ page locality. Pointer *writing*, which is what the SET-CDR!s of a
++ destructive list-sort algorithm do, is even worse, especially if your
++ Scheme has a generational GC -- the writes will thrash the write-barrier.
++ Sorting vectors has inherently better locality.
++
++ This SRFIs destructive list merge and merge sort implementations are
++ opportunistic -- they avoid redundant SET-CDR!s, and try to take long
++ already-ordered runs of list structure as-is when doing the merges.
++
++Pure list merge sort
++ Stable and fast -- O(n lg n) worst-case, and possibly better, depending
++ upon the input list (see above).
++
++
++Algorithm Stable? Worst case Average case In-place
++------------------------------------------------------
++V insert Yes O(n^2) O(n^2) Yes
++V quick No O(n^2) O(n lg n) Yes
++V heap No O(n lg n) O(n lg n) Yes
++V merge Yes O(n lg n) O(n lg n) No
++L merge Yes O(n lg n) O(n lg n) Either
++
++
++-------------------------------------------------------------------------------
++* Topics to be resolved during discussion phase
++-----------------------------------------------
++I particularly solicit comments about the following topics.
++
++- Include VECTOR-BINARY-SEARCH ?
++ Should we include
++ (VECTOR-BINARY-SEARCH v key< elt->key key [start end])
++ in the SRFI? It sort of goes with sorting; it's exactly ten lines of code.
++
++- Comparison function before or after the list/vector argument?
++ Should it be
++ (list-sort < lis)
++ or
++ (list-sort lis <)
++ There is overwhelming consistency among the implementations: data first,
++ < after. Only Chez does it differently.
++
++ I have done it in the backwards-compatible way. But I prefer the < first,
++ data after way.
++
++
++-------------------------------------------------------------------------------
++* Porting and optimisation
++--------------------------
++This package should be trivial to port. There are only four non-R4RS bits
++in the code:
++- Use of multiple-value return, with the R5RS VALUES procedure, and the
++ simple (RECEIVE (var ...) mv-exp body ...) multiple-value binding macro.
++
++- A VECTOR-COPY procedure. This is a tiny little procedure:
++ (vector-copy v [start end])
++
++- Use of the LET-OPTIONALS macro from scsh to parse and default optional
++ arguments to three routines. Again, easy to port the macro or rewrite
++ the code to parse, default, and error check the args by hand.
++
++- Calls to an ERROR function for complaining about bad arguments.
++
++This code is tightly bummed, as far as I can go in portable Scheme.
++
++You could speed up the vector code a lot by error-checking the procedure
++parameters and then shifting over to fixnum-specific arithmetic and
++dangerous vector-indexing and vector-setting primitives. The comments
++in the code indicate where the initial error checks would have to be
++added. There are several (QUOTIENT N 2)'s that could be changed to a
++fixnum right-shift, as well, in both the list and vector code. The code
++is designed to enable this -- each file usually exports one or two "safe"
++procedures that end up calling an internal "dangerous" primitive. The
++little exported cover procedures are where you move the error checks.
++
++This should provide *big* speedups. In fact, all the code bumming I've done
++pretty much disappears in the noise unless you have a good compiler and also
++can dump the vector-index checks and generic arithmetic -- so I've really just
++set things up for you to exploit.
++
++The optional-arg parsing, defaulting, and error checking is done with a
++portable R4RS macro. But if your Scheme has a faster mechanism (e.g., Chez),
++you should definitely port over to it. Note that argument defaulting and
++error-checking are interleaved -- you don't have to error-check defaulted
++START/END args to see if they are fixnums that are legal vector indices for
++the corresponding vector, etc.
++
++
++-------------------------------------------------------------------------------
++* References & Links
++--------------------
++
++This document, in HTML:
++ http://srfi.schemers.org/srfi-32/srfi-32.html
++ [This link may not be valid while the SRFI is in draft form.]
++
++This document, in simple text format:
++ http://srfi.schemers.org/srfi-32/srfi-32.txt
++
++Archive of SRFI-32 discussion-list email:
++ http://srfi.schemers.org/srfi-32/mail-archive/maillist.html
++
++SRFI web site:
++ http://srfi.schemers.org/
++
++[CommonLisp]
++ Common Lisp: the Language
++ Guy L. Steele Jr. (editor).
++ Digital Press, Maynard, Mass., second edition 1990.
++ Available at http://www.elwood.com/alu/table/references.htm#cltl2
++
++ The Common Lisp "HyperSpec," produced by Kent Pitman, is essentially
++ the ANSI spec for Common Lisp:
++ http://www.xanalys.com/software_tools/reference/HyperSpec/
++
++[R5RS]
++ Revised^5 Report on the Algorithmic Language Scheme,
++ R. Kelsey, W. Clinger, J. Rees (editors).
++ Higher-Order and Symbolic Computation, Vol. 11, No. 1, September, 1998.
++ and ACM SIGPLAN Notices, Vol. 33, No. 9, October, 1998.
++
++ Available at http://www.schemers.org/Documents/Standards/
++
++
++-------------------------------------------------------------------------------
++* Acknowledgements
++------------------
++
++I thank the authors of the open source I consulted when designing this
++library, particularly Richard O'Keefe, Donovan Kolby and the MIT Scheme Team.
++
++
++-------------------------------------------------------------------------------
++* Copyright
++-----------
++
++** SRFI text
++============
++This document is copyright (C) Olin Shivers (1998, 1999).
++All Rights Reserved.
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++"Software"), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++** Reference implementation
++===========================
++Short summary: no restrictions.
++
++While I wrote all of this code myself, I read a lot of code before I began
++writing. However, all such code is, itself, either open source or public
++domain, rendering irrelevant any issue of "copyright taint."
++
++The natural merge sorts (pure list, destructive list, and vector) are not only
++my own code, but are implementations of an algorithm of my own devising. They
++run in O(n lg n) worst case, O(n) best case, and require only a logarithmic
++number of stack frames. And they are stable. And the destructive-list variant
++allocates zero cons cells; it simply rearranges the cells of the input list.
++
++Hence the reference implementation is
++ Copyright (c) 1998 by Olin Shivers.
++and made available under the same copyright as the SRFI text (see above).
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/%3a5/let.rkt racket-6.12/share/pkgs/srfi-lib/srfi/%3a5/let.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib/srfi/%3a5/let.rkt 2018-01-26 15:34:52.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib/srfi/%3a5/let.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1 +0,0 @@
+-#lang s-exp srfi/provider srfi/%3a5
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/%3a5.rkt racket-6.12/share/pkgs/srfi-lib/srfi/%3a5.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib/srfi/%3a5.rkt 2018-01-26 15:34:52.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib/srfi/%3a5.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,3 +0,0 @@
+-#lang s-exp srfi/provider srfi/5
+-
+-;; FIXME: "rest arguments" need to generate mutable lists
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/5/let.rkt racket-6.12/share/pkgs/srfi-lib/srfi/5/let.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib/srfi/5/let.rkt 2018-01-26 15:34:52.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib/srfi/5/let.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,86 +0,0 @@
+-;;;
+-;;; <let.rkt> ---- SRFI 5 A compatible let form with signatures and rest arguments
+-;;; Time-stamp: <03/04/08 09:56:06 solsona>
+-;;;
+-;;; Usually, I would add a copyright notice, and the announce that
+-;;; this code is under the LGPL licence. Nevertheless, I only did the
+-;;; port to PLT Scheme v200, and here is the copyright notice,
+-;;; comments, and licence from the original source:
+-;;;
+-;;; Copyright (C) Andy Gaynor (1999-2003)
+-;;;
+-;;; The version of my-let here was cleaned up by: Paul Schlie <schlie(a)attbi.com>.
+-;;; Renamed to s:let by Eli Barzilay
+-
+-#lang scheme/base
+-(provide s:let)
+-
+-(define-syntax s:let
+- (syntax-rules ()
+- ;; standard
+- ((s:let () body ...)
+- (let () body ...))
+- ((s:let ((var val) ...) body ...)
+- (let ((var val) ...) body ...))
+-
+- ;; rest style
+- ((s:let ((var val) . bindings) body ...)
+- (let-loop #f bindings (var) (val) (body ...)))
+-
+- ;; signature style
+- ((s:let (name bindings ...) body ...)
+- (let-loop name (bindings ...) () () (body ...)))
+-
+- ;; standard named style
+- ((s:let name (bindings ...) body ...)
+- (let-loop name (bindings ...) () () (body ...)))
+-
+- ))
+-
+-;; A loop to walk down the list of bindings.
+-
+-(define-syntax let-loop
+- (syntax-rules ()
+-
+- ;; No more bindings - make a LETREC.
+- ((let-loop name () (vars ...) (vals ...) body)
+- ((letrec ((name (lambda (vars ...) . body)))
+- name)
+- vals ...))
+-
+- ;; Rest binding, no name
+- ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
+- (let ((var val) ... (rest-var (list rest-val ...))) . body))
+-
+- ;; Process a (var val) pair.
+- ((let-loop name ((var val) more ...) (vars ...) (vals ...) body)
+- (let-loop name (more ...) (vars ... var) (vals ... val) body))
+-
+- ;; End with a rest variable - make a LETREC.
+- ((let-loop name (rest-var rest-vals ...) (vars ...) (vals ...) body)
+- ((letrec ((name (lambda (vars ... . rest-var) . body)))
+- name)
+- vals ... rest-vals ...))))
+-
+-;; Four loops - normal and `signature-style', each with and without a rest
+-;; binding.
+-;;
+-;;(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
+-;; (if (= i n)
+-;; f0
+-;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-;;
+-;;(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
+-;; (if (= i n)
+-;; f0
+-;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
+-;;
+-;;(let fibonacci ((n 10) (i 0) . (f 0 1))
+-;; (if (= i n)
+-;; (car f)
+-;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
+-;;
+-;;(let (fibonacci (n 10) (i 0) . (f 0 1))
+-;; (if (= i n)
+-;; (car f)
+-;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib/srfi/5.rkt racket-6.12/share/pkgs/srfi-lib/srfi/5.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib/srfi/5.rkt 2018-01-26 15:34:52.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib/srfi/5.rkt 1969-12-31 19:00:00.000000000 -0500
+@@ -1,2 +0,0 @@
+-;; module loader for SRFI-5
+-#lang s-exp srfi/provider srfi/5/let #:unprefix s:
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/info.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/info.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/info.rkt 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/info.rkt 2018-01-31 12:22:58.159501944 -0500
+@@ -0,0 +1,14 @@
++#lang info
++
++(define collection 'multi)
++
++(define deps '("scheme-lib"
++ "base"
++ "r6rs-lib"
++ "srfi-lib"
++ "compatibility-lib"))
++
++
++(define pkg-desc "implementation (no documentation) part of \"srfi nonfree\"")
++
++(define pkg-authors '(mflatt noel chongkai jay))
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5/let.rkt 2018-01-31 12:22:58.159501944 -0500
+@@ -0,0 +1 @@
++#lang s-exp srfi/provider srfi/%3a5
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/%3a5.rkt 2018-01-31 12:22:58.159501944 -0500
+@@ -0,0 +1,3 @@
++#lang s-exp srfi/provider srfi/5
++
++;; FIXME: "rest arguments" need to generate mutable lists
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5/let.rkt 2018-01-31 12:22:58.159501944 -0500
+@@ -0,0 +1,86 @@
++;;;
++;;; <let.rkt> ---- SRFI 5 A compatible let form with signatures and rest arguments
++;;; Time-stamp: <03/04/08 09:56:06 solsona>
++;;;
++;;; Usually, I would add a copyright notice, and the announce that
++;;; this code is under the LGPL licence. Nevertheless, I only did the
++;;; port to PLT Scheme v200, and here is the copyright notice,
++;;; comments, and licence from the original source:
++;;;
++;;; Copyright (C) Andy Gaynor (1999-2003)
++;;;
++;;; The version of my-let here was cleaned up by: Paul Schlie <schlie(a)attbi.com>.
++;;; Renamed to s:let by Eli Barzilay
++
++#lang scheme/base
++(provide s:let)
++
++(define-syntax s:let
++ (syntax-rules ()
++ ;; standard
++ ((s:let () body ...)
++ (let () body ...))
++ ((s:let ((var val) ...) body ...)
++ (let ((var val) ...) body ...))
++
++ ;; rest style
++ ((s:let ((var val) . bindings) body ...)
++ (let-loop #f bindings (var) (val) (body ...)))
++
++ ;; signature style
++ ((s:let (name bindings ...) body ...)
++ (let-loop name (bindings ...) () () (body ...)))
++
++ ;; standard named style
++ ((s:let name (bindings ...) body ...)
++ (let-loop name (bindings ...) () () (body ...)))
++
++ ))
++
++;; A loop to walk down the list of bindings.
++
++(define-syntax let-loop
++ (syntax-rules ()
++
++ ;; No more bindings - make a LETREC.
++ ((let-loop name () (vars ...) (vals ...) body)
++ ((letrec ((name (lambda (vars ...) . body)))
++ name)
++ vals ...))
++
++ ;; Rest binding, no name
++ ((let-loop #f (rest-var rest-val ...) (var ...) (val ...) body)
++ (let ((var val) ... (rest-var (list rest-val ...))) . body))
++
++ ;; Process a (var val) pair.
++ ((let-loop name ((var val) more ...) (vars ...) (vals ...) body)
++ (let-loop name (more ...) (vars ... var) (vals ... val) body))
++
++ ;; End with a rest variable - make a LETREC.
++ ((let-loop name (rest-var rest-vals ...) (vars ...) (vals ...) body)
++ ((letrec ((name (lambda (vars ... . rest-var) . body)))
++ name)
++ vals ... rest-vals ...))))
++
++;; Four loops - normal and `signature-style', each with and without a rest
++;; binding.
++;;
++;;(let fibonacci ((n 10) (i 0) (f0 0) (f1 1))
++;; (if (= i n)
++;; f0
++;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
++;;
++;;(let (fibonacci (n 10) (i 0) (f0 0) (f1 1))
++;; (if (= i n)
++;; f0
++;; (fibonacci n (+ i 1) f1 (+ f0 f1))))
++;;
++;;(let fibonacci ((n 10) (i 0) . (f 0 1))
++;; (if (= i n)
++;; (car f)
++;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
++;;
++;;(let (fibonacci (n 10) (i 0) . (f 0 1))
++;; (if (= i n)
++;; (car f)
++;; (fibonacci n (+ i 1) (cadr f) (+ (car f) (cadr f)))))
+diff -urN racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/5.rkt racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 1969-12-31 19:00:00.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lib-nonfree/srfi/5.rkt 2018-01-31 12:22:58.159501944 -0500
+@@ -0,0 +1,2 @@
++;; module loader for SRFI-5
++#lang s-exp srfi/provider srfi/5/let #:unprefix s:
+diff -urN racket-6.12-orig/share/pkgs/srfi-lite-lib/info.rkt racket-6.12/share/pkgs/srfi-lite-lib/info.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lite-lib/info.rkt 2018-01-26 16:10:04.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lite-lib/info.rkt 2018-01-31 12:22:58.160501940 -0500
+@@ -1 +1,9 @@
+-(module info setup/infotab (#%module-begin (define package-content-state (quote (built "6.12"))) (define collection (quote multi)) (define deps (quote ("base"))) (define pkg-desc "implementation of the most widely used \"srfi\" libraries") (define pkg-authors (quote (mflatt)))))
++#lang info
++
++(define collection 'multi)
++
++(define deps '("base"))
++
++(define pkg-desc "implementation of the most widely used \"srfi\" libraries")
++
++(define pkg-authors '(mflatt))
+Binary files racket-6.12-orig/share/pkgs/srfi-lite-lib/.info.rkt.swp and racket-6.12/share/pkgs/srfi-lite-lib/.info.rkt.swp differ
+diff -urN racket-6.12-orig/share/pkgs/srfi-lite-lib/srfi/29/localization.rkt racket-6.12/share/pkgs/srfi-lite-lib/srfi/29/localization.rkt
+--- racket-6.12-orig/share/pkgs/srfi-lite-lib/srfi/29/localization.rkt 2018-01-26 15:34:52.000000000 -0500
++++ racket-6.12/share/pkgs/srfi-lite-lib/srfi/29/localization.rkt 2018-01-31 12:22:58.162501933 -0500
+@@ -2,6 +2,7 @@
+
+ (require racket/contract/base
+ racket/file
++ racket/list
+ (only-in racket/runtime-path define-runtime-path)
+ racket/string racket/format
+ syntax/modread
+@@ -113,10 +114,6 @@
+ (lambda ()
+ (with-input-from-file path read))))
+ #t))))
+- (define (rdc ls)
+- (if (null? (cdr ls))
+- '()
+- (cons (car ls) (rdc (cdr ls)))))
+
+ ;;Retrieve a localized template given its package name and a template name
+ (define (localized-template package-name template-name)
+@@ -127,5 +124,5 @@
+ (let ((bundle (hash-ref *localization-bundles* specifier #f)))
+ (cond ((and bundle (assq template-name bundle)) => cdr)
+ ((null? (cdr specifier)) #f)
+- (else (loop (rdc specifier))))))))
++ (else (loop (drop-right specifier 1))))))))
+ )
diff --git a/racket.spec b/racket.spec
new file mode 100644
index 0000000..d3dc907
--- /dev/null
+++ b/racket.spec
@@ -0,0 +1,369 @@
+Name: racket
+Version: 6.12
+Release: 8%{?dist}
+Summary: General purpose programming language
+
+License: GPLv3 and LGPLv3 and MIT
+URL: https://racket-lang.org
+Source0: https://mirror.racket-lang.org/installers/%{version}/%{name}-%{version}-s...
+
+# Update SRFI libraries to include upstream PR 5.
+# See: https://github.com/racket/srfi/pull/5 (merged)
+Patch0: racket-6.12-update-srfi.patch
+
+# Remove SRFI library and docs with restrictive licensing.
+# See: https://github.com/racket/srfi/issues/4 (open)
+# Note: Upstream maintainers have confirmed this
+# is safe, since the removed components are
+# extra elements which nothing else in the
+# package depends on.
+Patch1: racket-6.12-remove-nonfree.patch
+
+# Backport upstream fix of rpaths in racket/racket
+# which break check-buildroot
+# https://github.com/racket/racket/pull/1947 (merged)
+Patch2: racket-6.12-fix-rpaths.patch
+
+# Backport upstream fix of rpaths in racket/web-server
+# which break check-buildroot
+# https://github.com/racket/web-server/issues/36 (closed)
+Patch3: racket-6.12-fix-webserver-rpaths.patch
+
+# Update racket-doc/search to use https://docs.racket-lang.org
+# when no docs exist locally
+# https://github.com/racket/scribble/pull/164 (open)
+Patch4: racket-6.12-fix-doc-open-url.patch
+
+# Issue Building for s390x and armv7hl in koji
+ExcludeArch: s390x armv7hl
+
+# To compile the program
+BuildRequires: gcc
+
+# To fix rpath issue with executables.
+BuildRequires: chrpath
+
+# Racket heavily utilizes the system ffi library.
+BuildRequires: libffi-devel
+
+# For the racket/gui library (via libffi)
+# https://github.com/racket/gui/blob/master/gui-lib/mred/private/wx/gtk/gtk...
+BuildRequires: gtk3
+
+# For the racket/draw library (via libffi)
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/ca...
+BuildRequires: cairo
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/pa...
+BuildRequires: pango
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/pn...
+BuildRequires: libpng
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/jp...
+BuildRequires: libjpeg-turbo
+# https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/gl...
+BuildRequires: glib2
+
+# To validate desktop file
+BuildRequires: desktop-file-utils
+
+BuildRequires: git
+
+# Require the subpackages
+Requires: racket-minimal%{?_isa} = %{version}-%{release}
+Requires: racket-pkgs = %{version}-%{release}
+
+%description
+Racket is a general-purpose programming language as well as
+the world's first ecosystem for developing and deploying new
+languages. Make your dream language, or use one of the dozens
+already available.
+
+%prep
+%autosetup -v -p1
+# Remove bundled libffi
+rm -r src/foreign/libffi
+
+%build
+cd src
+%configure \
+ --enable-pthread \
+ --enable-shared \
+ --enable-libffi \
+ --disable-strip
+%make_build
+
+%install
+cd src
+%make_install
+
+# Delete mred binaries and replace them with links.
+rm -vf ${RPM_BUILD_ROOT}%{_bindir}/mred
+rm -vf ${RPM_BUILD_ROOT}%{_bindir}/mred-text
+ln -vs %{_bindir}/gracket ${RPM_BUILD_ROOT}%{_bindir}/mred
+ln -vs %{_bindir}/gracket-text ${RPM_BUILD_ROOT}%{_bindir}/mred-text
+
+# Delete static library. Apperently --disable-libs does not stop it.
+rm -vf ${RPM_BUILD_ROOT}%{_libdir}/libracket3m.a
+
+# Delete duplicate license files
+rm -rf %{buildroot}%{_datadir}/racket/COPYING*txt
+
+# Fix the rpath error.
+chrpath --delete ${RPM_BUILD_ROOT}%{_bindir}/racket
+chrpath --delete ${RPM_BUILD_ROOT}%{_libdir}/racket/gracket
+
+# Remove the libtool files.
+rm -f ${RPM_BUILD_ROOT}%{_libdir}/*.la
+
+# Fix paths in the desktop files.
+sed -i "s#${RPM_BUILD_ROOT}##g" \
+ ${RPM_BUILD_ROOT}/%{_datadir}/applications/*.desktop
+
+# Validate desktop files
+desktop-file-validate %{buildroot}/%{_datadir}/applications/*.desktop
+
+# Fix paths in html docs
+DOCS_TO_FIX="
+syntax/module-helpers.html
+rackunit/api.html
+reference/collects.html"
+for i in $DOCS_TO_FIX; do
+ sed -i "s#${RPM_BUILD_ROOT}##g" \
+ ${RPM_BUILD_ROOT}/%{_datadir}/doc/racket/$i
+done
+
+chmod -x ${RPM_BUILD_ROOT}%{_libdir}/racket/starter-sh
+
+%ldconfig_scriptlets
+
+# Equivalent to upstream's minimal-racket release
+%package minimal
+Summary: A minimal Racket installation
+Requires: racket-collects = %{version}-%{release}
+%description minimal
+Racket's core runtime
+
+%package collects
+Summary: Racket's core collections libraries
+BuildArch: noarch
+%description collects
+Libraries providing Racket's core functionality
+
+# Arch independent source and bytecode files
+%package pkgs
+Summary: Racket package collections
+# See BuildRequires section for details on dependencies
+Requires: gtk3
+Requires: cairo
+Requires: pango
+Requires: libpng
+Requires: glib2
+Requires: libjpeg-turbo
+Requires: racket-minimal = %{version}-%{release}
+BuildArch: noarch
+%description pkgs
+Additional packages and libraries for Racket
+
+# Development headers and links
+%package devel
+Summary: Development files for Racket
+Requires: racket-minimal%{?_isa} = %{version}-%{release}
+%description devel
+Files needed to link against Racket.
+
+# HTML documentation
+%package doc
+Summary: Documentation files for Racket
+BuildArch: noarch
+%description doc
+A local installation of the Racket documentation system.
+
+%files
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_bindir}/drracket
+%{_bindir}/gracket
+%{_bindir}/gracket-text
+%{_bindir}/mred-text
+%{_bindir}/mred
+%{_bindir}/mzc
+%{_bindir}/mzpp
+%{_bindir}/mzscheme
+%{_bindir}/mztext
+%{_bindir}/pdf-slatex
+%{_bindir}/plt-games
+%{_bindir}/plt-help
+%{_bindir}/plt-r5rs
+%{_bindir}/plt-r6rs
+%{_bindir}/plt-web-server
+%{_bindir}/scribble
+%{_bindir}/setup-plt
+%{_bindir}/slatex
+%{_bindir}/slideshow
+%{_bindir}/swindle
+%{_datadir}/applications/
+
+%files collects
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_datadir}/racket/collects
+
+%files minimal
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_bindir}/racket
+%{_bindir}/raco
+%{_libdir}/racket
+%{_libdir}/libracket3m-%{version}.so
+%{_datadir}/racket/links.rktd
+%{_datadir}/racket/pkgs/racket-lib
+%{_datadir}/man/man1/racket*
+%{_datadir}/man/man1/raco*
+%dir %{_datadir}/racket
+%dir %{_sysconfdir}/racket/
+%config %{_sysconfdir}/racket/config.rktd
+%exclude %{_libdir}/libracket3m.so
+
+%files pkgs
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_datadir}/racket
+%{_datadir}/man/man1/drracket*
+%{_datadir}/man/man1/gracket*
+%{_datadir}/man/man1/mred*
+%{_datadir}/man/man1/mzc*
+%{_datadir}/man/man1/mzscheme*
+%{_datadir}/man/man1/plt-help*
+%{_datadir}/man/man1/setup-plt*
+%exclude %{_datadir}/racket/links.rktd
+%exclude %dir %{_datadir}/racket/pkgs/racket-lib
+%exclude %dir %{_datadir}/racket/collects
+
+%files devel
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_includedir}/racket
+%{_libdir}/libracket3m.so
+
+%files doc
+%license src/COPYING.txt src/COPYING_LESSER.txt src/COPYING-libscheme.txt
+%{_datadir}/doc/racket
+
+%changelog
+* Mon Jul 30 2018 David Benoit <dbenoit(a)redhat.com> 6.12-8
+- Annotate dependencies with links to source code
+- Move dependencies to racket-pkgs, since they are only used
+ by that subpackage
+- Update mred symbolic links
+- Fix ownership of directories
+- Remove executable bit from starter-sh
+
+* Thu Jul 12 2018 David Benoit <dbenoit(a)redhat.com> 6.12-7
+- Remove hardened build since it is enabled by default
+- Add gcc to BuildRequires
+- Remove wildcards from directory listings in files section
+
+* Fri Apr 13 2018 David Benoit <dbenoit(a)redhat.com> 6.12-6
+- Remove license wildcard and add license field to each subpackage
+
+* Fri Apr 6 2018 David Benoit <dbenoit(a)redhat.com> 6.12-5
+- remove update-database post scripts
+- move libracket3m.so link into -devel
+- add ldconfig_scriptlets after install
+- remove disable debug_package and configure
+ with --disable-strip instead
+- add license to files section and update
+ license header field
+- validate desktop files
+- change ownership of /etc/racket
+- update changelog with release info
+- use specific man directory man/man1/*
+- refactor racket into subpackages
+ racket-minimal, racket-collects, and racket-pkgs
+
+* Wed Apr 4 2018 David Benoit <dbenoit(a)redhat.com> 6.12-4
+- noarch -docs subpackage
+
+* Tue Mar 20 2018 David Benoit <dbenoit(a)redhat.com> 6.12-3
+- fix text encoding issue in description section
+- remove doc-open-url scriptlets
+- add scriptlet to fix paths in html docs
+- add patch2 to backport rpaths fix in compiled .zo files
+- add patch3 to backport rpaths fix in web-server-lib
+- add patch4 to configure doc open url dynamically at runtime
+- remove override of __arch_install_post to allow full
+ checking of buildroot.
+
+* Thu Feb 1 2018 David Benoit <dbenoit(a)redhat.com> - 6.12-2
+- Fix duplication of object files
+- Add version to racket-devel requirements
+- Remove base package as a dependency of racket-doc
+- Remove Groups tag
+
+* Wed Jan 31 2018 David Benoit <dbenoit(a)redhat.com> - 6.12-1
+- Update to current stable version
+- Add patch0 to update SRFIs to latest upstream
+- Add patch1 to remove nonfree SRFI components
+
+* Thu Oct 26 2017 David Benoit <dbenoit(a)redhat.com> - 6.10-1
+- Update to current stable version
+- Remove libedit readline patch (fixed upstream)
+- Break docs into separate package
+- Add scriptlets to set doc-open-url based on
+ whether docs are installed
+- Exclude armv7hl and s390x as target arches
+- Update description to match website
+- Change URLs to use https instead of http
+
+
+* Thu Jul 6 2017 David Benoit <dbenoit(a)redhat.com> - 6.9-1
+- Update to current stable version
+- Patch libedit readline error
+- Remove ExclusiveArch to test all builds in koji
+
+* Fri Jan 22 2016 Brandon Thomas <bthomaszx(a)gmail.com> - 6.3-1
+- Update to current stable version.
+- Updated description to match website.
+- Removed build requirement "racket-packaging".
+- Updated to gtk+3.
+- Let Autoprovides determine provides.
+- Debuginfo package is empty and preventing the package from building.
+- Removed uneeded file copies.
+- Remove possible extra static library.
+
+* Sun Dec 14 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.1.6-1
+- Update to current snapshot to fix match hash-table expander.
+
+* Mon Dec 01 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.1-1
+- Update to current stable version.
+
+* Fri Sep 05 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.5-4
+- Use racket-packaging to capture module dependencies.
+
+* Tue Aug 19 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.5-1
+- Updated to 6.1.0.5
+- Merged the -doc package back in.
+
+* Fri Aug 08 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.4-2
+- Do not alter .zo files, prevent check-buildroot from being run instead.
+
+* Thu Aug 07 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.4-1
+- Updated to 6.1.0.4
+- Split-off -doc package.
+
+* Fri Jul 25 2014 Jan Dvorak <mordae(a)anilinux.org> - 6.1.0.3-4
+- Updated to 6.1.0.3
+- Dropped the unnecessary static library.
+- Dropped mred programs to enable debug package.
+
+* Sat Jun 22 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.5-1
+- Changed to use 5.3.5 version of Racket.
+- Created static package for developers who may need static libraries.
+- Added RPM optimization options to CFLAGS for build.
+- Added macro to use SMP build options in make.
+
+* Thu May 16 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.4-1
+- Changed to use 5.3.4 version of Racket.
+
+* Tue May 14 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.3-3
+- Moved documentation to /usr/doc directory.
+
+* Mon May 13 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.3-2
+- Remove bundled libffi from racket before building program.
+
+* Thu May 9 2013 Daniel E. Wilson <danw(a)bureau-13.org> - 5.3.3-1
+- Initial Revision.
8 months, 3 weeks
Architecture specific change in rpms/rust-slog-async.git
by githook-noreply@fedoraproject.org
The package rpms/rust-slog-async.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-slog-async.git/commit/?id=7c....
Change:
-ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit dbfbcea0f2a47dc65782c8c2ebf3280287334dca
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Sun Aug 27 14:44:59 2023 +0200
Update to version 2.8.0; Fixes RHBZ#2235130
diff --git a/.gitignore b/.gitignore
index 3b77b49..696ee38 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/slog-async-2.5.0.crate
/slog-async-2.6.0.crate
/slog-async-2.7.0.crate
+/slog-async-2.8.0.crate
diff --git a/rust-slog-async.spec b/rust-slog-async.spec
index fd22f64..e193e34 100644
--- a/rust-slog-async.spec
+++ b/rust-slog-async.spec
@@ -5,7 +5,7 @@
%global crate slog-async
Name: rust-slog-async
-Version: 2.7.0
+Version: 2.8.0
Release: %autorelease
Summary: Asynchronous drain for slog-rs
diff --git a/sources b/sources
index 47f8226..83e159f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (slog-async-2.7.0.crate) = 2888c9dcf718d1dd0be787357fb0a2c0b9c3a6cd1de97a2f6b442721f0b0265a4820dac3fd8eac68902c2aee106b91d949287bddc8187347b1ef52c9f8e9e8c0
+SHA512 (slog-async-2.8.0.crate) = f62ad5e6696bfa86099c974d1f4c1d4151f07cd60b8a76ab89b3e6ab694128c0cc05b631106b8daf03ee477405bb9af73abdbbde0c8c5c8ced12571a78a2d8f4
commit 4a9149796a27895047aea528ace60ace06e83e49
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 21 23:39:41 2023 +0000
Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
commit 7c81f5d8fea56392aab773f2f5daa46043ef74af
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Wed Jun 7 21:51:38 2023 +0200
Regenerate with rust2rpm v24
diff --git a/README.md b/README.md
deleted file mode 100644
index 157cf68..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# rust-slog-async
-
-The rust-slog-async package
\ No newline at end of file
diff --git a/rust-slog-async.spec b/rust-slog-async.spec
index 15fd7f1..fd22f64 100644
--- a/rust-slog-async.spec
+++ b/rust-slog-async.spec
@@ -1,25 +1,19 @@
-# Generated by rust2rpm 18
+# Generated by rust2rpm 24
%bcond_without check
%global debug_package %{nil}
%global crate slog-async
-Name: rust-%{crate}
+Name: rust-slog-async
Version: 2.7.0
Release: %autorelease
Summary: Asynchronous drain for slog-rs
-# Upstream license specification: MPL-2.0 OR MIT OR Apache-2.0
-License: MPLv2.0 or MIT or ASL 2.0
+License: MPL-2.0 OR MIT OR Apache-2.0
URL: https://crates.io/crates/slog-async
Source: %{crates_source}
-ExclusiveArch: %{rust_arches}
-%if %{__cargo_skip_build}
-BuildArch: noarch
-%endif
-
-BuildRequires: rust-packaging
+BuildRequires: rust-packaging >= 21
%global _description %{expand:
Asynchronous drain for slog-rs.}
@@ -32,13 +26,16 @@ BuildArch: noarch
%description devel %{_description}
-This package contains library source intended for building other packages
-which use "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "%{crate}" crate.
%files devel
-%license LICENSE-APACHE LICENSE-MIT LICENSE-MPL2
-%doc README.md CHANGELOG.md
-%{cargo_registry}/%{crate}-%{version_no_tilde}/
+%license %{crate_instdir}/LICENSE-APACHE
+%license %{crate_instdir}/LICENSE-MIT
+%license %{crate_instdir}/LICENSE-MPL2
+%doc %{crate_instdir}/CHANGELOG.md
+%doc %{crate_instdir}/README.md
+%{crate_instdir}/
%package -n %{name}+default-devel
Summary: %{summary}
@@ -46,11 +43,11 @@ BuildArch: noarch
%description -n %{name}+default-devel %{_description}
-This package contains library source intended for building other packages
-which use "default" feature of "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "default" feature of the "%{crate}" crate.
%files -n %{name}+default-devel
-%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+%ghost %{crate_instdir}/Cargo.toml
%package -n %{name}+dynamic-keys-devel
Summary: %{summary}
@@ -58,11 +55,11 @@ BuildArch: noarch
%description -n %{name}+dynamic-keys-devel %{_description}
-This package contains library source intended for building other packages
-which use "dynamic-keys" feature of "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "dynamic-keys" feature of the "%{crate}" crate.
%files -n %{name}+dynamic-keys-devel
-%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+%ghost %{crate_instdir}/Cargo.toml
%package -n %{name}+nested-values-devel
Summary: %{summary}
@@ -70,11 +67,11 @@ BuildArch: noarch
%description -n %{name}+nested-values-devel %{_description}
-This package contains library source intended for building other packages
-which use "nested-values" feature of "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "nested-values" feature of the "%{crate}" crate.
%files -n %{name}+nested-values-devel
-%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+%ghost %{crate_instdir}/Cargo.toml
%prep
%autosetup -n %{crate}-%{version_no_tilde} -p1
commit 97dd9900bf95a89413e32d96bf3922f9fa9e8918
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Jan 21 01:29:14 2023 +0000
Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
8 months, 3 weeks
Architecture specific change in rpms/rust-tokio-test.git
by githook-noreply@fedoraproject.org
The package rpms/rust-tokio-test.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-tokio-test.git/commit/?id=98....
Change:
-ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit 5441aa7914c22f77e91230038010f06f0c8178b4
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Sun Aug 27 13:45:05 2023 +0200
Update to version 0.4.3; Fixes RHBZ#2233780
diff --git a/.gitignore b/.gitignore
index 8d2955b..cb8578a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
/tokio-test-0.2.0.crate
/tokio-test-0.2.1.crate
/tokio-test-0.4.2.crate
+/tokio-test-0.4.3.crate
diff --git a/rust-tokio-test.spec b/rust-tokio-test.spec
index f612513..f5adb73 100644
--- a/rust-tokio-test.spec
+++ b/rust-tokio-test.spec
@@ -5,7 +5,7 @@
%global crate tokio-test
Name: rust-tokio-test
-Version: 0.4.2
+Version: 0.4.3
Release: %autorelease
Summary: Testing utilities for Tokio- and futures-based code
diff --git a/sources b/sources
index 8a699ea..8aee10f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (tokio-test-0.4.2.crate) = 1c8550d64b7240c55dec935dbe70405214b9e6601e0c59934804bdfed20341ccd1fd0e2f51cda5f8041fc7c37c166aad5aa0cf4b224bb5a7335fc5d8fbfa1b8e
+SHA512 (tokio-test-0.4.3.crate) = 31369fcf4ae64121f9b695bb2db75426bbfd135279e5559517d6419d44eb6185b8b98ee8020094a29b4d2dff0e799fad42cd310593236f94b57dc43f01ed7bb6
commit 890c5c579dbe9a13b0f141555df4b3aa741b1abc
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Jul 22 00:10:42 2023 +0000
Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
commit 986124a4d6c5225b1b2bba664f0a5dcae2901024
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Mon May 22 20:28:13 2023 +0200
Regenerate with rust2rpm v24
diff --git a/README.md b/README.md
deleted file mode 100644
index 64168cd..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# rust-tokio-test
-
-The rust-tokio-test package
\ No newline at end of file
diff --git a/rust-tokio-test.spec b/rust-tokio-test.spec
index 6b80738..f612513 100644
--- a/rust-tokio-test.spec
+++ b/rust-tokio-test.spec
@@ -1,25 +1,19 @@
-# Generated by rust2rpm 17
+# Generated by rust2rpm 24
%bcond_without check
%global debug_package %{nil}
%global crate tokio-test
-Name: rust-%{crate}
+Name: rust-tokio-test
Version: 0.4.2
Release: %autorelease
Summary: Testing utilities for Tokio- and futures-based code
-# Upstream license specification: MIT
License: MIT
URL: https://crates.io/crates/tokio-test
Source: %{crates_source}
-ExclusiveArch: %{rust_arches}
-%if %{__cargo_skip_build}
-BuildArch: noarch
-%endif
-
-BuildRequires: rust-packaging
+BuildRequires: rust-packaging >= 21
%global _description %{expand:
Testing utilities for Tokio- and futures-based code.}
@@ -32,13 +26,14 @@ BuildArch: noarch
%description devel %{_description}
-This package contains library source intended for building other packages
-which use "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "%{crate}" crate.
%files devel
-%license LICENSE
-%doc README.md CHANGELOG.md
-%{cargo_registry}/%{crate}-%{version_no_tilde}/
+%license %{crate_instdir}/LICENSE
+%doc %{crate_instdir}/CHANGELOG.md
+%doc %{crate_instdir}/README.md
+%{crate_instdir}/
%package -n %{name}+default-devel
Summary: %{summary}
@@ -46,11 +41,11 @@ BuildArch: noarch
%description -n %{name}+default-devel %{_description}
-This package contains library source intended for building other packages
-which use "default" feature of "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "default" feature of the "%{crate}" crate.
%files -n %{name}+default-devel
-%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+%ghost %{crate_instdir}/Cargo.toml
%prep
%autosetup -n %{crate}-%{version_no_tilde} -p1
commit aa62c4d7829b5c36ac18a8348a5ea3a43becf49a
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Mon May 22 20:24:19 2023 +0200
Convert to %autorelease and %autochangelog
[skip changelog]
diff --git a/changelog b/changelog
new file mode 100644
index 0000000..d0de357
--- /dev/null
+++ b/changelog
@@ -0,0 +1,29 @@
+* Sat Jan 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Sat Jul 23 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Fri Jan 21 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Wed Jun 16 2021 Fabio Valentini <decathorpe(a)gmail.com> - 0.4.2-1
+- Update to version 0.4.2.
+
+* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Fri Apr 17 2020 Josh Stone <jistone(a)redhat.com> - 0.2.1-1
+- Update to 0.2.1
+
+* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Fri Dec 13 21:46:41 CET 2019 Robert-André Mauchin <zebob.m(a)gmail.com> - 0.2.0-1
+- Initial package
diff --git a/rust-tokio-test.spec b/rust-tokio-test.spec
index 6ba39c0..6b80738 100644
--- a/rust-tokio-test.spec
+++ b/rust-tokio-test.spec
@@ -6,7 +6,7 @@
Name: rust-%{crate}
Version: 0.4.2
-Release: 5%{?dist}
+Release: %autorelease
Summary: Testing utilities for Tokio- and futures-based code
# Upstream license specification: MIT
@@ -71,32 +71,4 @@ which use "default" feature of "%{crate}" crate.
%endif
%changelog
-* Sat Jan 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
-
-* Sat Jul 23 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
-
-* Fri Jan 21 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
-
-* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
-
-* Wed Jun 16 2021 Fabio Valentini <decathorpe(a)gmail.com> - 0.4.2-1
-- Update to version 0.4.2.
-
-* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.1-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
-
-* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.1-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
-
-* Fri Apr 17 2020 Josh Stone <jistone(a)redhat.com> - 0.2.1-1
-- Update to 0.2.1
-
-* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.0-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
-
-* Fri Dec 13 21:46:41 CET 2019 Robert-André Mauchin <zebob.m(a)gmail.com> - 0.2.0-1
-- Initial package
+%autochangelog
commit cfc431ae43a03a7c714c6dd4c962a0102f52976f
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Jan 21 01:53:54 2023 +0000
Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/rust-tokio-test.spec b/rust-tokio-test.spec
index 017ddbc..6ba39c0 100644
--- a/rust-tokio-test.spec
+++ b/rust-tokio-test.spec
@@ -6,7 +6,7 @@
Name: rust-%{crate}
Version: 0.4.2
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Testing utilities for Tokio- and futures-based code
# Upstream license specification: MIT
@@ -71,6 +71,9 @@ which use "default" feature of "%{crate}" crate.
%endif
%changelog
+* Sat Jan 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
* Sat Jul 23 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
8 months, 3 weeks
Architecture specific change in rpms/rust-slog-async.git
by githook-noreply@fedoraproject.org
The package rpms/rust-slog-async.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-slog-async.git/commit/?id=7c....
Change:
-ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit dbfbcea0f2a47dc65782c8c2ebf3280287334dca
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Sun Aug 27 14:44:59 2023 +0200
Update to version 2.8.0; Fixes RHBZ#2235130
diff --git a/.gitignore b/.gitignore
index 3b77b49..696ee38 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/slog-async-2.5.0.crate
/slog-async-2.6.0.crate
/slog-async-2.7.0.crate
+/slog-async-2.8.0.crate
diff --git a/rust-slog-async.spec b/rust-slog-async.spec
index fd22f64..e193e34 100644
--- a/rust-slog-async.spec
+++ b/rust-slog-async.spec
@@ -5,7 +5,7 @@
%global crate slog-async
Name: rust-slog-async
-Version: 2.7.0
+Version: 2.8.0
Release: %autorelease
Summary: Asynchronous drain for slog-rs
diff --git a/sources b/sources
index 47f8226..83e159f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (slog-async-2.7.0.crate) = 2888c9dcf718d1dd0be787357fb0a2c0b9c3a6cd1de97a2f6b442721f0b0265a4820dac3fd8eac68902c2aee106b91d949287bddc8187347b1ef52c9f8e9e8c0
+SHA512 (slog-async-2.8.0.crate) = f62ad5e6696bfa86099c974d1f4c1d4151f07cd60b8a76ab89b3e6ab694128c0cc05b631106b8daf03ee477405bb9af73abdbbde0c8c5c8ced12571a78a2d8f4
commit 4a9149796a27895047aea528ace60ace06e83e49
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 21 23:39:41 2023 +0000
Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
commit 7c81f5d8fea56392aab773f2f5daa46043ef74af
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Wed Jun 7 21:51:38 2023 +0200
Regenerate with rust2rpm v24
diff --git a/README.md b/README.md
deleted file mode 100644
index 157cf68..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# rust-slog-async
-
-The rust-slog-async package
\ No newline at end of file
diff --git a/rust-slog-async.spec b/rust-slog-async.spec
index 15fd7f1..fd22f64 100644
--- a/rust-slog-async.spec
+++ b/rust-slog-async.spec
@@ -1,25 +1,19 @@
-# Generated by rust2rpm 18
+# Generated by rust2rpm 24
%bcond_without check
%global debug_package %{nil}
%global crate slog-async
-Name: rust-%{crate}
+Name: rust-slog-async
Version: 2.7.0
Release: %autorelease
Summary: Asynchronous drain for slog-rs
-# Upstream license specification: MPL-2.0 OR MIT OR Apache-2.0
-License: MPLv2.0 or MIT or ASL 2.0
+License: MPL-2.0 OR MIT OR Apache-2.0
URL: https://crates.io/crates/slog-async
Source: %{crates_source}
-ExclusiveArch: %{rust_arches}
-%if %{__cargo_skip_build}
-BuildArch: noarch
-%endif
-
-BuildRequires: rust-packaging
+BuildRequires: rust-packaging >= 21
%global _description %{expand:
Asynchronous drain for slog-rs.}
@@ -32,13 +26,16 @@ BuildArch: noarch
%description devel %{_description}
-This package contains library source intended for building other packages
-which use "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "%{crate}" crate.
%files devel
-%license LICENSE-APACHE LICENSE-MIT LICENSE-MPL2
-%doc README.md CHANGELOG.md
-%{cargo_registry}/%{crate}-%{version_no_tilde}/
+%license %{crate_instdir}/LICENSE-APACHE
+%license %{crate_instdir}/LICENSE-MIT
+%license %{crate_instdir}/LICENSE-MPL2
+%doc %{crate_instdir}/CHANGELOG.md
+%doc %{crate_instdir}/README.md
+%{crate_instdir}/
%package -n %{name}+default-devel
Summary: %{summary}
@@ -46,11 +43,11 @@ BuildArch: noarch
%description -n %{name}+default-devel %{_description}
-This package contains library source intended for building other packages
-which use "default" feature of "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "default" feature of the "%{crate}" crate.
%files -n %{name}+default-devel
-%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+%ghost %{crate_instdir}/Cargo.toml
%package -n %{name}+dynamic-keys-devel
Summary: %{summary}
@@ -58,11 +55,11 @@ BuildArch: noarch
%description -n %{name}+dynamic-keys-devel %{_description}
-This package contains library source intended for building other packages
-which use "dynamic-keys" feature of "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "dynamic-keys" feature of the "%{crate}" crate.
%files -n %{name}+dynamic-keys-devel
-%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+%ghost %{crate_instdir}/Cargo.toml
%package -n %{name}+nested-values-devel
Summary: %{summary}
@@ -70,11 +67,11 @@ BuildArch: noarch
%description -n %{name}+nested-values-devel %{_description}
-This package contains library source intended for building other packages
-which use "nested-values" feature of "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "nested-values" feature of the "%{crate}" crate.
%files -n %{name}+nested-values-devel
-%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+%ghost %{crate_instdir}/Cargo.toml
%prep
%autosetup -n %{crate}-%{version_no_tilde} -p1
8 months, 3 weeks
Architecture specific change in rpms/rust-tokio-test.git
by githook-noreply@fedoraproject.org
The package rpms/rust-tokio-test.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-tokio-test.git/commit/?id=98....
Change:
-ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit 5441aa7914c22f77e91230038010f06f0c8178b4
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Sun Aug 27 13:45:05 2023 +0200
Update to version 0.4.3; Fixes RHBZ#2233780
diff --git a/.gitignore b/.gitignore
index 8d2955b..cb8578a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
/tokio-test-0.2.0.crate
/tokio-test-0.2.1.crate
/tokio-test-0.4.2.crate
+/tokio-test-0.4.3.crate
diff --git a/rust-tokio-test.spec b/rust-tokio-test.spec
index f612513..f5adb73 100644
--- a/rust-tokio-test.spec
+++ b/rust-tokio-test.spec
@@ -5,7 +5,7 @@
%global crate tokio-test
Name: rust-tokio-test
-Version: 0.4.2
+Version: 0.4.3
Release: %autorelease
Summary: Testing utilities for Tokio- and futures-based code
diff --git a/sources b/sources
index 8a699ea..8aee10f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (tokio-test-0.4.2.crate) = 1c8550d64b7240c55dec935dbe70405214b9e6601e0c59934804bdfed20341ccd1fd0e2f51cda5f8041fc7c37c166aad5aa0cf4b224bb5a7335fc5d8fbfa1b8e
+SHA512 (tokio-test-0.4.3.crate) = 31369fcf4ae64121f9b695bb2db75426bbfd135279e5559517d6419d44eb6185b8b98ee8020094a29b4d2dff0e799fad42cd310593236f94b57dc43f01ed7bb6
commit 890c5c579dbe9a13b0f141555df4b3aa741b1abc
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Jul 22 00:10:42 2023 +0000
Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
commit 986124a4d6c5225b1b2bba664f0a5dcae2901024
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Mon May 22 20:28:13 2023 +0200
Regenerate with rust2rpm v24
diff --git a/README.md b/README.md
deleted file mode 100644
index 64168cd..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# rust-tokio-test
-
-The rust-tokio-test package
\ No newline at end of file
diff --git a/rust-tokio-test.spec b/rust-tokio-test.spec
index 6b80738..f612513 100644
--- a/rust-tokio-test.spec
+++ b/rust-tokio-test.spec
@@ -1,25 +1,19 @@
-# Generated by rust2rpm 17
+# Generated by rust2rpm 24
%bcond_without check
%global debug_package %{nil}
%global crate tokio-test
-Name: rust-%{crate}
+Name: rust-tokio-test
Version: 0.4.2
Release: %autorelease
Summary: Testing utilities for Tokio- and futures-based code
-# Upstream license specification: MIT
License: MIT
URL: https://crates.io/crates/tokio-test
Source: %{crates_source}
-ExclusiveArch: %{rust_arches}
-%if %{__cargo_skip_build}
-BuildArch: noarch
-%endif
-
-BuildRequires: rust-packaging
+BuildRequires: rust-packaging >= 21
%global _description %{expand:
Testing utilities for Tokio- and futures-based code.}
@@ -32,13 +26,14 @@ BuildArch: noarch
%description devel %{_description}
-This package contains library source intended for building other packages
-which use "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "%{crate}" crate.
%files devel
-%license LICENSE
-%doc README.md CHANGELOG.md
-%{cargo_registry}/%{crate}-%{version_no_tilde}/
+%license %{crate_instdir}/LICENSE
+%doc %{crate_instdir}/CHANGELOG.md
+%doc %{crate_instdir}/README.md
+%{crate_instdir}/
%package -n %{name}+default-devel
Summary: %{summary}
@@ -46,11 +41,11 @@ BuildArch: noarch
%description -n %{name}+default-devel %{_description}
-This package contains library source intended for building other packages
-which use "default" feature of "%{crate}" crate.
+This package contains library source intended for building other packages which
+use the "default" feature of the "%{crate}" crate.
%files -n %{name}+default-devel
-%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+%ghost %{crate_instdir}/Cargo.toml
%prep
%autosetup -n %{crate}-%{version_no_tilde} -p1
commit aa62c4d7829b5c36ac18a8348a5ea3a43becf49a
Author: Fabio Valentini <decathorpe(a)gmail.com>
Date: Mon May 22 20:24:19 2023 +0200
Convert to %autorelease and %autochangelog
[skip changelog]
diff --git a/changelog b/changelog
new file mode 100644
index 0000000..d0de357
--- /dev/null
+++ b/changelog
@@ -0,0 +1,29 @@
+* Sat Jan 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Sat Jul 23 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Fri Jan 21 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Wed Jun 16 2021 Fabio Valentini <decathorpe(a)gmail.com> - 0.4.2-1
+- Update to version 0.4.2.
+
+* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Fri Apr 17 2020 Josh Stone <jistone(a)redhat.com> - 0.2.1-1
+- Update to 0.2.1
+
+* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Fri Dec 13 21:46:41 CET 2019 Robert-André Mauchin <zebob.m(a)gmail.com> - 0.2.0-1
+- Initial package
diff --git a/rust-tokio-test.spec b/rust-tokio-test.spec
index 6ba39c0..6b80738 100644
--- a/rust-tokio-test.spec
+++ b/rust-tokio-test.spec
@@ -6,7 +6,7 @@
Name: rust-%{crate}
Version: 0.4.2
-Release: 5%{?dist}
+Release: %autorelease
Summary: Testing utilities for Tokio- and futures-based code
# Upstream license specification: MIT
@@ -71,32 +71,4 @@ which use "default" feature of "%{crate}" crate.
%endif
%changelog
-* Sat Jan 21 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
-
-* Sat Jul 23 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-4
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
-
-* Fri Jan 21 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
-
-* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.4.2-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
-
-* Wed Jun 16 2021 Fabio Valentini <decathorpe(a)gmail.com> - 0.4.2-1
-- Update to version 0.4.2.
-
-* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.1-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
-
-* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.1-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
-
-* Fri Apr 17 2020 Josh Stone <jistone(a)redhat.com> - 0.2.1-1
-- Update to 0.2.1
-
-* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.2.0-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
-
-* Fri Dec 13 21:46:41 CET 2019 Robert-André Mauchin <zebob.m(a)gmail.com> - 0.2.0-1
-- Initial package
+%autochangelog
8 months, 3 weeks
[Report] Packages Restricting Arches
by root
List of packages currently excluding arches (1153)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- 90-Second-Portraits
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- BareBonesBrowserLaunch
ExclusiveArch: %{java_arches} noarch
- CFR
ExclusiveArch: %{java_arches} noarch
- CardManager
ExclusiveArch: %{java_arches} noarch
- GAPDoc
ExclusiveArch: %{gap_arches} noarch
- GoldenCheetah
ExclusiveArch: %{qt5_qtwebengine_arches}
- GtkAda
ExclusiveArch: %{GPRbuild_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- IPAddress
ExclusiveArch: %{java_arches} noarch
- Mars
ExclusiveArch: %{java_arches} noarch
- OpenColorIO
ExclusiveArch: x86_64 ppc64le
- OpenImageIO
ExclusiveArch: x86_64 ppc64le
- OpenMolcas
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- OpenStego
ExclusiveArch: %{java_arches} noarch
- PragmARC
ExclusiveArch: %{GPRbuild_arches}
- R-V8
ExclusiveArch: %{nodejs_arches}
- R-rJava
ExclusiveArch: %{java_arches}
- RdRand
ExclusiveArch: %{ix86} x86_64
- RediSearch
ExclusiveArch: x86_64
- SLOF
ExclusiveArch: ppc64le
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aardvark-dns
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- accel-config
ExclusiveArch: %{ix86} x86_64
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GPRbuild_arches}
- algobox
ExclusiveArch: %{qt5_qtwebengine_arches}
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64 s390x
- anet
ExclusiveArch: %{GPRbuild_arches}
- ant
ExclusiveArch: %{java_arches} noarch
- ant-antunit
ExclusiveArch: %{java_arches} noarch
- ant-contrib
ExclusiveArch: %{java_arches} noarch
- antlr
ExclusiveArch: %{java_arches}
- antlr-maven-plugin
ExclusiveArch: %{java_arches} noarch
- antlr3
ExclusiveArch: %{java_arches}
- antlr4-project
ExclusiveArch: %{java_arches}
- antlrworks
ExclusiveArch: %{java_arches} noarch
- aopalliance
ExclusiveArch: %{java_arches} noarch
- apache-commons-beanutils
ExclusiveArch: %{java_arches} noarch
- apache-commons-cli
ExclusiveArch: %{java_arches} noarch
- apache-commons-codec
ExclusiveArch: %{java_arches} noarch
- apache-commons-collections
ExclusiveArch: %{java_arches} noarch
- apache-commons-collections4
ExclusiveArch: %{java_arches} noarch
- apache-commons-compress
ExclusiveArch: %{java_arches} noarch
- apache-commons-configuration
ExclusiveArch: %{java_arches} noarch
- apache-commons-digester
ExclusiveArch: %{java_arches} noarch
- apache-commons-exec
ExclusiveArch: %{java_arches} noarch
- apache-commons-io
ExclusiveArch: %{java_arches} noarch
- apache-commons-jexl
ExclusiveArch: %{java_arches} noarch
- apache-commons-jxpath
ExclusiveArch: %{java_arches} noarch
- apache-commons-lang3
ExclusiveArch: %{java_arches} noarch
- apache-commons-logging
ExclusiveArch: %{java_arches} noarch
- apache-commons-math
ExclusiveArch: %{java_arches} noarch
- apache-commons-modeler
ExclusiveArch: %{java_arches} noarch
- apache-commons-net
ExclusiveArch: %{java_arches} noarch
- apache-commons-parent
ExclusiveArch: %{java_arches} noarch
- apache-commons-pool
ExclusiveArch: %{java_arches} noarch
- apache-commons-vfs
ExclusiveArch: %{java_arches} noarch
- apache-ivy
ExclusiveArch: %{java_arches} noarch
- apache-parent
ExclusiveArch: %{java_arches} noarch
- apache-resource-bundles
ExclusiveArch: %{java_arches} noarch
- apache-sshd
ExclusiveArch: %{java_arches} noarch
- apiguardian
ExclusiveArch: %{java_arches} noarch
- apmd
ExclusiveArch: %{ix86}
- appstream-generator
ExclusiveArch: %{ldc_arches}
- aqute-bnd
ExclusiveArch: %{java_arches} noarch
- args4j
ExclusiveArch: %{java_arches} noarch
- arianna
ExclusiveArch: %{qt5_qtwebengine_arches}
- arm-trusted-firmware
ExclusiveArch: aarch64
- assertj-core
ExclusiveArch: %{java_arches} noarch
- atinject
ExclusiveArch: %{java_arches} noarch
- aunit
ExclusiveArch: %GPRbuild_arches
- auto
ExclusiveArch: %{java_arches} noarch
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- azure-cli
ExclusiveArch: %{java_arches} noarch
- batik
ExclusiveArch: %{java_arches} noarch
- bcal
ExclusiveArch: x86_64 aarch64 ia64 ppc64 ppc64le s390x
- bcc
ExclusiveArch: x86_64 %{power64} aarch64 s390x armv7hl
- bcel
ExclusiveArch: %{java_arches} noarch
- bcm283x-firmware
ExclusiveArch: aarch64
- beansbinding
ExclusiveArch: %{java_arches} noarch
- belle-sip
ExclusiveArch: %{java_arches}
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- beust-jcommander
ExclusiveArch: %{java_arches} noarch
- bibletime
ExclusiveArch: %{java_arches}
- biosdevname
ExclusiveArch: %{ix86} x86_64
- bless
ExclusiveArch: %mono_arches
- bodhi-server
ExclusiveArch: %{golang_arches_future}
- bolzplatz2006
ExclusiveArch: %{java_arches}
- bouncycastle
ExclusiveArch: %{java_arches} noarch
- box64
ExclusiveArch: aarch64 ppc64le x86_64
- bpftrace
ExclusiveArch: x86_64 %{power64} aarch64 s390x
- brazil
ExclusiveArch: %{java_arches} noarch
- bsf
ExclusiveArch: %{java_arches} noarch
- bsh
ExclusiveArch: %{java_arches} noarch
- build-helper-maven-plugin
ExclusiveArch: %{java_arches} noarch
- buildah
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- byte-buddy
ExclusiveArch: %{java_arches} noarch
- byteman
ExclusiveArch: %{java_arches} noarch
- cachelib
ExclusiveArch: x86_64 aarch64 ppc64le
- caddy
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: %{golang_arches}
- calamares
ExclusiveArch: %{ix86} x86_64 aarch64
- calibre
ExclusiveArch: aarch64 x86_64
- cambozola
ExclusiveArch: %{java_arches} noarch
- canl-java
ExclusiveArch: %{java_arches} noarch
- catatonit
ExclusiveArch: aarch64 ppc64le s390x x86_64
ExclusiveArch: %{golang_arches_future}
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- cdi-api
ExclusiveArch: %{java_arches} noarch
- ceph
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- cglib
ExclusiveArch: %{java_arches} noarch
- chromium
ExclusiveArch: x86_64
ExclusiveArch: x86_64 aarch64
ExclusiveArch: x86_64 aarch64
- cjdns
ExclusiveArch: %{nodejs_arches}
- classloader-leak-test-framework
ExclusiveArch: %{java_arches} noarch
- classpathless-compiler
ExclusiveArch: %{java_arches} noarch
- clevis-pin-tpm2
ExclusiveArch: %{rust_arches}
- clojure
ExclusiveArch: %{java_arches} noarch
- clojure-core-specs-alpha
ExclusiveArch: %{java_arches} noarch
- clojure-maven-plugin
ExclusiveArch: %{java_arches} noarch
- clojure-spec-alpha
ExclusiveArch: %{java_arches} noarch
- cmospwd
ExclusiveArch: %{ix86} x86_64
- cmrt
ExclusiveArch: %{ix86} x86_64 ia64
- codehaus-parent
ExclusiveArch: %{java_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- colossus
ExclusiveArch: %{java_arches} noarch
- conmon
ExclusiveArch: %{golang_arches_future}
- console-image-viewer
ExclusiveArch: %{java_arches} noarch
- containernetworking-plugins
ExclusiveArch: %{golang_arches}
- coq
ExclusiveArch: %{ocaml_native_compiler}
- cortado
ExclusiveArch: %{java_arches} noarch
- cpu-x
ExclusiveArch: i686 x86_64
- cpufetch
ExclusiveArch: %{arm} aarch64 x86_64 ppc ppc64 ppc64le
- cpuid
ExclusiveArch: %{ix86} x86_64
- cpuinfo
ExclusiveArch: x86_64 aarch64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- crash-gcore-command
ExclusiveArch: aarch64 ppc64le x86_64
- crash-trace-command
ExclusiveArch: aarch64 ppc64le s390x x86_64
- credentials-fetcher
ExclusiveArch: x86_64 aarch64 s390x
- cri-o
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- cri-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- crun
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le riscv64 s390x x86_64
- cryptlib
ExclusiveArch: x86_64 aarch64 ppc64le
- crypto-policies
ExclusiveArch: %{java_arches} noarch
- cryptobone
ExclusiveArch: x86_64 ppc64le aarch64
- csslint
ExclusiveArch: %{nodejs_arches} noarch
- cvc5
ExclusiveArch: %{java_arches}
- daq
ExclusiveArch: x86_64 aarch64
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- decentxml
ExclusiveArch: %{java_arches} noarch
- deepin-daemon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- deepin-desktop-schemas
ExclusiveArch: %{go_arches}
- directory-maven-plugin
ExclusiveArch: %{java_arches} noarch
- dirgra
ExclusiveArch: %{java_arches} noarch
- disruptor
ExclusiveArch: %{java_arches} noarch
- ditaa
ExclusiveArch: %{java_arches} noarch
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- dmtcp
ExclusiveArch: x86_64
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dogtag-pki
ExclusiveArch: %{java_arches}
- dolphin-emu
ExclusiveArch: x86_64 aarch64
- dom4j
ExclusiveArch: %{java_arches} noarch
- dotnet6.0
ExclusiveArch: aarch64 x86_64 s390x
ExclusiveArch: x86_64
- dotnet7.0
ExclusiveArch: aarch64 ppc64le s390x x86_64
ExclusiveArch: x86_64
- doublecmd
ExclusiveArch: %{ix86} x86_64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dub
ExclusiveArch: %{ldc_arches}
- dxvk-native
ExclusiveArch: %{ix86} x86_64
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
- e3
ExclusiveArch: %{ix86} x86_64
- easymock
ExclusiveArch: %{java_arches} noarch
- ecj
ExclusiveArch: %{java_arches} noarch
- eclipse-swt
ExclusiveArch: %{java_arches}
- ed25519-java
ExclusiveArch: %{java_arches} noarch
- edk2
ExclusiveArch: x86_64 aarch64
- efibootmgr
ExclusiveArch: %{efi}
- efifs
ExclusiveArch: %{efi}
- efitools
ExclusiveArch: %{efi}
- efivar
ExclusiveArch: %{efi}
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- emacs-slime
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- embree
ExclusiveArch: aarch64 x86_64
- embree3
ExclusiveArch: aarch64 x86_64
- enjarify
ExclusiveArch: %{java_arches} noarch
- enki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- eric
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- erlang-corba
ExclusiveArch: %{java_arches}
- esmi_ib_library
ExclusiveArch: x86_64
- eth-tools
ExclusiveArch: x86_64
- exec-maven-plugin
ExclusiveArch: %{java_arches} noarch
- external-editor-revived
ExclusiveArch: %{rust_arches}
- extra-enforcer-rules
ExclusiveArch: %{java_arches} noarch
- fasterxml-oss-parent
ExclusiveArch: %{java_arches} noarch
- fb303
ExclusiveArch: x86_64 aarch64 ppc64le
- fbthrift
ExclusiveArch: x86_64 aarch64 ppc64le
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- felix-parent
ExclusiveArch: %{java_arches} noarch
- felix-utils
ExclusiveArch: %{java_arches} noarch
- fernflower
ExclusiveArch: %{java_arches} noarch
- fes
ExclusiveArch: %{ix86} x86_64
- filedrop
ExclusiveArch: %{java_arches} noarch
- firecracker
ExclusiveArch: aarch64 x86_64
- fishbowl
ExclusiveArch: %{java_arches} noarch
- fizz
ExclusiveArch: x86_64 aarch64 ppc64le
- flocq
ExclusiveArch: %{ocaml_native_compiler}
- florist
ExclusiveArch: %{GPRbuild_arches}
- fluent-bit
ExclusiveArch: x86_64 aarch64
- flute
ExclusiveArch: %{java_arches} noarch
- folly
ExclusiveArch: x86_64 aarch64 ppc64le
- fop
ExclusiveArch: %{java_arches} noarch
- forge-parent
ExclusiveArch: %{java_arches} noarch
- fpc
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64 ppc64le
- frama-c
ExclusiveArch: %{ocaml_native_compiler}
- freecol
ExclusiveArch: %{java_arches} noarch
- freemarker
ExclusiveArch: %{java_arches} noarch
- freerouting
ExclusiveArch: %{java_arches} noarch
- frescobaldi
ExclusiveArch: %{qt5_qtwebengine_arches}
- frysk
ExclusiveArch: x86_64 ppc64
- fuse-overlayfs
ExclusiveArch: %{arm64} ppc64le s390x x86_64
- fusesource-pom
ExclusiveArch: %{java_arches} noarch
- fwts
ExclusiveArch: x86_64 %{arm} aarch64 s390x riscv64 %{power64}
- fwupd-efi
ExclusiveArch: x86_64 aarch64
- ga
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- gap
ExclusiveArch: %{gap_arches}
- gap-pkg-ace
ExclusiveArch: %{gap_arches}
- gap-pkg-aclib
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-alnuth
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-atlasrep
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-autodoc
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-automata
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-autpgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-browse
ExclusiveArch: %{gap_arches}
- gap-pkg-caratinterface
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-circle
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-cohomolo
ExclusiveArch: %{gap_arches}
- gap-pkg-congruence
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-corelg
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crime
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crisp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crypting
ExclusiveArch: %{gap_arches}
- gap-pkg-cryst
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crystcat
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-ctbllib
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-curlinterface
ExclusiveArch: %{gap_arches}
- gap-pkg-cvec
ExclusiveArch: %{gap_arches}
- gap-pkg-datastructures
ExclusiveArch: %{gap_arches}
- gap-pkg-design
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-digraphs
ExclusiveArch: %{gap_arches}
- gap-pkg-edim
ExclusiveArch: %{gap_arches}
- gap-pkg-factint
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-ferret
ExclusiveArch: %{gap_arches}
- gap-pkg-fga
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-fining
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-float
ExclusiveArch: %{gap_arches}
- gap-pkg-format
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-forms
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-fr
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-francy
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-gbnp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-genss
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-grape
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-groupoids
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-grpconst
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-guava
ExclusiveArch: %{gap_arches}
- gap-pkg-hap
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-hapcryst
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-hecke
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-images
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-io
ExclusiveArch: %{gap_arches}
- gap-pkg-irredsol
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-json
ExclusiveArch: %{gap_arches}
- gap-pkg-jupyterkernel
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-jupyterviz
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-laguna
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-liealgdb
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-liepring
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-liering
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-loops
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-lpres
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-mapclass
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-nautytracesinterface
ExclusiveArch: %{gap_arches}
- gap-pkg-nq
ExclusiveArch: %{gap_arches}
- gap-pkg-openmath
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-orb
ExclusiveArch: %{gap_arches}
- gap-pkg-polenta
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-polycyclic
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-polymaking
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-primgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-profiling
ExclusiveArch: %{gap_arches}
- gap-pkg-qpa
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-quagroup
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-radiroot
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-recog
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-repsn
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-resclasses
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-scscp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-semigroups
ExclusiveArch: %{gap_arches}
- gap-pkg-singular
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-sla
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-smallgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-smallsemi
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-sonata
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-sophus
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-spinsym
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-standardff
ExclusiveArch: %{gap_arches}
- gap-pkg-tomlib
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-toric
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-transgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-utils
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-uuid
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-xmod
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-zeromqinterface
ExclusiveArch: %{gap_arches}
- gappalib-coq
ExclusiveArch: %{ocaml_native_compiler}
- gbrainy
ExclusiveArch: %mono_arches
- gdb
ExclusiveArch: %{ix86} x86_64
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gearhead1
ExclusiveArch: %{fpc_arches}
- gearhead2
ExclusiveArch: %{fpc_arches}
- ghdl
ExclusiveArch: %{GNAT_arches}
- ghostwriter
ExclusiveArch: %{qt5_qtwebengine_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- gitqlient
ExclusiveArch: %{qt5_qtwebengine_arches}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- glibc32
ExclusiveArch: x86_64
- glibd
ExclusiveArch: %{ldc_arches}
- gnatcoll
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-bindings
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-db
ExclusiveArch: %{GPRbuild_arches}
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: %{efi}
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang
ExclusiveArch: %{golang_arches}
- google-gson
ExclusiveArch: %{java_arches} noarch
- google-guice
ExclusiveArch: %{java_arches} noarch
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- goverlay
ExclusiveArch: %{fpc_arches}
- gprbuild
ExclusiveArch: %{GPRbuild_arches}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha aarch64
- grafana
ExclusiveArch: %{grafana_arches}
- grafana-pcp
ExclusiveArch: %{grafanapcp_arches}
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- guava
ExclusiveArch: %{java_arches} noarch
- gudev-sharp
ExclusiveArch: %mono_arches
- guestfs-tools
ExclusiveArch: %{kernel_arches}
- gvisor-tap-vsock
ExclusiveArch: %{golang_arches_future}
- hamcrest
ExclusiveArch: %{java_arches} noarch
- harec
ExclusiveArch: x86_64 aarch64
- hawtjni
ExclusiveArch: %{java_arches} noarch
- hedgewars
ExclusiveArch: %{fpc_arches}
- hibernate-jpa-2.0-api
ExclusiveArch: %{java_arches} noarch
- hid4java
ExclusiveArch: %{java_arches} noarch
- hipcub
ExclusiveArch: x86_64
- hsakmt
ExclusiveArch: x86_64 aarch64 ppc64le
- httpcomponents-client
ExclusiveArch: %{java_arches} noarch
- httpcomponents-core
ExclusiveArch: %{java_arches} noarch
- httpcomponents-project
ExclusiveArch: %{java_arches} noarch
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64 aarch64
- icaro
ExclusiveArch: %{ix86} x86_64 noarch
- icedtea-web
ExclusiveArch: %{java_arches}
- icu4j
ExclusiveArch: %{java_arches} noarch
- imagej
ExclusiveArch: %{java_arches} noarch
- imhex
ExclusiveArch: x86_64 %{arm64}
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cm-compiler
ExclusiveArch: i686 x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- intel-compute-runtime
ExclusiveArch: x86_64
- intel-gmmlib
ExclusiveArch: x86_64 i686
- intel-igc
ExclusiveArch: x86_64
- intel-ipp-crypto-mb
ExclusiveArch: x86_64
- intel-ipsec-mb
ExclusiveArch: x86_64
- intel-mediasdk
ExclusiveArch: x86_64
- intel-undervolt
ExclusiveArch: i386 x86_64
- ioport
ExclusiveArch: %{ix86} x86_64
- ipmctl
ExclusiveArch: x86_64
- ispc
ExclusiveArch: x86_64 aarch64
- iucode-tool
ExclusiveArch: %{ix86} x86_64
- iyfct
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- jFormatString
ExclusiveArch: %{java_arches} noarch
- jackson-annotations
ExclusiveArch: %{java_arches} noarch
- jackson-bom
ExclusiveArch: %{java_arches} noarch
- jackson-core
ExclusiveArch: %{java_arches} noarch
- jackson-databind
ExclusiveArch: %{java_arches} noarch
- jackson-dataformats-binary
ExclusiveArch: %{java_arches} noarch
- jackson-dataformats-text
ExclusiveArch: %{java_arches} noarch
- jackson-jaxrs-providers
ExclusiveArch: %{java_arches} noarch
- jackson-modules-base
ExclusiveArch: %{java_arches} noarch
- jackson-parent
ExclusiveArch: %{java_arches} noarch
- jacoco
ExclusiveArch: %{java_arches} noarch
- jacop
ExclusiveArch: %{java_arches} noarch
- jakarta-activation
ExclusiveArch: %{java_arches} noarch
- jakarta-activation1
ExclusiveArch: %{java_arches} noarch
- jakarta-annotations
ExclusiveArch: %{java_arches} noarch
- jakarta-el
ExclusiveArch: %{java_arches} noarch
- jakarta-interceptors
ExclusiveArch: %{java_arches} noarch
- jakarta-json
ExclusiveArch: %{java_arches} noarch
- jakarta-mail
ExclusiveArch: %{java_arches} noarch
- jakarta-oro
ExclusiveArch: %{java_arches} noarch
- jakarta-saaj
ExclusiveArch: %{java_arches} noarch
- jakarta-server-pages
ExclusiveArch: %{java_arches} noarch
- jakarta-servlet
ExclusiveArch: %{java_arches} noarch
- jakarta-xml-ws
ExclusiveArch: %{java_arches} noarch
- janino
ExclusiveArch: %{java_arches} noarch
- jansi
ExclusiveArch: %{java_arches}
- jansi-native
ExclusiveArch: %{java_arches}
- jansi1
ExclusiveArch: %{java_arches} noarch
- java-1.8.0-openjdk
ExclusiveArch: %{java_arches}
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- java-1.8.0-openjdk-portable
ExclusiveArch: %{java_arches}
- java-11-openjdk
ExclusiveArch: %{java_arches}
- java-11-openjdk-portable
ExclusiveArch: %{java_arches}
- java-17-openjdk
ExclusiveArch: %{java_arches}
- java-17-openjdk-portable
ExclusiveArch: %{java_arches}
- java-diff-utils
ExclusiveArch: %{java_arches} noarch
- java-dirq
ExclusiveArch: %{java_arches} noarch
- java-jd-decompiler
ExclusiveArch: %{java_arches} noarch
- java-latest-openjdk
ExclusiveArch: %{java_arches}
- java-latest-openjdk-portable
ExclusiveArch: %{java_arches}
- java-runtime-decompiler
ExclusiveArch: %{java_arches} noarch
- java-scrypt
ExclusiveArch: %{java_arches} noarch
- java_cup
ExclusiveArch: %{java_arches} noarch
- javacc
ExclusiveArch: %{java_arches} noarch
- javacc-maven-plugin
ExclusiveArch: %{java_arches} noarch
- javaewah
ExclusiveArch: %{java_arches} noarch
- javapackages-bootstrap
ExclusiveArch: %{java_arches}
- javaparser
ExclusiveArch: %{java_arches} noarch
- javapoet
ExclusiveArch: %{java_arches} noarch
- javassist
ExclusiveArch: %{java_arches} noarch
- jaxb
ExclusiveArch: %{java_arches} noarch
- jaxb-api
ExclusiveArch: %{java_arches} noarch
- jaxb-api2
ExclusiveArch: %{java_arches} noarch
- jaxb-dtd-parser
ExclusiveArch: %{java_arches} noarch
- jaxb-fi
ExclusiveArch: %{java_arches} noarch
- jaxb-istack-commons
ExclusiveArch: %{java_arches} noarch
- jaxb-stax-ex
ExclusiveArch: %{java_arches} noarch
- jaxen
ExclusiveArch: %{java_arches} noarch
- jboss-jaxrs-2.0-api
ExclusiveArch: %{java_arches} noarch
- jboss-logging
ExclusiveArch: %{java_arches} noarch
- jboss-logging-tools
ExclusiveArch: %{java_arches} noarch
- jboss-parent
ExclusiveArch: %{java_arches} noarch
- jchardet
ExclusiveArch: %{java_arches} noarch
- jcip-annotations
ExclusiveArch: %{java_arches} noarch
- jctools
ExclusiveArch: %{java_arches} noarch
- jcuber
ExclusiveArch: %{java_arches} noarch
- jdeparser
ExclusiveArch: %{java_arches} noarch
- jdepend
ExclusiveArch: %{java_arches} noarch
- jdependency
ExclusiveArch: %{java_arches} noarch
- jdom
ExclusiveArch: %{java_arches} noarch
- jdom2
ExclusiveArch: %{java_arches} noarch
- jedit
ExclusiveArch: %{java_arches} noarch
- jericho-html
ExclusiveArch: %{java_arches} noarch
- jetty
ExclusiveArch: %{java_arches} noarch
- jflex
ExclusiveArch: %{java_arches} noarch
- jfreechart
ExclusiveArch: %{java_arches} noarch
- jgit
ExclusiveArch: %{java_arches} noarch
- jglobus
ExclusiveArch: %{java_arches} noarch
- jgoodies-common
ExclusiveArch: %{java_arches} noarch
- jgoodies-forms
ExclusiveArch: %{java_arches} noarch
- jgoodies-looks
ExclusiveArch: %{java_arches} noarch
- jigawatts
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- jline
ExclusiveArch: %{java_arches}
- jline2
ExclusiveArch: %{java_arches} noarch
- jmock
ExclusiveArch: %{java_arches} noarch
- jmol
ExclusiveArch: %{java_arches} noarch
- jna
ExclusiveArch: %{java_arches}
- jneuroml-core
ExclusiveArch: %{java_arches} noarch
- jni-inchi
ExclusiveArch: %{java_arches}
- jol
ExclusiveArch: %{java_arches} noarch
- jolokia-jvm-agent
ExclusiveArch: %{java_arches} noarch
- jopt-simple
ExclusiveArch: %{java_arches} noarch
- jorbis
ExclusiveArch: %{java_arches} noarch
- jowl
ExclusiveArch: %{nodejs_arches} noarch
- jpanoramamaker
ExclusiveArch: %{java_arches} noarch
- jsch
ExclusiveArch: %{java_arches} noarch
- jsch-agent-proxy
ExclusiveArch: %{java_arches} noarch
- json_simple
ExclusiveArch: %{java_arches} noarch
- jsoup
ExclusiveArch: %{java_arches} noarch
- jsr-305
ExclusiveArch: %{java_arches} noarch
- jss
ExclusiveArch: %{java_arches}
- jssc
ExclusiveArch: %{java_arches}
- jtidy
ExclusiveArch: %{java_arches} noarch
- julia
ExclusiveArch: x86_64
- junit
ExclusiveArch: %{java_arches} noarch
- junit5
ExclusiveArch: %{java_arches} noarch
- juniversalchardet
ExclusiveArch: %{java_arches} noarch
- jzlib
ExclusiveArch: %{java_arches} noarch
- kaidan
ExclusiveArch: %{qt5_qtwebengine_arches}
- kchmviewer
ExclusiveArch: %{qt5_qtwebengine_arches}
- kernel
ExclusiveArch: noarch x86_64 s390x aarch64 ppc64le
ExclusiveArch: noarch i386 i686 x86_64 s390x aarch64 ppc64le
- keylime-agent-rust
ExclusiveArch: %{rust_arches}
- keyring-ima-signer
ExclusiveArch: %{rust_arches}
- kf5-akonadi-search
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-audiocd-kio
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kblog
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarcore
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarutils
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kitinerary
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-ktnef
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-libkdcraw
ExclusiveArch: x86_64 ppc64le %{arm}
- kicad
ExclusiveArch: x86_64 aarch64 ppc64le
- kiwix-desktop
ExclusiveArch: %{qt5_qtwebengine_arches}
- knot-resolver
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- knotes
ExclusiveArch: x86_64 %{arm}
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x %{arm}
- laf-plugin
ExclusiveArch: %{java_arches} noarch
- lazarus
ExclusiveArch: %{fpc_arches}
- lazpaint
ExclusiveArch: %{fpc_arches}
- ldapjdk
ExclusiveArch: %{java_arches} noarch
- ldc
ExclusiveArch: %{ldc_arches} ppc64le
- ldc1.30
ExclusiveArch: %{ldc_arches} ppc64le
- ldc1.32
ExclusiveArch: %{ldc_arches} ppc64le
- libbase
ExclusiveArch: %{java_arches} noarch
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libdfp
ExclusiveArch: ppc ppc64 ppc64le s390 s390x x86_64
- libdispatch
ExclusiveArch: x86_64 aarch64 ppc64le
- libfonts
ExclusiveArch: %{java_arches} noarch
- libformula
ExclusiveArch: %{java_arches} noarch
- libguestfs
ExclusiveArch: %{kernel_arches}
- libica
ExclusiveArch: s390 s390x
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libkgapi
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- libkrun
ExclusiveArch: x86_64 aarch64
- libkrunfw
ExclusiveArch: x86_64 aarch64
- liblayout
ExclusiveArch: %{java_arches} noarch
- libloader
ExclusiveArch: %{java_arches} noarch
- libnxz
ExclusiveArch: ppc64le
- libocxl
ExclusiveArch: ppc64le
- libpsm2
ExclusiveArch: x86_64
- libquentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- libreoffice-TexMaths
ExclusiveArch: %{java_arches}
- librepository
ExclusiveArch: %{java_arches} noarch
- libretro-desmume2015
ExclusiveArch: i686 x86_64
- librtas
ExclusiveArch: %{power64}
- libserializer
ExclusiveArch: %{java_arches} noarch
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 %{ix86}
- libunicode
ExclusiveArch: x86_64 aarch64
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} s390x %{ix86} x86_64
- libva-nvidia-driver
ExclusiveArch: %{x86_64} %{ix86} %{arm64} ppc64le
- libvirt-java
ExclusiveArch: %{java_arches} noarch
- libvma
ExclusiveArch: x86_64 ppc64le ppc64 aarch64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzdnn
ExclusiveArch: s390x
- libzfcphbaapi
ExclusiveArch: s390 s390x
- libzpc
ExclusiveArch: s390x
- llhttp
ExclusiveArch: %{nodejs_arches}
- log4j
ExclusiveArch: %{java_arches} noarch
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- lucene
ExclusiveArch: %{java_arches} noarch
- lujavrite
ExclusiveArch: %{java_arches}
- luxcorerender
ExclusiveArch: x86_64
- mactel-boot
ExclusiveArch: x86_64
- magicmirror
ExclusiveArch: %{nodejs_arches} noarch
- magicmirror-module-airnow
ExclusiveArch: %{nodejs_arches} noarch
- magicmirror-module-onthisday
ExclusiveArch: %{nodejs_arches} noarch
- magicmirror-module-singlestock
ExclusiveArch: %{nodejs_arches} noarch
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- mariadb-java-client
ExclusiveArch: %{java_arches} noarch
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matrix-synapse
ExclusiveArch: %{rust_arches}
- maui-mauikit
ExclusiveArch: %{ix86} s390x aarch64 x86_64
- maven
ExclusiveArch: %{java_arches} noarch
- maven-antrun-plugin
ExclusiveArch: %{java_arches} noarch
- maven-archetype
ExclusiveArch: %{java_arches} noarch
- maven-archiver
ExclusiveArch: %{java_arches} noarch
- maven-artifact-transfer
ExclusiveArch: %{java_arches} noarch
- maven-assembly-plugin
ExclusiveArch: %{java_arches} noarch
- maven-bundle-plugin
ExclusiveArch: %{java_arches} noarch
- maven-clean-plugin
ExclusiveArch: %{java_arches} noarch
- maven-common-artifact-filters
ExclusiveArch: %{java_arches} noarch
- maven-compiler-plugin
ExclusiveArch: %{java_arches} noarch
- maven-dependency-analyzer
ExclusiveArch: %{java_arches} noarch
- maven-dependency-plugin
ExclusiveArch: %{java_arches} noarch
- maven-dependency-tree
ExclusiveArch: %{java_arches} noarch
- maven-doxia
ExclusiveArch: %{java_arches} noarch
- maven-doxia-sitetools
ExclusiveArch: %{java_arches} noarch
- maven-enforcer
ExclusiveArch: %{java_arches} noarch
- maven-file-management
ExclusiveArch: %{java_arches} noarch
- maven-filtering
ExclusiveArch: %{java_arches} noarch
- maven-invoker
ExclusiveArch: %{java_arches} noarch
- maven-invoker-plugin
ExclusiveArch: %{java_arches} noarch
- maven-jar-plugin
ExclusiveArch: %{java_arches} noarch
- maven-mapping
ExclusiveArch: %{java_arches} noarch
- maven-native
ExclusiveArch: %{java_arches} noarch
- maven-parent
ExclusiveArch: %{java_arches} noarch
- maven-patch-plugin
ExclusiveArch: %{java_arches} noarch
- maven-plugin-testing
ExclusiveArch: %{java_arches} noarch
- maven-plugin-tools
ExclusiveArch: %{java_arches} noarch
- maven-remote-resources-plugin
ExclusiveArch: %{java_arches} noarch
- maven-reporting-api
ExclusiveArch: %{java_arches} noarch
- maven-reporting-impl
ExclusiveArch: %{java_arches} noarch
- maven-resolver
ExclusiveArch: %{java_arches} noarch
- maven-resources-plugin
ExclusiveArch: %{java_arches} noarch
- maven-script-interpreter
ExclusiveArch: %{java_arches} noarch
- maven-shade-plugin
ExclusiveArch: %{java_arches} noarch
- maven-shared-incremental
ExclusiveArch: %{java_arches} noarch
- maven-shared-io
ExclusiveArch: %{java_arches} noarch
- maven-shared-utils
ExclusiveArch: %{java_arches} noarch
- maven-source-plugin
ExclusiveArch: %{java_arches} noarch
- maven-surefire
ExclusiveArch: %{java_arches} noarch
- maven-verifier
ExclusiveArch: %{java_arches} noarch
- maven-verifier-plugin
ExclusiveArch: %{java_arches} noarch
- maven-wagon
ExclusiveArch: %{java_arches} noarch
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mbpfan
ExclusiveArch: x86_64
- mcelog
ExclusiveArch: i686 x86_64
- mcrouter
ExclusiveArch: x86_64 aarch64 ppc64le
- mecab-java
ExclusiveArch: %java_arches
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- mellowplayer
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64 ppc64 ppc64le s390x aarch64
- memtest86+
ExclusiveArch: x86_64 %{ix86}
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} x86_64 riscv64
- miglayout
ExclusiveArch: %{java_arches} noarch
- mine_detector
ExclusiveArch: %{GPRbuild_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-libidn2
ExclusiveArch: %{ix86} x86_64 %{arm}
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- moby-engine
ExclusiveArch: %{golang_arches}
- mockito
ExclusiveArch: %{java_arches} noarch
- mod_mono
ExclusiveArch: %mono_arches
- modello
ExclusiveArch: %{java_arches} noarch
- moditect
ExclusiveArch: %{java_arches} noarch
- module-build-service
ExclusiveArch: %{ix86} x86_64 noarch
- modulemaker-maven-plugin
ExclusiveArch: %{java_arches} noarch
- mojo-executor
ExclusiveArch: %{java_arches} noarch
- mojo-parent
ExclusiveArch: %{java_arches} noarch
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64 %{arm}
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- msr-tools
ExclusiveArch: %{ix86} x86_64
- munge-maven-plugin
ExclusiveArch: %{java_arches} noarch
- mxparser
ExclusiveArch: %{java_arches} noarch
- mysql-connector-java
ExclusiveArch: %{java_arches} noarch
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- naev
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- naga
ExclusiveArch: %{java_arches} noarch
- nant
ExclusiveArch: %mono_arches
- nativejit
ExclusiveArch: x86_64
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- nekohtml
ExclusiveArch: %{java_arches} noarch
- netavark
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nodejs-acorn-object-spread
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bash-language-server
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buble
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-less
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-linefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nodemon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs18
ExclusiveArch: %{nodejs_arches}
- nodejs20
ExclusiveArch: %{nodejs_arches}
- nom-tam-fits
ExclusiveArch: %{java_arches} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: x86_64 ppc64le
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64 ppc64le
- objectweb-asm
ExclusiveArch: %{java_arches} noarch
- objenesis
ExclusiveArch: %{java_arches} noarch
- obs-service-rust2rpm
ExclusiveArch: %{rust_arches} noarch
- oci-seccomp-bpf-hook
ExclusiveArch: x86_64 %{power64} aarch64 s390x armv7hl
ExclusiveArch: %{golang_arches_future}
- oidn
ExclusiveArch: x86_64
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- oneVPL
ExclusiveArch: x86_64
- oneVPL-intel-gpu
ExclusiveArch: x86_64
- oneapi-level-zero
ExclusiveArch: x86_64
- onednn
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- onedrive
ExclusiveArch: %{ldc_arches}
- ongres-scram
ExclusiveArch: %{java_arches} noarch
- ongres-stringprep
ExclusiveArch: %{java_arches} noarch
- opae
ExclusiveArch: x86_64
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64 aarch64
ExclusiveArch: %{ix86} x86_64 aarch64
ExclusiveArch: x86_64
- openblas
ExclusiveArch: %{openblas_arches}
- openjdk-asmtools
ExclusiveArch: %{java_arches} noarch
- openjdk-asmtools7
ExclusiveArch: %{java_arches} noarch
- openjfx
ExclusiveArch: %{java_arches}
- openjfx8
ExclusiveArch: x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openms
ExclusiveArch: %{qt5_qtwebengine_arches}
- openni
ExclusiveArch: x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openoffice.org-diafilter
ExclusiveArch: %{java_arches}
- openpgl
ExclusiveArch: aarch64 x86_64
- openssl-ibmca
ExclusiveArch: s390 s390x
- openstack-java-sdk
ExclusiveArch: %{java_arches} noarch
- opentest4j
ExclusiveArch: %{java_arches} noarch
- openvkl
ExclusiveArch: aarch64 x86_64
- optee_client
ExclusiveArch: aarch64
- options
ExclusiveArch: %{java_arches} noarch
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- osgi-annotation
ExclusiveArch: %{java_arches} noarch
- osgi-compendium
ExclusiveArch: %{java_arches} noarch
- osgi-core
ExclusiveArch: %{java_arches} noarch
- pacemaker
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64 %{arm}
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- pageedit
ExclusiveArch: %{qt5_qtwebengine_arches}
- parserng
ExclusiveArch: %{java_arches} noarch
- pasdoc
ExclusiveArch: %{fpc_arches}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcfi
ExclusiveArch: %{java_arches} noarch
- pcm
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdbg
ExclusiveArch: ppc64le
- pdfbox
ExclusiveArch: %{java_arches} noarch
- pdfmod
ExclusiveArch: %mono_arches
- pdftk-java
ExclusiveArch: %{java_arches} noarch
- pentaho-libxml
ExclusiveArch: %{java_arches} noarch
- pentaho-reporting-flow-engine
ExclusiveArch: %{java_arches} noarch
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 %{arm}
- pesign-test-app
ExclusiveArch: x86_64
- picocli
ExclusiveArch: %{java_arches} noarch
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- plantuml
ExclusiveArch: %{java_arches} noarch
- plasma-dialer
ExclusiveArch: %{java_arches}
- playonlinux
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- plexus-archiver
ExclusiveArch: %{java_arches} noarch
- plexus-build-api
ExclusiveArch: %{java_arches} noarch
- plexus-build-api0
ExclusiveArch: %{java_arches} noarch
- plexus-cipher
ExclusiveArch: %{java_arches} noarch
- plexus-classworlds
ExclusiveArch: %{java_arches} noarch
- plexus-compiler
ExclusiveArch: %{java_arches} noarch
- plexus-component-api
ExclusiveArch: %{java_arches} noarch
- plexus-components-pom
ExclusiveArch: %{java_arches} noarch
- plexus-containers
ExclusiveArch: %{java_arches} noarch
- plexus-i18n
ExclusiveArch: %{java_arches} noarch
- plexus-interpolation
ExclusiveArch: %{java_arches} noarch
- plexus-io
ExclusiveArch: %{java_arches} noarch
- plexus-languages
ExclusiveArch: %{java_arches} noarch
- plexus-pom
ExclusiveArch: %{java_arches} noarch
- plexus-resources
ExclusiveArch: %{java_arches} noarch
- plexus-sec-dispatcher
ExclusiveArch: %{java_arches} noarch
- plexus-utils
ExclusiveArch: %{java_arches} noarch
- plexus-velocity
ExclusiveArch: %{java_arches} noarch
- podman
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- poppler-sharp
ExclusiveArch: %mono_arches
- popub
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- postgresql-jdbc
ExclusiveArch: %{java_arches} noarch
- powerpc-utils
ExclusiveArch: ppc %{power64}
- powerstat
ExclusiveArch: %{ix86} x86_64
- ppc64-diag
ExclusiveArch: ppc %{power64}
- procyon
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
- proguard
ExclusiveArch: %{java_arches} noarch
- prometheus-jmx-exporter
ExclusiveArch: %{java_arches} noarch
- prometheus-simpleclient-java
ExclusiveArch: %{java_arches} noarch
- proxygen
ExclusiveArch: x86_64 aarch64 ppc64le
- pveclib
ExclusiveArch: ppc %{power64}
- pvs-sbcl
ExclusiveArch: x86_64
- pyqtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- python-ast-monitor
ExclusiveArch: %{qt6_qtwebengine_arches} noarch
- python-cryptography
ExclusiveArch: %{rust_arches}
- python-damo
ExclusiveArch: x86_64 aarch64 ppc64le s390x noarch
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-javaobj
ExclusiveArch: %{java_arches} noarch
- python-jep
ExclusiveArch: %{java_arches}
- python-jnius
ExclusiveArch: %{java_arches}
- python-jupyter-polymake
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- python-openoffice
ExclusiveArch: noarch x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-pyqt6-webengine
ExclusiveArch: aarch64 x86_64
- python-setuptools-rust
ExclusiveArch: %{rust_arches}
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qatengine
ExclusiveArch: x86_64
- qatzip
ExclusiveArch: x86_64
- qbe
ExclusiveArch: x86_64 aarch64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qdox
ExclusiveArch: %{java_arches} noarch
- qemu-sanity-check
ExclusiveArch: %{kernel_arches}
- qevercloud
ExclusiveArch: %{qt5_qtwebengine_arches}
- qmapshack
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt6-qtwebengine
ExclusiveArch: aarch64 x86_64
- qt6-qtwebview
ExclusiveArch: aarch64 x86_64
- quantum-espresso
ExclusiveArch: x86_64 %{ix86} aarch64 %{power64}
- quentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- rEFInd
ExclusiveArch: %{efi}
- rachota
ExclusiveArch: %{java_arches} noarch
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- reflections
ExclusiveArch: %{java_arches} noarch
- reg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- regexp
ExclusiveArch: %{java_arches} noarch
- relaxng-datatype-java
ExclusiveArch: %{java_arches} noarch
- replacer
ExclusiveArch: %{java_arches} noarch
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- rescene
ExclusiveArch: %{mono_arches}
- resteasy
ExclusiveArch: %{java_arches} noarch
- restool
ExclusiveArch: aarch64
- restsharp
ExclusiveArch: %{mono_arches}
- retsnoop
ExclusiveArch: %{rust_arches}
- rhino
ExclusiveArch: %{java_arches} noarch
- river
ExclusiveArch: %{zig_arches}
- rkcommon
ExclusiveArch: x86_64 aarch64
- rocclr
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-compilersupport
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-device-libs
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-runtime
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-smi
ExclusiveArch: x86_64 aarch64 ppc64le
- rocminfo
ExclusiveArch: x86_64 aarch64 ppc64le
- rocprim
ExclusiveArch: x86_64
- rocrand
ExclusiveArch: x86_64
- rocthrust
ExclusiveArch: x86_64
- rpm-ostree
ExclusiveArch: %{rust_arches}
- rr
ExclusiveArch: %{ix86} x86_64 aarch64
- rssguard
ExclusiveArch: %{qt5_qtwebengine_arches}
- rstudio
ExclusiveArch: %{java_arches}
- rsyntaxtextarea
ExclusiveArch: %{java_arches} noarch
- rubygem-childprocess
ExclusiveArch: %{ix86} x86_64 noarch
- runc
ExclusiveArch: %{golang_arches_future}
- rundoc
ExclusiveArch: %{java_arches} noarch
- rust
ExclusiveArch: %{rust_arches}
- rust-actix
ExclusiveArch: %{rust_arches}
- rust-actix-router
ExclusiveArch: %{rust_arches}
- rust-argmax
ExclusiveArch: %{rust_arches}
- rust-askalono-cli
ExclusiveArch: %{rust_arches}
- rust-base-x
ExclusiveArch: %{rust_arches}
- rust-bit-set
ExclusiveArch: %{rust_arches}
- rust-bootupd
ExclusiveArch: x86_64 aarch64
- rust-brotli
ExclusiveArch: %{rust_arches}
- rust-capnp-futures
ExclusiveArch: %{rust_arches}
- rust-cascade
ExclusiveArch: %{rust_arches}
- rust-cast
ExclusiveArch: %{rust_arches}
- rust-chrono-tz
ExclusiveArch: %{rust_arches}
- rust-combine
ExclusiveArch: %{rust_arches}
- rust-compress-tools
ExclusiveArch: %{rust_arches}
- rust-const-oid0.6
ExclusiveArch: %{rust_arches}
- rust-coreos-installer
ExclusiveArch: %{rust_arches}
- rust-crossbeam
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-ctr
ExclusiveArch: %{rust_arches}
- rust-dashmap4
ExclusiveArch: %{rust_arches}
- rust-deflate
ExclusiveArch: %{rust_arches}
- rust-deflate0.8
ExclusiveArch: %{rust_arches}
- rust-drg
ExclusiveArch: %{rust_arches}
- rust-event-listener
ExclusiveArch: %{rust_arches}
- rust-fail
ExclusiveArch: %{rust_arches}
- rust-gag
ExclusiveArch: %{rust_arches}
- rust-getch
ExclusiveArch: %{rust_arches}
- rust-gzip-header
ExclusiveArch: %{rust_arches}
- rust-hamming
ExclusiveArch: %{rust_arches}
- rust-headers
ExclusiveArch: %{rust_arches}
- rust-hidapi
ExclusiveArch: %{rust_arches}
- rust-httparse
ExclusiveArch: %{rust_arches}
- rust-humantime-serde
ExclusiveArch: %{rust_arches}
- rust-hyperlocal
ExclusiveArch: %{rust_arches}
- rust-image0.23
ExclusiveArch: %{rust_arches}
- rust-inflate
ExclusiveArch: %{rust_arches}
- rust-jpeg-decoder0.1
ExclusiveArch: %{rust_arches}
- rust-k9
ExclusiveArch: %{rust_arches}
- rust-krunvm
ExclusiveArch: x86_64 aarch64
- rust-kstring
ExclusiveArch: %{rust_arches}
- rust-kvm-ioctls
ExclusiveArch: x86_64 aarch64
- rust-lebe
ExclusiveArch: %{rust_arches}
- rust-libslirp
ExclusiveArch: %{rust_arches}
- rust-libslirp-sys
ExclusiveArch: %{rust_arches}
- rust-msru
ExclusiveArch: x86_64
- rust-nanorand
ExclusiveArch: %{rust_arches}
- rust-netstat2
ExclusiveArch: %{rust_arches}
- rust-onig
ExclusiveArch: %{rust_arches}
- rust-openat-ext
ExclusiveArch: %{rust_arches}
- rust-ordered-float2
ExclusiveArch: %{rust_arches}
- rust-os_type
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-pathsearch
ExclusiveArch: %{rust_arches}
- rust-pq-sys
ExclusiveArch: %{rust_arches}
- rust-pretty-bytes
ExclusiveArch: %{rust_arches}
- rust-pretty-hex
ExclusiveArch: %{rust_arches}
- rust-primal-bit
ExclusiveArch: %{rust_arches}
- rust-primal-check
ExclusiveArch: %{rust_arches}
- rust-primal-estimate
ExclusiveArch: %{rust_arches}
- rust-procfs0.9
ExclusiveArch: %{rust_arches}
- rust-procs
ExclusiveArch: %{rust_arches}
- rust-prost
ExclusiveArch: %{rust_arches}
- rust-prost-derive
ExclusiveArch: %{rust_arches}
- rust-prost-derive0.8
ExclusiveArch: %{rust_arches}
- rust-prost0.8
ExclusiveArch: %{rust_arches}
- rust-psl-types
ExclusiveArch: %{rust_arches}
- rust-psm
ExclusiveArch: %{rust_arches}
- rust-pwd
ExclusiveArch: %{rust_arches}
- rust-rand_core
ExclusiveArch: %{rust_arches}
- rust-schemafy_core
ExclusiveArch: %{rust_arches}
- rust-schemafy_lib
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-serde-big-array
ExclusiveArch: %{rust_arches}
- rust-serde_qs
ExclusiveArch: %{rust_arches}
- rust-serde_yaml0.8
ExclusiveArch: %{rust_arches}
- rust-sev
ExclusiveArch: x86_64
- rust-sevctl
ExclusiveArch: x86_64
- rust-silver
ExclusiveArch: %{rust_arches}
- rust-sinit
ExclusiveArch: %{rust_arches}
- rust-snphost
ExclusiveArch: x86_64
- rust-ssh-key-dir
ExclusiveArch: %{rust_arches}
- rust-stacker
ExclusiveArch: %{rust_arches}
- rust-structopt
ExclusiveArch: %{rust_arches}
- rust-tiff0.6
ExclusiveArch: %{rust_arches}
- rust-totp-lite
ExclusiveArch: %{rust_arches}
- rust-tower-layer
ExclusiveArch: %{rust_arches}
- rust-tpm2-policy
ExclusiveArch: %{rust_arches}
- rust-tree-sitter
ExclusiveArch: %{rust_arches}
- rust-tree-sitter-cli
ExclusiveArch: %{rust_arches}
- rust-tzfile
ExclusiveArch: %{rust_arches}
- rust-ubyte
ExclusiveArch: %{rust_arches}
- rust-unicode-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-width
ExclusiveArch: %{rust_arches}
- rust-unicode-xid
ExclusiveArch: %{rust_arches}
- rust-uriparse
ExclusiveArch: %{rust_arches}
- rust-uucore
ExclusiveArch: %{rust_arches}
- rust-varlink_generator
ExclusiveArch: %{rust_arches}
- rust-varlink_parser
ExclusiveArch: %{rust_arches}
- rust-virtio-bindings
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vmm-sys-util
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vtparse
ExclusiveArch: %{rust_arches}
- rust-web-ext-native-messaging
ExclusiveArch: %{rust_arches}
- rust-wezterm-color-types
ExclusiveArch: %{rust_arches}
- rust-wezterm-dynamic
ExclusiveArch: %{rust_arches}
- rust-wezterm-dynamic-derive
ExclusiveArch: %{rust_arches}
- rust-wild
ExclusiveArch: %{rust_arches}
- rust-xxhash-rust
ExclusiveArch: %{rust_arches}
- rust-zbus1
ExclusiveArch: %{rust_arches}
- rust-zbus_macros1
ExclusiveArch: %{rust_arches}
- rust-zincati
ExclusiveArch: %{rust_arches}
- rust-zvariant2
ExclusiveArch: %{rust_arches}
- rust-zvariant_derive2
ExclusiveArch: %{rust_arches}
- s390utils
ExclusiveArch: s390 s390x
- sac
ExclusiveArch: %{java_arches} noarch
- safetyblanket
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- sagemath
ExclusiveArch: aarch64 x86_64
- sat4j
ExclusiveArch: %{java_arches} noarch
- sbcl
ExclusiveArch: %{ix86} x86_64 aarch64 %{power64}
- sbd
ExclusiveArch: i686 x86_64 s390x aarch64 ppc64le
- sblim-cim-client
ExclusiveArch: %{java_arches} noarch
- sblim-cim-client2
ExclusiveArch: %{java_arches} noarch
- sbsigntools
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- scala
ExclusiveArch: %{java_arches} noarch
- scalacheck
ExclusiveArch: %{java_arches} noarch
- scannotation
ExclusiveArch: %{java_arches} noarch
- sdljava
ExclusiveArch: %{java_arches}
- sdrangel
ExclusiveArch: %{qt5_qtwebengine_arches}
- sdsl-lite
ExclusiveArch: %{power64} x86_64 aarch64
- seabios
ExclusiveArch: x86_64
- seadrive-gui
ExclusiveArch: %{qt5_qtwebengine_arches}
- seafile-client
ExclusiveArch: %{qt5_qtwebengine_arches}
- seamonkey
ExclusiveArch: x86_64
- seqan3
ExclusiveArch: %{power64} x86_64 aarch64
- sequence-library
ExclusiveArch: %{java_arches} noarch
- servicelog
ExclusiveArch: ppc %{power64}
- shaman
ExclusiveArch: %{java_arches} noarch
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: %{efi}
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- shim-unsigned-x64
ExclusiveArch: x86_64
- sigul
ExclusiveArch: x86_64
- singularity-ce
ExclusiveArch: %{go_arches}
- sisu
ExclusiveArch: %{java_arches} noarch
- sisu-mojos
ExclusiveArch: %{java_arches} noarch
- skopeo
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- skychart
ExclusiveArch: %{fpc_arches}
- slf4j
ExclusiveArch: %{java_arches} noarch
- slirp4netns
ExclusiveArch: %{golang_arches_future}
- snakeyaml
ExclusiveArch: %{java_arches} noarch
- snapd
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm} aarch64 ppc64le s390x}
- snip
ExclusiveArch: %{java_arches} noarch
- softnet-stat
ExclusiveArch: %{rust_arches}
- soup-sharp
ExclusiveArch: %{mono_arches}
- spacebar
ExclusiveArch: %{java_arches}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spec-version-maven-plugin
ExclusiveArch: %{java_arches} noarch
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- spice-parent
ExclusiveArch: %{java_arches} noarch
- springlobby
ExclusiveArch: %{ix86} x86_64
- sqljet
ExclusiveArch: %{java_arches} noarch
- squeekboard
ExclusiveArch: %{rust_arches}
- startdde
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- stats-collect
ExclusiveArch: %{ix86} x86_64 noarch
- statsd
ExclusiveArch: %{nodejs_arches} noarch
- stratis-cli
ExclusiveArch: %{rust_arches} noarch
- stratisd
ExclusiveArch: %{rust_arches}
ExclusiveArch: %{rust_arches}
ExclusiveArch: %{rust_arches}
- string-template-maven-plugin
ExclusiveArch: %{java_arches} noarch
- stringtemplate
ExclusiveArch: %{java_arches} noarch
- stringtemplate4
ExclusiveArch: %{java_arches} noarch
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- subscription-manager-cockpit
ExclusiveArch: %{nodejs_arches} noarch
- supercollider
ExclusiveArch: %{qt5_qtwebengine_arches}
- supermin
ExclusiveArch: %{kernel_arches}
- svnkit
ExclusiveArch: %{java_arches} noarch
- svt-vp9
ExclusiveArch: x86_64
- swift-lang
ExclusiveArch: x86_64 aarch64
- swing-layout
ExclusiveArch: %{java_arches} noarch
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64le s390x
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- system-rules
ExclusiveArch: %{java_arches} noarch
- system76-keyboard-configurator
ExclusiveArch: %{rust_arches}
- systemd-boot
ExclusiveArch: %efi
- t-digest
ExclusiveArch: %{java_arches} noarch
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tagsoup
ExclusiveArch: %{java_arches} noarch
- tarantool
ExclusiveArch: %{ix86} x86_64
- tboot
ExclusiveArch: %{ix86} x86_64
- tdlib
ExclusiveArch: x86_64 aarch64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- ternimal
ExclusiveArch: %{rust_arches}
- test-interface
ExclusiveArch: %{java_arches} noarch
- testcloud
ExclusiveArch: %{kernel_arches} noarch
- testng
ExclusiveArch: %{java_arches} noarch
- texlive
ExclusiveArch: %{java_arches} noarch
- thermald
ExclusiveArch: %{ix86} x86_64
- tilix
ExclusiveArch: %{ldc_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- tomcat
ExclusiveArch: %{java_arches} noarch
- tomcat-native
ExclusiveArch: %{java_arches}
- tomcat-taglibs-parent
ExclusiveArch: %{java_arches} noarch
- tomcatjss
ExclusiveArch: %{java_arches} noarch
- torbrowser-launcher
ExclusiveArch: %{ix86} x86_64
- treelayout
ExclusiveArch: %{java_arches} noarch
- trilead-ssh2
ExclusiveArch: %{java_arches} noarch
- truth
ExclusiveArch: %{java_arches} noarch
- tuned-profiles-nfv-host-bin
ExclusiveArch: %{ix86} x86_64
- typescript
ExclusiveArch: %{nodejs_arches} noarch
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ucx
ExclusiveArch: aarch64 ppc64le x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
- umr
ExclusiveArch: x86_64 aarch64 ppc64le
- unetbootin
ExclusiveArch: %{ix86} x86_64
- univocity-parsers
ExclusiveArch: %{java_arches} noarch
- ursa-major
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- usd
ExclusiveArch: aarch64 x86_64
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- vakzination
ExclusiveArch: %{java_arches}
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vecmath1.2
ExclusiveArch: %{java_arches} noarch
- velocity
ExclusiveArch: %{java_arches} noarch
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- vim-syntastic
ExclusiveArch: %{java_arches} noarch
- virt-p2v
ExclusiveArch: x86_64
- virt-v2v
ExclusiveArch: x86_64
- virtiofsd
ExclusiveArch: %{rust_arches}
- virtualbox-guest-additions
ExclusiveArch: i686 x86_64
- vkd3d
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- vmaf
ExclusiveArch: x86_64
- voms-api-java
ExclusiveArch: %{java_arches} noarch
- voms-clients-java
ExclusiveArch: %{java_arches} noarch
- vrq
ExclusiveArch: %{ix86} x86_64
- wangle
ExclusiveArch: x86_64 aarch64 ppc64le
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{ix86} x86_64 %{arm}
- wasmedge
ExclusiveArch: x86_64 aarch64
- watchman
ExclusiveArch: x86_64 aarch64 ppc64le
- wdt
ExclusiveArch: x86_64 aarch64 ppc64le
- webkit2-sharp
ExclusiveArch: %mono_arches
- weld-parent
ExclusiveArch: %{java_arches} noarch
- why3
ExclusiveArch: %{ocaml_native_compiler}
- wine
ExclusiveArch: %{ix86} x86_64 aarch64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86}
- wine-dxvk
ExclusiveArch: %{ix86} x86_64
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- ws-commons-util
ExclusiveArch: %{java_arches} noarch
- wsdl4j
ExclusiveArch: %{java_arches} noarch
- wult
ExclusiveArch: x86_64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x2goclient
ExclusiveArch: x86_64
- x86-simd-sort
ExclusiveArch: x86_64
- xalan-j2
ExclusiveArch: %{java_arches} noarch
- xbean
ExclusiveArch: %{java_arches} noarch
- xbyak
ExclusiveArch: x86_64
- xbyak_aarch64
ExclusiveArch: aarch64
- xe-guest-utilities-latest
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: x86_64 aarch64
- xerces-j2
ExclusiveArch: %{java_arches} noarch
- xgap
ExclusiveArch: %{gap_arches}
- xml-commons-apis
ExclusiveArch: %{java_arches} noarch
- xml-commons-resolver
ExclusiveArch: %{java_arches} noarch
- xml-maven-plugin
ExclusiveArch: %{java_arches} noarch
- xmlada
ExclusiveArch: %{GPRbuild_arches}
- xmlgraphics-commons
ExclusiveArch: %{java_arches} noarch
- xmlpull
ExclusiveArch: %{java_arches} noarch
- xmlstreambuffer
ExclusiveArch: %{java_arches} noarch
- xmlunit
ExclusiveArch: %{java_arches} noarch
- xmvn
ExclusiveArch: %{java_arches} noarch
- xmvn-connector-ivy
ExclusiveArch: %{java_arches} noarch
- xmvn-generator
ExclusiveArch: %{java_arches}
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- xstream
ExclusiveArch: %{java_arches} noarch
- xz-java
ExclusiveArch: %{java_arches} noarch
- yarnpkg
ExclusiveArch: %{nodejs_arches} noarch
- zcfan
ExclusiveArch: x86_64
- zeal
ExclusiveArch: aarch64 x86_64
- zenon
ExclusiveArch: %{ocaml_native_compiler}
- zeromq-ada
ExclusiveArch: %{GPRbuild_arches}
- zig
ExclusiveArch: %{zig_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ng
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- zola
ExclusiveArch: %{rust_arches}
8 months, 3 weeks
[Report] Packages Restricting Arches
by root
New package excluding arches (1)
============================
- powerstat
ExclusiveArch: %{ix86} x86_64
List of packages currently excluding arches (1153)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- 90-Second-Portraits
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- BareBonesBrowserLaunch
ExclusiveArch: %{java_arches} noarch
- CFR
ExclusiveArch: %{java_arches} noarch
- CardManager
ExclusiveArch: %{java_arches} noarch
- GAPDoc
ExclusiveArch: %{gap_arches} noarch
- GoldenCheetah
ExclusiveArch: %{qt5_qtwebengine_arches}
- GtkAda
ExclusiveArch: %{GPRbuild_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- IPAddress
ExclusiveArch: %{java_arches} noarch
- Mars
ExclusiveArch: %{java_arches} noarch
- OpenColorIO
ExclusiveArch: x86_64 ppc64le
- OpenImageIO
ExclusiveArch: x86_64 ppc64le
- OpenMolcas
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- OpenStego
ExclusiveArch: %{java_arches} noarch
- PragmARC
ExclusiveArch: %{GPRbuild_arches}
- R-V8
ExclusiveArch: %{nodejs_arches}
- R-rJava
ExclusiveArch: %{java_arches}
- RdRand
ExclusiveArch: %{ix86} x86_64
- RediSearch
ExclusiveArch: x86_64
- SLOF
ExclusiveArch: ppc64le
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aardvark-dns
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- accel-config
ExclusiveArch: %{ix86} x86_64
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GPRbuild_arches}
- algobox
ExclusiveArch: %{qt5_qtwebengine_arches}
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64 s390x
- anet
ExclusiveArch: %{GPRbuild_arches}
- ant
ExclusiveArch: %{java_arches} noarch
- ant-antunit
ExclusiveArch: %{java_arches} noarch
- ant-contrib
ExclusiveArch: %{java_arches} noarch
- antlr
ExclusiveArch: %{java_arches}
- antlr-maven-plugin
ExclusiveArch: %{java_arches} noarch
- antlr3
ExclusiveArch: %{java_arches}
- antlr4-project
ExclusiveArch: %{java_arches}
- antlrworks
ExclusiveArch: %{java_arches} noarch
- aopalliance
ExclusiveArch: %{java_arches} noarch
- apache-commons-beanutils
ExclusiveArch: %{java_arches} noarch
- apache-commons-cli
ExclusiveArch: %{java_arches} noarch
- apache-commons-codec
ExclusiveArch: %{java_arches} noarch
- apache-commons-collections
ExclusiveArch: %{java_arches} noarch
- apache-commons-collections4
ExclusiveArch: %{java_arches} noarch
- apache-commons-compress
ExclusiveArch: %{java_arches} noarch
- apache-commons-configuration
ExclusiveArch: %{java_arches} noarch
- apache-commons-digester
ExclusiveArch: %{java_arches} noarch
- apache-commons-exec
ExclusiveArch: %{java_arches} noarch
- apache-commons-io
ExclusiveArch: %{java_arches} noarch
- apache-commons-jexl
ExclusiveArch: %{java_arches} noarch
- apache-commons-jxpath
ExclusiveArch: %{java_arches} noarch
- apache-commons-lang3
ExclusiveArch: %{java_arches} noarch
- apache-commons-logging
ExclusiveArch: %{java_arches} noarch
- apache-commons-math
ExclusiveArch: %{java_arches} noarch
- apache-commons-modeler
ExclusiveArch: %{java_arches} noarch
- apache-commons-net
ExclusiveArch: %{java_arches} noarch
- apache-commons-parent
ExclusiveArch: %{java_arches} noarch
- apache-commons-pool
ExclusiveArch: %{java_arches} noarch
- apache-commons-vfs
ExclusiveArch: %{java_arches} noarch
- apache-ivy
ExclusiveArch: %{java_arches} noarch
- apache-parent
ExclusiveArch: %{java_arches} noarch
- apache-resource-bundles
ExclusiveArch: %{java_arches} noarch
- apache-sshd
ExclusiveArch: %{java_arches} noarch
- apiguardian
ExclusiveArch: %{java_arches} noarch
- apmd
ExclusiveArch: %{ix86}
- appstream-generator
ExclusiveArch: %{ldc_arches}
- aqute-bnd
ExclusiveArch: %{java_arches} noarch
- args4j
ExclusiveArch: %{java_arches} noarch
- arianna
ExclusiveArch: %{qt5_qtwebengine_arches}
- arm-trusted-firmware
ExclusiveArch: aarch64
- assertj-core
ExclusiveArch: %{java_arches} noarch
- atinject
ExclusiveArch: %{java_arches} noarch
- aunit
ExclusiveArch: %GPRbuild_arches
- auto
ExclusiveArch: %{java_arches} noarch
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- azure-cli
ExclusiveArch: %{java_arches} noarch
- batik
ExclusiveArch: %{java_arches} noarch
- bcal
ExclusiveArch: x86_64 aarch64 ia64 ppc64 ppc64le s390x
- bcc
ExclusiveArch: x86_64 %{power64} aarch64 s390x armv7hl
- bcel
ExclusiveArch: %{java_arches} noarch
- bcm283x-firmware
ExclusiveArch: aarch64
- beansbinding
ExclusiveArch: %{java_arches} noarch
- belle-sip
ExclusiveArch: %{java_arches}
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- beust-jcommander
ExclusiveArch: %{java_arches} noarch
- bibletime
ExclusiveArch: %{java_arches}
- biosdevname
ExclusiveArch: %{ix86} x86_64
- bless
ExclusiveArch: %mono_arches
- bodhi-server
ExclusiveArch: %{golang_arches_future}
- bolzplatz2006
ExclusiveArch: %{java_arches}
- bouncycastle
ExclusiveArch: %{java_arches} noarch
- box64
ExclusiveArch: aarch64 ppc64le x86_64
- bpftrace
ExclusiveArch: x86_64 %{power64} aarch64 s390x
- brazil
ExclusiveArch: %{java_arches} noarch
- bsf
ExclusiveArch: %{java_arches} noarch
- bsh
ExclusiveArch: %{java_arches} noarch
- build-helper-maven-plugin
ExclusiveArch: %{java_arches} noarch
- buildah
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- byte-buddy
ExclusiveArch: %{java_arches} noarch
- byteman
ExclusiveArch: %{java_arches} noarch
- cachelib
ExclusiveArch: x86_64 aarch64 ppc64le
- caddy
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: %{golang_arches}
- calamares
ExclusiveArch: %{ix86} x86_64 aarch64
- calibre
ExclusiveArch: aarch64 x86_64
- cambozola
ExclusiveArch: %{java_arches} noarch
- canl-java
ExclusiveArch: %{java_arches} noarch
- catatonit
ExclusiveArch: aarch64 ppc64le s390x x86_64
ExclusiveArch: %{golang_arches_future}
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- cdi-api
ExclusiveArch: %{java_arches} noarch
- ceph
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- cglib
ExclusiveArch: %{java_arches} noarch
- chromium
ExclusiveArch: x86_64
ExclusiveArch: x86_64 aarch64
ExclusiveArch: x86_64 aarch64
- cjdns
ExclusiveArch: %{nodejs_arches}
- classloader-leak-test-framework
ExclusiveArch: %{java_arches} noarch
- classpathless-compiler
ExclusiveArch: %{java_arches} noarch
- clevis-pin-tpm2
ExclusiveArch: %{rust_arches}
- clojure
ExclusiveArch: %{java_arches} noarch
- clojure-core-specs-alpha
ExclusiveArch: %{java_arches} noarch
- clojure-maven-plugin
ExclusiveArch: %{java_arches} noarch
- clojure-spec-alpha
ExclusiveArch: %{java_arches} noarch
- cmospwd
ExclusiveArch: %{ix86} x86_64
- cmrt
ExclusiveArch: %{ix86} x86_64 ia64
- codehaus-parent
ExclusiveArch: %{java_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- colossus
ExclusiveArch: %{java_arches} noarch
- conmon
ExclusiveArch: %{golang_arches_future}
- console-image-viewer
ExclusiveArch: %{java_arches} noarch
- containernetworking-plugins
ExclusiveArch: %{golang_arches}
- coq
ExclusiveArch: %{ocaml_native_compiler}
- cortado
ExclusiveArch: %{java_arches} noarch
- cpu-x
ExclusiveArch: i686 x86_64
- cpufetch
ExclusiveArch: %{arm} aarch64 x86_64 ppc ppc64 ppc64le
- cpuid
ExclusiveArch: %{ix86} x86_64
- cpuinfo
ExclusiveArch: x86_64 aarch64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- crash-gcore-command
ExclusiveArch: aarch64 ppc64le x86_64
- crash-trace-command
ExclusiveArch: aarch64 ppc64le s390x x86_64
- credentials-fetcher
ExclusiveArch: x86_64 aarch64 s390x
- cri-o
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- cri-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- crun
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le riscv64 s390x x86_64
- cryptlib
ExclusiveArch: x86_64 aarch64 ppc64le
- crypto-policies
ExclusiveArch: %{java_arches} noarch
- cryptobone
ExclusiveArch: x86_64 ppc64le aarch64
- csslint
ExclusiveArch: %{nodejs_arches} noarch
- cvc5
ExclusiveArch: %{java_arches}
- daq
ExclusiveArch: x86_64 aarch64
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- decentxml
ExclusiveArch: %{java_arches} noarch
- deepin-daemon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- deepin-desktop-schemas
ExclusiveArch: %{go_arches}
- directory-maven-plugin
ExclusiveArch: %{java_arches} noarch
- dirgra
ExclusiveArch: %{java_arches} noarch
- disruptor
ExclusiveArch: %{java_arches} noarch
- ditaa
ExclusiveArch: %{java_arches} noarch
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- dmtcp
ExclusiveArch: x86_64
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dogtag-pki
ExclusiveArch: %{java_arches}
- dolphin-emu
ExclusiveArch: x86_64 aarch64
- dom4j
ExclusiveArch: %{java_arches} noarch
- dotnet6.0
ExclusiveArch: aarch64 x86_64 s390x
ExclusiveArch: x86_64
- dotnet7.0
ExclusiveArch: aarch64 ppc64le s390x x86_64
ExclusiveArch: x86_64
- doublecmd
ExclusiveArch: %{ix86} x86_64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dub
ExclusiveArch: %{ldc_arches}
- dxvk-native
ExclusiveArch: %{ix86} x86_64
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
- e3
ExclusiveArch: %{ix86} x86_64
- easymock
ExclusiveArch: %{java_arches} noarch
- ecj
ExclusiveArch: %{java_arches} noarch
- eclipse-swt
ExclusiveArch: %{java_arches}
- ed25519-java
ExclusiveArch: %{java_arches} noarch
- edk2
ExclusiveArch: x86_64 aarch64
- efibootmgr
ExclusiveArch: %{efi}
- efifs
ExclusiveArch: %{efi}
- efitools
ExclusiveArch: %{efi}
- efivar
ExclusiveArch: %{efi}
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- emacs-slime
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- embree
ExclusiveArch: aarch64 x86_64
- embree3
ExclusiveArch: aarch64 x86_64
- enjarify
ExclusiveArch: %{java_arches} noarch
- enki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- eric
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- erlang-corba
ExclusiveArch: %{java_arches}
- esmi_ib_library
ExclusiveArch: x86_64
- eth-tools
ExclusiveArch: x86_64
- exec-maven-plugin
ExclusiveArch: %{java_arches} noarch
- external-editor-revived
ExclusiveArch: %{rust_arches}
- extra-enforcer-rules
ExclusiveArch: %{java_arches} noarch
- fasterxml-oss-parent
ExclusiveArch: %{java_arches} noarch
- fb303
ExclusiveArch: x86_64 aarch64 ppc64le
- fbthrift
ExclusiveArch: x86_64 aarch64 ppc64le
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- felix-parent
ExclusiveArch: %{java_arches} noarch
- felix-utils
ExclusiveArch: %{java_arches} noarch
- fernflower
ExclusiveArch: %{java_arches} noarch
- fes
ExclusiveArch: %{ix86} x86_64
- filedrop
ExclusiveArch: %{java_arches} noarch
- firecracker
ExclusiveArch: aarch64 x86_64
- fishbowl
ExclusiveArch: %{java_arches} noarch
- fizz
ExclusiveArch: x86_64 aarch64 ppc64le
- flocq
ExclusiveArch: %{ocaml_native_compiler}
- florist
ExclusiveArch: %{GPRbuild_arches}
- fluent-bit
ExclusiveArch: x86_64 aarch64
- flute
ExclusiveArch: %{java_arches} noarch
- folly
ExclusiveArch: x86_64 aarch64 ppc64le
- fop
ExclusiveArch: %{java_arches} noarch
- forge-parent
ExclusiveArch: %{java_arches} noarch
- fpc
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64 ppc64le
- frama-c
ExclusiveArch: %{ocaml_native_compiler}
- freecol
ExclusiveArch: %{java_arches} noarch
- freemarker
ExclusiveArch: %{java_arches} noarch
- freerouting
ExclusiveArch: %{java_arches} noarch
- frescobaldi
ExclusiveArch: %{qt5_qtwebengine_arches}
- frysk
ExclusiveArch: x86_64 ppc64
- fuse-overlayfs
ExclusiveArch: %{arm64} ppc64le s390x x86_64
- fusesource-pom
ExclusiveArch: %{java_arches} noarch
- fwts
ExclusiveArch: x86_64 %{arm} aarch64 s390x riscv64 %{power64}
- fwupd-efi
ExclusiveArch: x86_64 aarch64
- ga
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- gap
ExclusiveArch: %{gap_arches}
- gap-pkg-ace
ExclusiveArch: %{gap_arches}
- gap-pkg-aclib
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-alnuth
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-atlasrep
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-autodoc
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-automata
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-autpgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-browse
ExclusiveArch: %{gap_arches}
- gap-pkg-caratinterface
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-circle
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-cohomolo
ExclusiveArch: %{gap_arches}
- gap-pkg-congruence
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-corelg
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crime
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crisp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crypting
ExclusiveArch: %{gap_arches}
- gap-pkg-cryst
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-crystcat
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-ctbllib
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-curlinterface
ExclusiveArch: %{gap_arches}
- gap-pkg-cvec
ExclusiveArch: %{gap_arches}
- gap-pkg-datastructures
ExclusiveArch: %{gap_arches}
- gap-pkg-design
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-digraphs
ExclusiveArch: %{gap_arches}
- gap-pkg-edim
ExclusiveArch: %{gap_arches}
- gap-pkg-factint
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-ferret
ExclusiveArch: %{gap_arches}
- gap-pkg-fga
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-fining
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-float
ExclusiveArch: %{gap_arches}
- gap-pkg-format
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-forms
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-fr
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-francy
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-gbnp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-genss
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-grape
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-groupoids
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-grpconst
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-guava
ExclusiveArch: %{gap_arches}
- gap-pkg-hap
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-hapcryst
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-hecke
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-images
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-io
ExclusiveArch: %{gap_arches}
- gap-pkg-irredsol
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-json
ExclusiveArch: %{gap_arches}
- gap-pkg-jupyterkernel
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-jupyterviz
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-laguna
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-liealgdb
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-liepring
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-liering
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-loops
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-lpres
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-mapclass
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-nautytracesinterface
ExclusiveArch: %{gap_arches}
- gap-pkg-nq
ExclusiveArch: %{gap_arches}
- gap-pkg-openmath
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-orb
ExclusiveArch: %{gap_arches}
- gap-pkg-polenta
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-polycyclic
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-polymaking
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-primgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-profiling
ExclusiveArch: %{gap_arches}
- gap-pkg-qpa
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-quagroup
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-radiroot
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-recog
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-repsn
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-resclasses
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-scscp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-semigroups
ExclusiveArch: %{gap_arches}
- gap-pkg-singular
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-sla
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-smallgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-smallsemi
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-sonata
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-sophus
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-spinsym
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-standardff
ExclusiveArch: %{gap_arches}
- gap-pkg-tomlib
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-toric
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-transgrp
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-utils
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-uuid
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-xmod
ExclusiveArch: %{gap_arches} noarch
- gap-pkg-zeromqinterface
ExclusiveArch: %{gap_arches}
- gappalib-coq
ExclusiveArch: %{ocaml_native_compiler}
- gbrainy
ExclusiveArch: %mono_arches
- gdb
ExclusiveArch: %{ix86} x86_64
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gearhead1
ExclusiveArch: %{fpc_arches}
- gearhead2
ExclusiveArch: %{fpc_arches}
- ghdl
ExclusiveArch: %{GNAT_arches}
- ghostwriter
ExclusiveArch: %{qt5_qtwebengine_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- gitqlient
ExclusiveArch: %{qt5_qtwebengine_arches}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- glibc32
ExclusiveArch: x86_64
- glibd
ExclusiveArch: %{ldc_arches}
- gnatcoll
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-bindings
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-db
ExclusiveArch: %{GPRbuild_arches}
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: %{efi}
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang
ExclusiveArch: %{golang_arches}
- google-gson
ExclusiveArch: %{java_arches} noarch
- google-guice
ExclusiveArch: %{java_arches} noarch
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- goverlay
ExclusiveArch: %{fpc_arches}
- gprbuild
ExclusiveArch: %{GPRbuild_arches}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha aarch64
- grafana
ExclusiveArch: %{grafana_arches}
- grafana-pcp
ExclusiveArch: %{grafanapcp_arches}
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- guava
ExclusiveArch: %{java_arches} noarch
- gudev-sharp
ExclusiveArch: %mono_arches
- guestfs-tools
ExclusiveArch: %{kernel_arches}
- gvisor-tap-vsock
ExclusiveArch: %{golang_arches_future}
- hamcrest
ExclusiveArch: %{java_arches} noarch
- harec
ExclusiveArch: x86_64 aarch64
- hawtjni
ExclusiveArch: %{java_arches} noarch
- hedgewars
ExclusiveArch: %{fpc_arches}
- hibernate-jpa-2.0-api
ExclusiveArch: %{java_arches} noarch
- hid4java
ExclusiveArch: %{java_arches} noarch
- hipcub
ExclusiveArch: x86_64
- hsakmt
ExclusiveArch: x86_64 aarch64 ppc64le
- httpcomponents-client
ExclusiveArch: %{java_arches} noarch
- httpcomponents-core
ExclusiveArch: %{java_arches} noarch
- httpcomponents-project
ExclusiveArch: %{java_arches} noarch
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64 aarch64
- icaro
ExclusiveArch: %{ix86} x86_64 noarch
- icedtea-web
ExclusiveArch: %{java_arches}
- icu4j
ExclusiveArch: %{java_arches} noarch
- imagej
ExclusiveArch: %{java_arches} noarch
- imhex
ExclusiveArch: x86_64 %{arm64}
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cm-compiler
ExclusiveArch: i686 x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- intel-compute-runtime
ExclusiveArch: x86_64
- intel-gmmlib
ExclusiveArch: x86_64 i686
- intel-igc
ExclusiveArch: x86_64
- intel-ipp-crypto-mb
ExclusiveArch: x86_64
- intel-ipsec-mb
ExclusiveArch: x86_64
- intel-mediasdk
ExclusiveArch: x86_64
- intel-undervolt
ExclusiveArch: i386 x86_64
- ioport
ExclusiveArch: %{ix86} x86_64
- ipmctl
ExclusiveArch: x86_64
- ispc
ExclusiveArch: x86_64 aarch64
- iucode-tool
ExclusiveArch: %{ix86} x86_64
- iyfct
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- jFormatString
ExclusiveArch: %{java_arches} noarch
- jackson-annotations
ExclusiveArch: %{java_arches} noarch
- jackson-bom
ExclusiveArch: %{java_arches} noarch
- jackson-core
ExclusiveArch: %{java_arches} noarch
- jackson-databind
ExclusiveArch: %{java_arches} noarch
- jackson-dataformats-binary
ExclusiveArch: %{java_arches} noarch
- jackson-dataformats-text
ExclusiveArch: %{java_arches} noarch
- jackson-jaxrs-providers
ExclusiveArch: %{java_arches} noarch
- jackson-modules-base
ExclusiveArch: %{java_arches} noarch
- jackson-parent
ExclusiveArch: %{java_arches} noarch
- jacoco
ExclusiveArch: %{java_arches} noarch
- jacop
ExclusiveArch: %{java_arches} noarch
- jakarta-activation
ExclusiveArch: %{java_arches} noarch
- jakarta-activation1
ExclusiveArch: %{java_arches} noarch
- jakarta-annotations
ExclusiveArch: %{java_arches} noarch
- jakarta-el
ExclusiveArch: %{java_arches} noarch
- jakarta-interceptors
ExclusiveArch: %{java_arches} noarch
- jakarta-json
ExclusiveArch: %{java_arches} noarch
- jakarta-mail
ExclusiveArch: %{java_arches} noarch
- jakarta-oro
ExclusiveArch: %{java_arches} noarch
- jakarta-saaj
ExclusiveArch: %{java_arches} noarch
- jakarta-server-pages
ExclusiveArch: %{java_arches} noarch
- jakarta-servlet
ExclusiveArch: %{java_arches} noarch
- jakarta-xml-ws
ExclusiveArch: %{java_arches} noarch
- janino
ExclusiveArch: %{java_arches} noarch
- jansi
ExclusiveArch: %{java_arches}
- jansi-native
ExclusiveArch: %{java_arches}
- jansi1
ExclusiveArch: %{java_arches} noarch
- java-1.8.0-openjdk
ExclusiveArch: %{java_arches}
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- java-1.8.0-openjdk-portable
ExclusiveArch: %{java_arches}
- java-11-openjdk
ExclusiveArch: %{java_arches}
- java-11-openjdk-portable
ExclusiveArch: %{java_arches}
- java-17-openjdk
ExclusiveArch: %{java_arches}
- java-17-openjdk-portable
ExclusiveArch: %{java_arches}
- java-diff-utils
ExclusiveArch: %{java_arches} noarch
- java-dirq
ExclusiveArch: %{java_arches} noarch
- java-jd-decompiler
ExclusiveArch: %{java_arches} noarch
- java-latest-openjdk
ExclusiveArch: %{java_arches}
- java-latest-openjdk-portable
ExclusiveArch: %{java_arches}
- java-runtime-decompiler
ExclusiveArch: %{java_arches} noarch
- java-scrypt
ExclusiveArch: %{java_arches} noarch
- java_cup
ExclusiveArch: %{java_arches} noarch
- javacc
ExclusiveArch: %{java_arches} noarch
- javacc-maven-plugin
ExclusiveArch: %{java_arches} noarch
- javaewah
ExclusiveArch: %{java_arches} noarch
- javapackages-bootstrap
ExclusiveArch: %{java_arches}
- javaparser
ExclusiveArch: %{java_arches} noarch
- javapoet
ExclusiveArch: %{java_arches} noarch
- javassist
ExclusiveArch: %{java_arches} noarch
- jaxb
ExclusiveArch: %{java_arches} noarch
- jaxb-api
ExclusiveArch: %{java_arches} noarch
- jaxb-api2
ExclusiveArch: %{java_arches} noarch
- jaxb-dtd-parser
ExclusiveArch: %{java_arches} noarch
- jaxb-fi
ExclusiveArch: %{java_arches} noarch
- jaxb-istack-commons
ExclusiveArch: %{java_arches} noarch
- jaxb-stax-ex
ExclusiveArch: %{java_arches} noarch
- jaxen
ExclusiveArch: %{java_arches} noarch
- jboss-jaxrs-2.0-api
ExclusiveArch: %{java_arches} noarch
- jboss-logging
ExclusiveArch: %{java_arches} noarch
- jboss-logging-tools
ExclusiveArch: %{java_arches} noarch
- jboss-parent
ExclusiveArch: %{java_arches} noarch
- jchardet
ExclusiveArch: %{java_arches} noarch
- jcip-annotations
ExclusiveArch: %{java_arches} noarch
- jctools
ExclusiveArch: %{java_arches} noarch
- jcuber
ExclusiveArch: %{java_arches} noarch
- jdeparser
ExclusiveArch: %{java_arches} noarch
- jdepend
ExclusiveArch: %{java_arches} noarch
- jdependency
ExclusiveArch: %{java_arches} noarch
- jdom
ExclusiveArch: %{java_arches} noarch
- jdom2
ExclusiveArch: %{java_arches} noarch
- jedit
ExclusiveArch: %{java_arches} noarch
- jericho-html
ExclusiveArch: %{java_arches} noarch
- jetty
ExclusiveArch: %{java_arches} noarch
- jflex
ExclusiveArch: %{java_arches} noarch
- jfreechart
ExclusiveArch: %{java_arches} noarch
- jgit
ExclusiveArch: %{java_arches} noarch
- jglobus
ExclusiveArch: %{java_arches} noarch
- jgoodies-common
ExclusiveArch: %{java_arches} noarch
- jgoodies-forms
ExclusiveArch: %{java_arches} noarch
- jgoodies-looks
ExclusiveArch: %{java_arches} noarch
- jigawatts
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- jline
ExclusiveArch: %{java_arches}
- jline2
ExclusiveArch: %{java_arches} noarch
- jmock
ExclusiveArch: %{java_arches} noarch
- jmol
ExclusiveArch: %{java_arches} noarch
- jna
ExclusiveArch: %{java_arches}
- jneuroml-core
ExclusiveArch: %{java_arches} noarch
- jni-inchi
ExclusiveArch: %{java_arches}
- jol
ExclusiveArch: %{java_arches} noarch
- jolokia-jvm-agent
ExclusiveArch: %{java_arches} noarch
- jopt-simple
ExclusiveArch: %{java_arches} noarch
- jorbis
ExclusiveArch: %{java_arches} noarch
- jowl
ExclusiveArch: %{nodejs_arches} noarch
- jpanoramamaker
ExclusiveArch: %{java_arches} noarch
- jsch
ExclusiveArch: %{java_arches} noarch
- jsch-agent-proxy
ExclusiveArch: %{java_arches} noarch
- json_simple
ExclusiveArch: %{java_arches} noarch
- jsoup
ExclusiveArch: %{java_arches} noarch
- jsr-305
ExclusiveArch: %{java_arches} noarch
- jss
ExclusiveArch: %{java_arches}
- jssc
ExclusiveArch: %{java_arches}
- jtidy
ExclusiveArch: %{java_arches} noarch
- julia
ExclusiveArch: x86_64
- junit
ExclusiveArch: %{java_arches} noarch
- junit5
ExclusiveArch: %{java_arches} noarch
- juniversalchardet
ExclusiveArch: %{java_arches} noarch
- jzlib
ExclusiveArch: %{java_arches} noarch
- kaidan
ExclusiveArch: %{qt5_qtwebengine_arches}
- kchmviewer
ExclusiveArch: %{qt5_qtwebengine_arches}
- kernel
ExclusiveArch: noarch x86_64 s390x aarch64 ppc64le
ExclusiveArch: noarch i386 i686 x86_64 s390x aarch64 ppc64le
- keylime-agent-rust
ExclusiveArch: %{rust_arches}
- keyring-ima-signer
ExclusiveArch: %{rust_arches}
- kf5-akonadi-search
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-audiocd-kio
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kblog
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarcore
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarutils
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kitinerary
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-ktnef
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-libkdcraw
ExclusiveArch: x86_64 ppc64le %{arm}
- kicad
ExclusiveArch: x86_64 aarch64 ppc64le
- kiwix-desktop
ExclusiveArch: %{qt5_qtwebengine_arches}
- knot-resolver
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- knotes
ExclusiveArch: x86_64 %{arm}
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x %{arm}
- laf-plugin
ExclusiveArch: %{java_arches} noarch
- lazarus
ExclusiveArch: %{fpc_arches}
- lazpaint
ExclusiveArch: %{fpc_arches}
- ldapjdk
ExclusiveArch: %{java_arches} noarch
- ldc
ExclusiveArch: %{ldc_arches} ppc64le
- ldc1.30
ExclusiveArch: %{ldc_arches} ppc64le
- ldc1.32
ExclusiveArch: %{ldc_arches} ppc64le
- libbase
ExclusiveArch: %{java_arches} noarch
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libdfp
ExclusiveArch: ppc ppc64 ppc64le s390 s390x x86_64
- libdispatch
ExclusiveArch: x86_64 aarch64 ppc64le
- libfonts
ExclusiveArch: %{java_arches} noarch
- libformula
ExclusiveArch: %{java_arches} noarch
- libguestfs
ExclusiveArch: %{kernel_arches}
- libica
ExclusiveArch: s390 s390x
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libkgapi
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- libkrun
ExclusiveArch: x86_64 aarch64
- libkrunfw
ExclusiveArch: x86_64 aarch64
- liblayout
ExclusiveArch: %{java_arches} noarch
- libloader
ExclusiveArch: %{java_arches} noarch
- libnxz
ExclusiveArch: ppc64le
- libocxl
ExclusiveArch: ppc64le
- libpsm2
ExclusiveArch: x86_64
- libquentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- libreoffice-TexMaths
ExclusiveArch: %{java_arches}
- librepository
ExclusiveArch: %{java_arches} noarch
- libretro-desmume2015
ExclusiveArch: i686 x86_64
- librtas
ExclusiveArch: %{power64}
- libserializer
ExclusiveArch: %{java_arches} noarch
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 %{ix86}
- libunicode
ExclusiveArch: x86_64 aarch64
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} s390x %{ix86} x86_64
- libva-nvidia-driver
ExclusiveArch: %{x86_64} %{ix86} %{arm64} ppc64le
- libvirt-java
ExclusiveArch: %{java_arches} noarch
- libvma
ExclusiveArch: x86_64 ppc64le ppc64 aarch64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzdnn
ExclusiveArch: s390x
- libzfcphbaapi
ExclusiveArch: s390 s390x
- libzpc
ExclusiveArch: s390x
- llhttp
ExclusiveArch: %{nodejs_arches}
- log4j
ExclusiveArch: %{java_arches} noarch
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- lucene
ExclusiveArch: %{java_arches} noarch
- lujavrite
ExclusiveArch: %{java_arches}
- luxcorerender
ExclusiveArch: x86_64
- mactel-boot
ExclusiveArch: x86_64
- magicmirror
ExclusiveArch: %{nodejs_arches} noarch
- magicmirror-module-airnow
ExclusiveArch: %{nodejs_arches} noarch
- magicmirror-module-onthisday
ExclusiveArch: %{nodejs_arches} noarch
- magicmirror-module-singlestock
ExclusiveArch: %{nodejs_arches} noarch
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- mariadb-java-client
ExclusiveArch: %{java_arches} noarch
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matrix-synapse
ExclusiveArch: %{rust_arches}
- maui-mauikit
ExclusiveArch: %{ix86} s390x aarch64 x86_64
- maven
ExclusiveArch: %{java_arches} noarch
- maven-antrun-plugin
ExclusiveArch: %{java_arches} noarch
- maven-archetype
ExclusiveArch: %{java_arches} noarch
- maven-archiver
ExclusiveArch: %{java_arches} noarch
- maven-artifact-transfer
ExclusiveArch: %{java_arches} noarch
- maven-assembly-plugin
ExclusiveArch: %{java_arches} noarch
- maven-bundle-plugin
ExclusiveArch: %{java_arches} noarch
- maven-clean-plugin
ExclusiveArch: %{java_arches} noarch
- maven-common-artifact-filters
ExclusiveArch: %{java_arches} noarch
- maven-compiler-plugin
ExclusiveArch: %{java_arches} noarch
- maven-dependency-analyzer
ExclusiveArch: %{java_arches} noarch
- maven-dependency-plugin
ExclusiveArch: %{java_arches} noarch
- maven-dependency-tree
ExclusiveArch: %{java_arches} noarch
- maven-doxia
ExclusiveArch: %{java_arches} noarch
- maven-doxia-sitetools
ExclusiveArch: %{java_arches} noarch
- maven-enforcer
ExclusiveArch: %{java_arches} noarch
- maven-file-management
ExclusiveArch: %{java_arches} noarch
- maven-filtering
ExclusiveArch: %{java_arches} noarch
- maven-invoker
ExclusiveArch: %{java_arches} noarch
- maven-invoker-plugin
ExclusiveArch: %{java_arches} noarch
- maven-jar-plugin
ExclusiveArch: %{java_arches} noarch
- maven-mapping
ExclusiveArch: %{java_arches} noarch
- maven-native
ExclusiveArch: %{java_arches} noarch
- maven-parent
ExclusiveArch: %{java_arches} noarch
- maven-patch-plugin
ExclusiveArch: %{java_arches} noarch
- maven-plugin-testing
ExclusiveArch: %{java_arches} noarch
- maven-plugin-tools
ExclusiveArch: %{java_arches} noarch
- maven-remote-resources-plugin
ExclusiveArch: %{java_arches} noarch
- maven-reporting-api
ExclusiveArch: %{java_arches} noarch
- maven-reporting-impl
ExclusiveArch: %{java_arches} noarch
- maven-resolver
ExclusiveArch: %{java_arches} noarch
- maven-resources-plugin
ExclusiveArch: %{java_arches} noarch
- maven-script-interpreter
ExclusiveArch: %{java_arches} noarch
- maven-shade-plugin
ExclusiveArch: %{java_arches} noarch
- maven-shared-incremental
ExclusiveArch: %{java_arches} noarch
- maven-shared-io
ExclusiveArch: %{java_arches} noarch
- maven-shared-utils
ExclusiveArch: %{java_arches} noarch
- maven-source-plugin
ExclusiveArch: %{java_arches} noarch
- maven-surefire
ExclusiveArch: %{java_arches} noarch
- maven-verifier
ExclusiveArch: %{java_arches} noarch
- maven-verifier-plugin
ExclusiveArch: %{java_arches} noarch
- maven-wagon
ExclusiveArch: %{java_arches} noarch
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mbpfan
ExclusiveArch: x86_64
- mcelog
ExclusiveArch: i686 x86_64
- mcrouter
ExclusiveArch: x86_64 aarch64 ppc64le
- mecab-java
ExclusiveArch: %java_arches
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- mellowplayer
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64 ppc64 ppc64le s390x aarch64
- memtest86+
ExclusiveArch: x86_64 %{ix86}
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} x86_64 riscv64
- miglayout
ExclusiveArch: %{java_arches} noarch
- mine_detector
ExclusiveArch: %{GPRbuild_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-libidn2
ExclusiveArch: %{ix86} x86_64 %{arm}
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- moby-engine
ExclusiveArch: %{golang_arches}
- mockito
ExclusiveArch: %{java_arches} noarch
- mod_mono
ExclusiveArch: %mono_arches
- modello
ExclusiveArch: %{java_arches} noarch
- moditect
ExclusiveArch: %{java_arches} noarch
- module-build-service
ExclusiveArch: %{ix86} x86_64 noarch
- modulemaker-maven-plugin
ExclusiveArch: %{java_arches} noarch
- mojo-executor
ExclusiveArch: %{java_arches} noarch
- mojo-parent
ExclusiveArch: %{java_arches} noarch
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64 %{arm}
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- msr-tools
ExclusiveArch: %{ix86} x86_64
- munge-maven-plugin
ExclusiveArch: %{java_arches} noarch
- mxparser
ExclusiveArch: %{java_arches} noarch
- mysql-connector-java
ExclusiveArch: %{java_arches} noarch
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- naev
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- naga
ExclusiveArch: %{java_arches} noarch
- nant
ExclusiveArch: %mono_arches
- nativejit
ExclusiveArch: x86_64
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- nekohtml
ExclusiveArch: %{java_arches} noarch
- netavark
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nodejs-acorn-object-spread
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bash-language-server
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buble
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-less
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-linefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nodemon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs18
ExclusiveArch: %{nodejs_arches}
- nodejs20
ExclusiveArch: %{nodejs_arches}
- nom-tam-fits
ExclusiveArch: %{java_arches} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: x86_64 ppc64le
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64 ppc64le
- objectweb-asm
ExclusiveArch: %{java_arches} noarch
- objenesis
ExclusiveArch: %{java_arches} noarch
- obs-service-rust2rpm
ExclusiveArch: %{rust_arches} noarch
- oci-seccomp-bpf-hook
ExclusiveArch: x86_64 %{power64} aarch64 s390x armv7hl
ExclusiveArch: %{golang_arches_future}
- oidn
ExclusiveArch: x86_64
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- oneVPL
ExclusiveArch: x86_64
- oneVPL-intel-gpu
ExclusiveArch: x86_64
- oneapi-level-zero
ExclusiveArch: x86_64
- onednn
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- onedrive
ExclusiveArch: %{ldc_arches}
- ongres-scram
ExclusiveArch: %{java_arches} noarch
- ongres-stringprep
ExclusiveArch: %{java_arches} noarch
- opae
ExclusiveArch: x86_64
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64 aarch64
ExclusiveArch: %{ix86} x86_64 aarch64
ExclusiveArch: x86_64
- openblas
ExclusiveArch: %{openblas_arches}
- openjdk-asmtools
ExclusiveArch: %{java_arches} noarch
- openjdk-asmtools7
ExclusiveArch: %{java_arches} noarch
- openjfx
ExclusiveArch: %{java_arches}
- openjfx8
ExclusiveArch: x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openms
ExclusiveArch: %{qt5_qtwebengine_arches}
- openni
ExclusiveArch: x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openoffice.org-diafilter
ExclusiveArch: %{java_arches}
- openpgl
ExclusiveArch: aarch64 x86_64
- openssl-ibmca
ExclusiveArch: s390 s390x
- openstack-java-sdk
ExclusiveArch: %{java_arches} noarch
- opentest4j
ExclusiveArch: %{java_arches} noarch
- openvkl
ExclusiveArch: aarch64 x86_64
- optee_client
ExclusiveArch: aarch64
- options
ExclusiveArch: %{java_arches} noarch
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- osgi-annotation
ExclusiveArch: %{java_arches} noarch
- osgi-compendium
ExclusiveArch: %{java_arches} noarch
- osgi-core
ExclusiveArch: %{java_arches} noarch
- pacemaker
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64 %{arm}
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- pageedit
ExclusiveArch: %{qt5_qtwebengine_arches}
- parserng
ExclusiveArch: %{java_arches} noarch
- pasdoc
ExclusiveArch: %{fpc_arches}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcfi
ExclusiveArch: %{java_arches} noarch
- pcm
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdbg
ExclusiveArch: ppc64le
- pdfbox
ExclusiveArch: %{java_arches} noarch
- pdfmod
ExclusiveArch: %mono_arches
- pdftk-java
ExclusiveArch: %{java_arches} noarch
- pentaho-libxml
ExclusiveArch: %{java_arches} noarch
- pentaho-reporting-flow-engine
ExclusiveArch: %{java_arches} noarch
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 %{arm}
- pesign-test-app
ExclusiveArch: x86_64
- picocli
ExclusiveArch: %{java_arches} noarch
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- plantuml
ExclusiveArch: %{java_arches} noarch
- plasma-dialer
ExclusiveArch: %{java_arches}
- playonlinux
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- plexus-archiver
ExclusiveArch: %{java_arches} noarch
- plexus-build-api
ExclusiveArch: %{java_arches} noarch
- plexus-build-api0
ExclusiveArch: %{java_arches} noarch
- plexus-cipher
ExclusiveArch: %{java_arches} noarch
- plexus-classworlds
ExclusiveArch: %{java_arches} noarch
- plexus-compiler
ExclusiveArch: %{java_arches} noarch
- plexus-component-api
ExclusiveArch: %{java_arches} noarch
- plexus-components-pom
ExclusiveArch: %{java_arches} noarch
- plexus-containers
ExclusiveArch: %{java_arches} noarch
- plexus-i18n
ExclusiveArch: %{java_arches} noarch
- plexus-interpolation
ExclusiveArch: %{java_arches} noarch
- plexus-io
ExclusiveArch: %{java_arches} noarch
- plexus-languages
ExclusiveArch: %{java_arches} noarch
- plexus-pom
ExclusiveArch: %{java_arches} noarch
- plexus-resources
ExclusiveArch: %{java_arches} noarch
- plexus-sec-dispatcher
ExclusiveArch: %{java_arches} noarch
- plexus-utils
ExclusiveArch: %{java_arches} noarch
- plexus-velocity
ExclusiveArch: %{java_arches} noarch
- podman
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- poppler-sharp
ExclusiveArch: %mono_arches
- popub
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- postgresql-jdbc
ExclusiveArch: %{java_arches} noarch
- powerpc-utils
ExclusiveArch: ppc %{power64}
- powerstat
ExclusiveArch: %{ix86} x86_64
- ppc64-diag
ExclusiveArch: ppc %{power64}
- procyon
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
ExclusiveArch: %{java_arches} noarch
- proguard
ExclusiveArch: %{java_arches} noarch
- prometheus-jmx-exporter
ExclusiveArch: %{java_arches} noarch
- prometheus-simpleclient-java
ExclusiveArch: %{java_arches} noarch
- proxygen
ExclusiveArch: x86_64 aarch64 ppc64le
- pveclib
ExclusiveArch: ppc %{power64}
- pvs-sbcl
ExclusiveArch: x86_64
- pyqtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- python-ast-monitor
ExclusiveArch: %{qt6_qtwebengine_arches} noarch
- python-cryptography
ExclusiveArch: %{rust_arches}
- python-damo
ExclusiveArch: x86_64 aarch64 ppc64le s390x noarch
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-javaobj
ExclusiveArch: %{java_arches} noarch
- python-jep
ExclusiveArch: %{java_arches}
- python-jnius
ExclusiveArch: %{java_arches}
- python-jupyter-polymake
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- python-openoffice
ExclusiveArch: noarch x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-pyqt6-webengine
ExclusiveArch: aarch64 x86_64
- python-setuptools-rust
ExclusiveArch: %{rust_arches}
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qatengine
ExclusiveArch: x86_64
- qatzip
ExclusiveArch: x86_64
- qbe
ExclusiveArch: x86_64 aarch64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qdox
ExclusiveArch: %{java_arches} noarch
- qemu-sanity-check
ExclusiveArch: %{kernel_arches}
- qevercloud
ExclusiveArch: %{qt5_qtwebengine_arches}
- qmapshack
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt6-qtwebengine
ExclusiveArch: aarch64 x86_64
- qt6-qtwebview
ExclusiveArch: aarch64 x86_64
- quantum-espresso
ExclusiveArch: x86_64 %{ix86} aarch64 %{power64}
- quentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- rEFInd
ExclusiveArch: %{efi}
- rachota
ExclusiveArch: %{java_arches} noarch
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- reflections
ExclusiveArch: %{java_arches} noarch
- reg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- regexp
ExclusiveArch: %{java_arches} noarch
- relaxng-datatype-java
ExclusiveArch: %{java_arches} noarch
- replacer
ExclusiveArch: %{java_arches} noarch
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- rescene
ExclusiveArch: %{mono_arches}
- resteasy
ExclusiveArch: %{java_arches} noarch
- restool
ExclusiveArch: aarch64
- restsharp
ExclusiveArch: %{mono_arches}
- retsnoop
ExclusiveArch: %{rust_arches}
- rhino
ExclusiveArch: %{java_arches} noarch
- river
ExclusiveArch: %{zig_arches}
- rkcommon
ExclusiveArch: x86_64 aarch64
- rocclr
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-compilersupport
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-device-libs
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-runtime
ExclusiveArch: x86_64 aarch64 ppc64le
- rocm-smi
ExclusiveArch: x86_64 aarch64 ppc64le
- rocminfo
ExclusiveArch: x86_64 aarch64 ppc64le
- rocprim
ExclusiveArch: x86_64
- rocrand
ExclusiveArch: x86_64
- rocthrust
ExclusiveArch: x86_64
- rpm-ostree
ExclusiveArch: %{rust_arches}
- rr
ExclusiveArch: %{ix86} x86_64 aarch64
- rssguard
ExclusiveArch: %{qt5_qtwebengine_arches}
- rstudio
ExclusiveArch: %{java_arches}
- rsyntaxtextarea
ExclusiveArch: %{java_arches} noarch
- rubygem-childprocess
ExclusiveArch: %{ix86} x86_64 noarch
- runc
ExclusiveArch: %{golang_arches_future}
- rundoc
ExclusiveArch: %{java_arches} noarch
- rust
ExclusiveArch: %{rust_arches}
- rust-actix
ExclusiveArch: %{rust_arches}
- rust-actix-router
ExclusiveArch: %{rust_arches}
- rust-argmax
ExclusiveArch: %{rust_arches}
- rust-askalono-cli
ExclusiveArch: %{rust_arches}
- rust-base-x
ExclusiveArch: %{rust_arches}
- rust-bit-set
ExclusiveArch: %{rust_arches}
- rust-bootupd
ExclusiveArch: x86_64 aarch64
- rust-brotli
ExclusiveArch: %{rust_arches}
- rust-capnp-futures
ExclusiveArch: %{rust_arches}
- rust-cascade
ExclusiveArch: %{rust_arches}
- rust-cast
ExclusiveArch: %{rust_arches}
- rust-chrono-tz
ExclusiveArch: %{rust_arches}
- rust-combine
ExclusiveArch: %{rust_arches}
- rust-compress-tools
ExclusiveArch: %{rust_arches}
- rust-const-oid0.6
ExclusiveArch: %{rust_arches}
- rust-coreos-installer
ExclusiveArch: %{rust_arches}
- rust-crossbeam
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-ctr
ExclusiveArch: %{rust_arches}
- rust-dashmap4
ExclusiveArch: %{rust_arches}
- rust-deflate
ExclusiveArch: %{rust_arches}
- rust-deflate0.8
ExclusiveArch: %{rust_arches}
- rust-drg
ExclusiveArch: %{rust_arches}
- rust-event-listener
ExclusiveArch: %{rust_arches}
- rust-fail
ExclusiveArch: %{rust_arches}
- rust-gag
ExclusiveArch: %{rust_arches}
- rust-getch
ExclusiveArch: %{rust_arches}
- rust-gzip-header
ExclusiveArch: %{rust_arches}
- rust-hamming
ExclusiveArch: %{rust_arches}
- rust-headers
ExclusiveArch: %{rust_arches}
- rust-hidapi
ExclusiveArch: %{rust_arches}
- rust-httparse
ExclusiveArch: %{rust_arches}
- rust-humantime-serde
ExclusiveArch: %{rust_arches}
- rust-hyperlocal
ExclusiveArch: %{rust_arches}
- rust-image0.23
ExclusiveArch: %{rust_arches}
- rust-inflate
ExclusiveArch: %{rust_arches}
- rust-jpeg-decoder0.1
ExclusiveArch: %{rust_arches}
- rust-k9
ExclusiveArch: %{rust_arches}
- rust-krunvm
ExclusiveArch: x86_64 aarch64
- rust-kstring
ExclusiveArch: %{rust_arches}
- rust-kvm-ioctls
ExclusiveArch: x86_64 aarch64
- rust-lebe
ExclusiveArch: %{rust_arches}
- rust-libslirp
ExclusiveArch: %{rust_arches}
- rust-libslirp-sys
ExclusiveArch: %{rust_arches}
- rust-msru
ExclusiveArch: x86_64
- rust-nanorand
ExclusiveArch: %{rust_arches}
- rust-netstat2
ExclusiveArch: %{rust_arches}
- rust-onig
ExclusiveArch: %{rust_arches}
- rust-openat-ext
ExclusiveArch: %{rust_arches}
- rust-ordered-float2
ExclusiveArch: %{rust_arches}
- rust-os_type
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-pathsearch
ExclusiveArch: %{rust_arches}
- rust-pq-sys
ExclusiveArch: %{rust_arches}
- rust-pretty-bytes
ExclusiveArch: %{rust_arches}
- rust-pretty-hex
ExclusiveArch: %{rust_arches}
- rust-primal-bit
ExclusiveArch: %{rust_arches}
- rust-primal-check
ExclusiveArch: %{rust_arches}
- rust-primal-estimate
ExclusiveArch: %{rust_arches}
- rust-procfs0.9
ExclusiveArch: %{rust_arches}
- rust-procs
ExclusiveArch: %{rust_arches}
- rust-prost
ExclusiveArch: %{rust_arches}
- rust-prost-derive
ExclusiveArch: %{rust_arches}
- rust-prost-derive0.8
ExclusiveArch: %{rust_arches}
- rust-prost0.8
ExclusiveArch: %{rust_arches}
- rust-psl-types
ExclusiveArch: %{rust_arches}
- rust-psm
ExclusiveArch: %{rust_arches}
- rust-pwd
ExclusiveArch: %{rust_arches}
- rust-rand_core
ExclusiveArch: %{rust_arches}
- rust-schemafy_core
ExclusiveArch: %{rust_arches}
- rust-schemafy_lib
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-serde-big-array
ExclusiveArch: %{rust_arches}
- rust-serde_qs
ExclusiveArch: %{rust_arches}
- rust-serde_yaml0.8
ExclusiveArch: %{rust_arches}
- rust-sev
ExclusiveArch: x86_64
- rust-sevctl
ExclusiveArch: x86_64
- rust-silver
ExclusiveArch: %{rust_arches}
- rust-sinit
ExclusiveArch: %{rust_arches}
- rust-snphost
ExclusiveArch: x86_64
- rust-ssh-key-dir
ExclusiveArch: %{rust_arches}
- rust-stacker
ExclusiveArch: %{rust_arches}
- rust-structopt
ExclusiveArch: %{rust_arches}
- rust-tiff0.6
ExclusiveArch: %{rust_arches}
- rust-totp-lite
ExclusiveArch: %{rust_arches}
- rust-tower-layer
ExclusiveArch: %{rust_arches}
- rust-tpm2-policy
ExclusiveArch: %{rust_arches}
- rust-tree-sitter
ExclusiveArch: %{rust_arches}
- rust-tree-sitter-cli
ExclusiveArch: %{rust_arches}
- rust-tzfile
ExclusiveArch: %{rust_arches}
- rust-ubyte
ExclusiveArch: %{rust_arches}
- rust-unicode-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-width
ExclusiveArch: %{rust_arches}
- rust-unicode-xid
ExclusiveArch: %{rust_arches}
- rust-uriparse
ExclusiveArch: %{rust_arches}
- rust-uucore
ExclusiveArch: %{rust_arches}
- rust-varlink_generator
ExclusiveArch: %{rust_arches}
- rust-varlink_parser
ExclusiveArch: %{rust_arches}
- rust-virtio-bindings
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vmm-sys-util
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vtparse
ExclusiveArch: %{rust_arches}
- rust-web-ext-native-messaging
ExclusiveArch: %{rust_arches}
- rust-wezterm-color-types
ExclusiveArch: %{rust_arches}
- rust-wezterm-dynamic
ExclusiveArch: %{rust_arches}
- rust-wezterm-dynamic-derive
ExclusiveArch: %{rust_arches}
- rust-wild
ExclusiveArch: %{rust_arches}
- rust-xxhash-rust
ExclusiveArch: %{rust_arches}
- rust-zbus1
ExclusiveArch: %{rust_arches}
- rust-zbus_macros1
ExclusiveArch: %{rust_arches}
- rust-zincati
ExclusiveArch: %{rust_arches}
- rust-zvariant2
ExclusiveArch: %{rust_arches}
- rust-zvariant_derive2
ExclusiveArch: %{rust_arches}
- s390utils
ExclusiveArch: s390 s390x
- sac
ExclusiveArch: %{java_arches} noarch
- safetyblanket
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- sagemath
ExclusiveArch: aarch64 x86_64
- sat4j
ExclusiveArch: %{java_arches} noarch
- sbcl
ExclusiveArch: %{ix86} x86_64 aarch64 %{power64}
- sbd
ExclusiveArch: i686 x86_64 s390x aarch64 ppc64le
- sblim-cim-client
ExclusiveArch: %{java_arches} noarch
- sblim-cim-client2
ExclusiveArch: %{java_arches} noarch
- sbsigntools
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- scala
ExclusiveArch: %{java_arches} noarch
- scalacheck
ExclusiveArch: %{java_arches} noarch
- scannotation
ExclusiveArch: %{java_arches} noarch
- sdljava
ExclusiveArch: %{java_arches}
- sdrangel
ExclusiveArch: %{qt5_qtwebengine_arches}
- sdsl-lite
ExclusiveArch: %{power64} x86_64 aarch64
- seabios
ExclusiveArch: x86_64
- seadrive-gui
ExclusiveArch: %{qt5_qtwebengine_arches}
- seafile-client
ExclusiveArch: %{qt5_qtwebengine_arches}
- seamonkey
ExclusiveArch: x86_64
- seqan3
ExclusiveArch: %{power64} x86_64 aarch64
- sequence-library
ExclusiveArch: %{java_arches} noarch
- servicelog
ExclusiveArch: ppc %{power64}
- shaman
ExclusiveArch: %{java_arches} noarch
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: %{efi}
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- shim-unsigned-x64
ExclusiveArch: x86_64
- sigul
ExclusiveArch: x86_64
- singularity-ce
ExclusiveArch: %{go_arches}
- sisu
ExclusiveArch: %{java_arches} noarch
- sisu-mojos
ExclusiveArch: %{java_arches} noarch
- skopeo
ExclusiveArch: %{golang_arches_future}
ExclusiveArch: aarch64 ppc64le s390x x86_64
- skychart
ExclusiveArch: %{fpc_arches}
- slf4j
ExclusiveArch: %{java_arches} noarch
- slirp4netns
ExclusiveArch: %{golang_arches_future}
- snakeyaml
ExclusiveArch: %{java_arches} noarch
- snapd
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm} aarch64 ppc64le s390x}
- snip
ExclusiveArch: %{java_arches} noarch
- softnet-stat
ExclusiveArch: %{rust_arches}
- soup-sharp
ExclusiveArch: %{mono_arches}
- spacebar
ExclusiveArch: %{java_arches}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spec-version-maven-plugin
ExclusiveArch: %{java_arches} noarch
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- spice-parent
ExclusiveArch: %{java_arches} noarch
- springlobby
ExclusiveArch: %{ix86} x86_64
- sqljet
ExclusiveArch: %{java_arches} noarch
- squeekboard
ExclusiveArch: %{rust_arches}
- startdde
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- stats-collect
ExclusiveArch: %{ix86} x86_64 noarch
- statsd
ExclusiveArch: %{nodejs_arches} noarch
- stratis-cli
ExclusiveArch: %{rust_arches} noarch
- stratisd
ExclusiveArch: %{rust_arches}
ExclusiveArch: %{rust_arches}
ExclusiveArch: %{rust_arches}
- string-template-maven-plugin
ExclusiveArch: %{java_arches} noarch
- stringtemplate
ExclusiveArch: %{java_arches} noarch
- stringtemplate4
ExclusiveArch: %{java_arches} noarch
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- subscription-manager-cockpit
ExclusiveArch: %{nodejs_arches} noarch
- supercollider
ExclusiveArch: %{qt5_qtwebengine_arches}
- supermin
ExclusiveArch: %{kernel_arches}
- svnkit
ExclusiveArch: %{java_arches} noarch
- svt-vp9
ExclusiveArch: x86_64
- swift-lang
ExclusiveArch: x86_64 aarch64
- swing-layout
ExclusiveArch: %{java_arches} noarch
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64le s390x
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- system-rules
ExclusiveArch: %{java_arches} noarch
- system76-keyboard-configurator
ExclusiveArch: %{rust_arches}
- systemd-boot
ExclusiveArch: %efi
- t-digest
ExclusiveArch: %{java_arches} noarch
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tagsoup
ExclusiveArch: %{java_arches} noarch
- tarantool
ExclusiveArch: %{ix86} x86_64
- tboot
ExclusiveArch: %{ix86} x86_64
- tdlib
ExclusiveArch: x86_64 aarch64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- ternimal
ExclusiveArch: %{rust_arches}
- test-interface
ExclusiveArch: %{java_arches} noarch
- testcloud
ExclusiveArch: %{kernel_arches} noarch
- testng
ExclusiveArch: %{java_arches} noarch
- texlive
ExclusiveArch: %{java_arches} noarch
- thermald
ExclusiveArch: %{ix86} x86_64
- tilix
ExclusiveArch: %{ldc_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- tomcat
ExclusiveArch: %{java_arches} noarch
- tomcat-native
ExclusiveArch: %{java_arches}
- tomcat-taglibs-parent
ExclusiveArch: %{java_arches} noarch
- tomcatjss
ExclusiveArch: %{java_arches} noarch
- torbrowser-launcher
ExclusiveArch: %{ix86} x86_64
- treelayout
ExclusiveArch: %{java_arches} noarch
- trilead-ssh2
ExclusiveArch: %{java_arches} noarch
- truth
ExclusiveArch: %{java_arches} noarch
- tuned-profiles-nfv-host-bin
ExclusiveArch: %{ix86} x86_64
- typescript
ExclusiveArch: %{nodejs_arches} noarch
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ucx
ExclusiveArch: aarch64 ppc64le x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
- umr
ExclusiveArch: x86_64 aarch64 ppc64le
- unetbootin
ExclusiveArch: %{ix86} x86_64
- univocity-parsers
ExclusiveArch: %{java_arches} noarch
- ursa-major
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- usd
ExclusiveArch: aarch64 x86_64
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- vakzination
ExclusiveArch: %{java_arches}
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vecmath1.2
ExclusiveArch: %{java_arches} noarch
- velocity
ExclusiveArch: %{java_arches} noarch
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- vim-syntastic
ExclusiveArch: %{java_arches} noarch
- virt-p2v
ExclusiveArch: x86_64
- virt-v2v
ExclusiveArch: x86_64
- virtiofsd
ExclusiveArch: %{rust_arches}
- virtualbox-guest-additions
ExclusiveArch: i686 x86_64
- vkd3d
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- vmaf
ExclusiveArch: x86_64
- voms-api-java
ExclusiveArch: %{java_arches} noarch
- voms-clients-java
ExclusiveArch: %{java_arches} noarch
- vrq
ExclusiveArch: %{ix86} x86_64
- wangle
ExclusiveArch: x86_64 aarch64 ppc64le
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{ix86} x86_64 %{arm}
- wasmedge
ExclusiveArch: x86_64 aarch64
- watchman
ExclusiveArch: x86_64 aarch64 ppc64le
- wdt
ExclusiveArch: x86_64 aarch64 ppc64le
- webkit2-sharp
ExclusiveArch: %mono_arches
- weld-parent
ExclusiveArch: %{java_arches} noarch
- why3
ExclusiveArch: %{ocaml_native_compiler}
- wine
ExclusiveArch: %{ix86} x86_64 aarch64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86}
- wine-dxvk
ExclusiveArch: %{ix86} x86_64
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- ws-commons-util
ExclusiveArch: %{java_arches} noarch
- wsdl4j
ExclusiveArch: %{java_arches} noarch
- wult
ExclusiveArch: x86_64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x2goclient
ExclusiveArch: x86_64
- x86-simd-sort
ExclusiveArch: x86_64
- xalan-j2
ExclusiveArch: %{java_arches} noarch
- xbean
ExclusiveArch: %{java_arches} noarch
- xbyak
ExclusiveArch: x86_64
- xbyak_aarch64
ExclusiveArch: aarch64
- xe-guest-utilities-latest
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: x86_64 aarch64
- xerces-j2
ExclusiveArch: %{java_arches} noarch
- xgap
ExclusiveArch: %{gap_arches}
- xml-commons-apis
ExclusiveArch: %{java_arches} noarch
- xml-commons-resolver
ExclusiveArch: %{java_arches} noarch
- xml-maven-plugin
ExclusiveArch: %{java_arches} noarch
- xmlada
ExclusiveArch: %{GPRbuild_arches}
- xmlgraphics-commons
ExclusiveArch: %{java_arches} noarch
- xmlpull
ExclusiveArch: %{java_arches} noarch
- xmlstreambuffer
ExclusiveArch: %{java_arches} noarch
- xmlunit
ExclusiveArch: %{java_arches} noarch
- xmvn
ExclusiveArch: %{java_arches} noarch
- xmvn-connector-ivy
ExclusiveArch: %{java_arches} noarch
- xmvn-generator
ExclusiveArch: %{java_arches}
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- xstream
ExclusiveArch: %{java_arches} noarch
- xz-java
ExclusiveArch: %{java_arches} noarch
- yarnpkg
ExclusiveArch: %{nodejs_arches} noarch
- zcfan
ExclusiveArch: x86_64
- zeal
ExclusiveArch: aarch64 x86_64
- zenon
ExclusiveArch: %{ocaml_native_compiler}
- zeromq-ada
ExclusiveArch: %{GPRbuild_arches}
- zig
ExclusiveArch: %{zig_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ng
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- zola
ExclusiveArch: %{rust_arches}
8 months, 4 weeks
Architecture specific change in rpms/llvm16.git
by githook-noreply@fedoraproject.org
The package rpms/llvm16.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/llvm16.git/commit/?id=5417f3951b2....
Change:
+%ifarch %{arm}
Thanks.
Full change:
============
commit 1412a43accedd12abca9f51031416b7932ed37e2
Author: Tulio Magno Quites Machado Filho <tuliom(a)redhat.com>
Date: Tue Aug 15 14:42:30 2023 -0300
Add missing sources
diff --git a/sources b/sources
new file mode 100644
index 0000000..b6d6373
--- /dev/null
+++ b/sources
@@ -0,0 +1,6 @@
+SHA512 (cmake-16.0.6.src.tar.xz) = 52ecd941d2d85a5b668caa5d0d40480cb6a97b3bf1174e634c2a93e9ef6d03670ca7e96abb0a60cb33ba537b93d5788754dab1f2f45c1f623f788162717d088b
+SHA512 (cmake-16.0.6.src.tar.xz.sig) = d20c5e51315aa476775e6ce886684b9f882ce283fc40aa6c1b8f03964c77a1e745e2e1fb00b3488dddfe1a04378e2bfd090350de28e58088525a5305ecb1bea6
+SHA512 (llvm-16.0.6.src.tar.xz) = 8d4cdadc9a1ad249fbf9248c8e56f3bcafab73a473a0b0ca73499ed8825c62e27668aac4f1d03341631e5ad93701621e834e9e196ca32eac3ef805cf1c860083
+SHA512 (llvm-16.0.6.src.tar.xz.sig) = 9adda28085f4a2e2a64dab1d8e4ff23c5629bbb0bb6b34afc081e44f6f85ac4f3c6cd0c3488af98c0fad939c33f9d2a8a0cbef67a577cd7fe3013bc2200452b1
+SHA512 (third-party-16.0.6.src.tar.xz) = 51683e92953eb57ed36ebc8a43cb688863edf4f24ba71965d57016cfdc17bad10f8f3942e9597a729329f89489597e79bb4653445ff1ec36ec03077adb1dd7b9
+SHA512 (third-party-16.0.6.src.tar.xz.sig) = aefb22ee35b2299e77669d72557079630fba5df2c0031c72a025082de3c4ca56ea0e1ec870c42d9056752195ad0e5b68258b548caf801ef4269e2ec1cd9da513
commit 5417f3951b25bea5257fab9b557956891ac746d5
Author: Tulio Magno Quites Machado Filho <tuliom(a)redhat.com>
Date: Tue Aug 15 14:34:12 2023 -0300
Import llvm16
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d4e7b84
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+/*.src.rpm
+/*.src.tar.xz
+/*.src.tar.xz.sig
+/cmake/
+/llvm-*.src/
+/results_llvm/
+/third-party/
diff --git a/0001-SystemZ-Improve-error-messages-for-unsupported-reloc.patch b/0001-SystemZ-Improve-error-messages-for-unsupported-reloc.patch
new file mode 100644
index 0000000..34128b6
--- /dev/null
+++ b/0001-SystemZ-Improve-error-messages-for-unsupported-reloc.patch
@@ -0,0 +1,184 @@
+From efbaf8bc61f4c0e29a3eaafb11ac0ddda8bd3dff Mon Sep 17 00:00:00 2001
+From: Ulrich Weigand <ulrich.weigand(a)de.ibm.com>
+Date: Fri, 30 Jun 2023 16:02:56 +0200
+Subject: [PATCH] [SystemZ] Improve error messages for unsupported relocations
+
+In the SystemZMCObjectWriter, we currently just abort in case
+some unsupported relocation in requested. However, as this
+situation can be triggered by invalid (inline) assembler input,
+we should really get a regular error message instead.
+---
+ .../MCTargetDesc/SystemZMCObjectWriter.cpp | 59 +++++++++++--------
+ 1 file changed, 35 insertions(+), 24 deletions(-)
+
+diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp
+index c23463ab9bde..0b11468afc52 100644
+--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp
++++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCObjectWriter.cpp
+@@ -9,6 +9,7 @@
+ #include "MCTargetDesc/SystemZMCFixups.h"
+ #include "MCTargetDesc/SystemZMCTargetDesc.h"
+ #include "llvm/BinaryFormat/ELF.h"
++#include "llvm/MC/MCContext.h"
+ #include "llvm/MC/MCELFObjectWriter.h"
+ #include "llvm/MC/MCExpr.h"
+ #include "llvm/MC/MCFixup.h"
+@@ -40,7 +41,7 @@ SystemZObjectWriter::SystemZObjectWriter(uint8_t OSABI)
+ /*HasRelocationAddend_=*/ true) {}
+
+ // Return the relocation type for an absolute value of MCFixupKind Kind.
+-static unsigned getAbsoluteReloc(unsigned Kind) {
++static unsigned getAbsoluteReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) {
+ switch (Kind) {
+ case FK_Data_1: return ELF::R_390_8;
+ case FK_Data_2: return ELF::R_390_16;
+@@ -49,11 +50,12 @@ static unsigned getAbsoluteReloc(unsigned Kind) {
+ case SystemZ::FK_390_12: return ELF::R_390_12;
+ case SystemZ::FK_390_20: return ELF::R_390_20;
+ }
+- llvm_unreachable("Unsupported absolute address");
++ Ctx.reportError(Loc, "Unsupported absolute address");
++ return 0;
+ }
+
+ // Return the relocation type for a PC-relative value of MCFixupKind Kind.
+-static unsigned getPCRelReloc(unsigned Kind) {
++static unsigned getPCRelReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) {
+ switch (Kind) {
+ case FK_Data_2: return ELF::R_390_PC16;
+ case FK_Data_4: return ELF::R_390_PC32;
+@@ -63,62 +65,69 @@ static unsigned getPCRelReloc(unsigned Kind) {
+ case SystemZ::FK_390_PC24DBL: return ELF::R_390_PC24DBL;
+ case SystemZ::FK_390_PC32DBL: return ELF::R_390_PC32DBL;
+ }
+- llvm_unreachable("Unsupported PC-relative address");
++ Ctx.reportError(Loc, "Unsupported PC-relative address");
++ return 0;
+ }
+
+ // Return the R_390_TLS_LE* relocation type for MCFixupKind Kind.
+-static unsigned getTLSLEReloc(unsigned Kind) {
++static unsigned getTLSLEReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) {
+ switch (Kind) {
+ case FK_Data_4: return ELF::R_390_TLS_LE32;
+ case FK_Data_8: return ELF::R_390_TLS_LE64;
+ }
+- llvm_unreachable("Unsupported absolute address");
++ Ctx.reportError(Loc, "Unsupported thread-local address (local-exec)");
++ return 0;
+ }
+
+ // Return the R_390_TLS_LDO* relocation type for MCFixupKind Kind.
+-static unsigned getTLSLDOReloc(unsigned Kind) {
++static unsigned getTLSLDOReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) {
+ switch (Kind) {
+ case FK_Data_4: return ELF::R_390_TLS_LDO32;
+ case FK_Data_8: return ELF::R_390_TLS_LDO64;
+ }
+- llvm_unreachable("Unsupported absolute address");
++ Ctx.reportError(Loc, "Unsupported thread-local address (local-dynamic)");
++ return 0;
+ }
+
+ // Return the R_390_TLS_LDM* relocation type for MCFixupKind Kind.
+-static unsigned getTLSLDMReloc(unsigned Kind) {
++static unsigned getTLSLDMReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) {
+ switch (Kind) {
+ case FK_Data_4: return ELF::R_390_TLS_LDM32;
+ case FK_Data_8: return ELF::R_390_TLS_LDM64;
+ case SystemZ::FK_390_TLS_CALL: return ELF::R_390_TLS_LDCALL;
+ }
+- llvm_unreachable("Unsupported absolute address");
++ Ctx.reportError(Loc, "Unsupported thread-local address (local-dynamic)");
++ return 0;
+ }
+
+ // Return the R_390_TLS_GD* relocation type for MCFixupKind Kind.
+-static unsigned getTLSGDReloc(unsigned Kind) {
++static unsigned getTLSGDReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) {
+ switch (Kind) {
+ case FK_Data_4: return ELF::R_390_TLS_GD32;
+ case FK_Data_8: return ELF::R_390_TLS_GD64;
+ case SystemZ::FK_390_TLS_CALL: return ELF::R_390_TLS_GDCALL;
+ }
+- llvm_unreachable("Unsupported absolute address");
++ Ctx.reportError(Loc, "Unsupported thread-local address (general-dynamic)");
++ return 0;
+ }
+
+ // Return the PLT relocation counterpart of MCFixupKind Kind.
+-static unsigned getPLTReloc(unsigned Kind) {
++static unsigned getPLTReloc(MCContext &Ctx, SMLoc Loc, unsigned Kind) {
+ switch (Kind) {
+ case SystemZ::FK_390_PC12DBL: return ELF::R_390_PLT12DBL;
+ case SystemZ::FK_390_PC16DBL: return ELF::R_390_PLT16DBL;
+ case SystemZ::FK_390_PC24DBL: return ELF::R_390_PLT24DBL;
+ case SystemZ::FK_390_PC32DBL: return ELF::R_390_PLT32DBL;
+ }
+- llvm_unreachable("Unsupported absolute address");
++ Ctx.reportError(Loc, "Unsupported PC-relative PLT address");
++ return 0;
+ }
+
+ unsigned SystemZObjectWriter::getRelocType(MCContext &Ctx,
+ const MCValue &Target,
+ const MCFixup &Fixup,
+ bool IsPCRel) const {
++ SMLoc Loc = Fixup.getLoc();
+ unsigned Kind = Fixup.getKind();
+ if (Kind >= FirstLiteralRelocationKind)
+ return Kind - FirstLiteralRelocationKind;
+@@ -126,38 +135,40 @@ unsigned SystemZObjectWriter::getRelocType(MCContext &Ctx,
+ switch (Modifier) {
+ case MCSymbolRefExpr::VK_None:
+ if (IsPCRel)
+- return getPCRelReloc(Kind);
+- return getAbsoluteReloc(Kind);
++ return getPCRelReloc(Ctx, Loc, Kind);
++ return getAbsoluteReloc(Ctx, Loc, Kind);
+
+ case MCSymbolRefExpr::VK_NTPOFF:
+ assert(!IsPCRel && "NTPOFF shouldn't be PC-relative");
+- return getTLSLEReloc(Kind);
++ return getTLSLEReloc(Ctx, Loc, Kind);
+
+ case MCSymbolRefExpr::VK_INDNTPOFF:
+ if (IsPCRel && Kind == SystemZ::FK_390_PC32DBL)
+ return ELF::R_390_TLS_IEENT;
+- llvm_unreachable("Only PC-relative INDNTPOFF accesses are supported for now");
++ Ctx.reportError(Loc, "Only PC-relative INDNTPOFF accesses are supported for now");
++ return 0;
+
+ case MCSymbolRefExpr::VK_DTPOFF:
+ assert(!IsPCRel && "DTPOFF shouldn't be PC-relative");
+- return getTLSLDOReloc(Kind);
++ return getTLSLDOReloc(Ctx, Loc, Kind);
+
+ case MCSymbolRefExpr::VK_TLSLDM:
+ assert(!IsPCRel && "TLSLDM shouldn't be PC-relative");
+- return getTLSLDMReloc(Kind);
++ return getTLSLDMReloc(Ctx, Loc, Kind);
+
+ case MCSymbolRefExpr::VK_TLSGD:
+ assert(!IsPCRel && "TLSGD shouldn't be PC-relative");
+- return getTLSGDReloc(Kind);
++ return getTLSGDReloc(Ctx, Loc, Kind);
+
+ case MCSymbolRefExpr::VK_GOT:
+ if (IsPCRel && Kind == SystemZ::FK_390_PC32DBL)
+ return ELF::R_390_GOTENT;
+- llvm_unreachable("Only PC-relative GOT accesses are supported for now");
++ Ctx.reportError(Loc, "Only PC-relative GOT accesses are supported for now");
++ return 0;
+
+ case MCSymbolRefExpr::VK_PLT:
+- assert(IsPCRel && "@PLT shouldt be PC-relative");
+- return getPLTReloc(Kind);
++ assert(IsPCRel && "@PLT shouldn't be PC-relative");
++ return getPLTReloc(Ctx, Loc, Kind);
+
+ default:
+ llvm_unreachable("Modifier not supported");
+--
+2.41.0
+
diff --git a/0001-cmake-Add-LLVM_UNITTEST_LINK_FLAGS-option.patch b/0001-cmake-Add-LLVM_UNITTEST_LINK_FLAGS-option.patch
new file mode 100644
index 0000000..192ca92
--- /dev/null
+++ b/0001-cmake-Add-LLVM_UNITTEST_LINK_FLAGS-option.patch
@@ -0,0 +1,39 @@
+From cf35b4622d31701d0c79e0441931518726f997f2 Mon Sep 17 00:00:00 2001
+From: Nikita Popov <npopov(a)redhat.com>
+Date: Fri, 30 Jun 2023 12:25:09 +0200
+Subject: [PATCH] Add LLVM_UNITTEST_LINK_FLAGS option
+
+This allows specifying linker flags that should only be applied
+to unit tests, e.g. to disable LTO optimization for them.
+---
+ llvm/cmake/modules/AddLLVM.cmake | 2 ++
+ llvm/cmake/modules/HandleLLVMOptions.cmake | 3 +++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
+index 94fc83db9344..7cf75223ce38 100644
+--- a/llvm/cmake/modules/AddLLVM.cmake
++++ b/llvm/cmake/modules/AddLLVM.cmake
+@@ -1592,6 +1592,8 @@ function(add_unittest test_suite test_name)
+ endif()
+ endif()
+
++ target_link_options(${test_name} PRIVATE "${LLVM_UNITTEST_LINK_FLAGS}")
++
+ set(outdir ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR})
+ set_output_directory(${test_name} BINARY_DIR ${outdir} LIBRARY_DIR ${outdir})
+ # libpthreads overrides some standard library symbols, so main
+diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake
+index 6119ecdce0f4..eec98162c2d7 100644
+--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
++++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
+@@ -1274,3 +1274,6 @@ endif()
+
+ set(LLVM_THIRD_PARTY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../third-party CACHE STRING
+ "Directory containing third party software used by LLVM (e.g. googletest)")
++
++set(LLVM_UNITTEST_LINK_FLAGS "" CACHE STRING
++ "Additional linker flags for unit tests")
+--
+2.40.1
+
diff --git a/0001-llvm-Add-install-targets-for-gtest.patch b/0001-llvm-Add-install-targets-for-gtest.patch
new file mode 100644
index 0000000..e84c444
--- /dev/null
+++ b/0001-llvm-Add-install-targets-for-gtest.patch
@@ -0,0 +1,32 @@
+From 8cc3870f09d728d9017c72eba9520117a4283fee Mon Sep 17 00:00:00 2001
+From: Tom Stellard <tstellar(a)redhat.com>
+Date: Thu, 17 Nov 2022 09:01:10 +0000
+Subject: Add install targets for gtest
+
+Stand-alone builds need an installed version of gtest in order to run
+the unittests.
+
+Differential Revision: https://reviews.llvm.org/D137890
+---
+ llvm/CMakeLists.txt | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
+index 60e1f29620af..d91338532815 100644
+--- a/llvm/CMakeLists.txt
++++ b/llvm/CMakeLists.txt
+@@ -693,6 +693,11 @@ option(LLVM_BUILD_TESTS
+ "Build LLVM unit tests. If OFF, just generate build targets." OFF)
+ option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." ON)
+
++option(LLVM_INSTALL_GTEST
++ "Install the llvm gtest library. This should be on if you want to do
++ stand-alone builds of the other projects and run their unit tests." OFF)
++
++
+ option(LLVM_BUILD_BENCHMARKS "Add LLVM benchmark targets to the list of default
+ targets. If OFF, benchmarks still could be built using Benchmarks target." OFF)
+ option(LLVM_INCLUDE_BENCHMARKS "Generate benchmark targets. If OFF, benchmarks can't be built." ON)
+--
+2.34.3
+
diff --git a/0101-Deactivate-markdown-doc.patch b/0101-Deactivate-markdown-doc.patch
new file mode 100644
index 0000000..92e048d
--- /dev/null
+++ b/0101-Deactivate-markdown-doc.patch
@@ -0,0 +1,25 @@
+diff -Naur a/llvm/docs/conf.py b/llvm/docs/conf.py
+--- a/llvm/docs/conf.py 2020-09-15 09:12:24.318287611 +0000
++++ b/llvm/docs/conf.py 2020-09-15 15:01:00.025893199 +0000
+@@ -36,20 +36,7 @@
+ '.rst': 'restructuredtext',
+ }
+
+-try:
+- import recommonmark
+-except ImportError:
+- # manpages do not use any .md sources
+- if not tags.has('builder-man'):
+- raise
+-else:
+- import sphinx
+- if sphinx.version_info >= (3, 0):
+- # This requires 0.5 or later.
+- extensions.append('recommonmark')
+- else:
+- source_parsers = {'.md': 'recommonmark.parser.CommonMarkParser'}
+- source_suffix['.md'] = 'markdown'
++import sphinx
+
+ # The encoding of source files.
+ #source_encoding = 'utf-8-sig'
diff --git a/0201-third-party-Add-install-targets-for-gtest.patch b/0201-third-party-Add-install-targets-for-gtest.patch
new file mode 100644
index 0000000..5c86130
--- /dev/null
+++ b/0201-third-party-Add-install-targets-for-gtest.patch
@@ -0,0 +1,47 @@
+From 8cc3870f09d728d9017c72eba9520117a4283fee Mon Sep 17 00:00:00 2001
+From: Tom Stellard <tstellar(a)redhat.com>
+Date: Thu, 17 Nov 2022 09:01:10 +0000
+Subject: Add install targets for gtest
+
+Stand-alone builds need an installed version of gtest in order to run
+the unittests.
+
+Differential Revision: https://reviews.llvm.org/D137890
+---
+ third-party/unittest/CMakeLists.txt | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/third-party/unittest/CMakeLists.txt b/third-party/unittest/CMakeLists.txt
+index 0e54e0e57c35..1d2a52730d7d 100644
+--- a/third-party/unittest/CMakeLists.txt
++++ b/third-party/unittest/CMakeLists.txt
+@@ -65,12 +65,25 @@ if (NOT LLVM_ENABLE_THREADS)
+ endif ()
+
+ target_include_directories(llvm_gtest
+- PUBLIC googletest/include googlemock/include
++ PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/googletest/include>
++ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/googlemock/include>
++ $<INSTALL_INTERFACE:include/llvm-gtest/>
++ $<INSTALL_INTERFACE:include/llvm-gmock/>
+ PRIVATE googletest googlemock
+ )
+
+ add_subdirectory(UnitTestMain)
+
++if (LLVM_INSTALL_GTEST)
++export(TARGETS llvm_gtest llvm_gtest_main LLVMTestingSupport FILE LLVMGTestConfig.cmake)
++install(TARGETS llvm_gtest llvm_gtest_main LLVMTestingSupport EXPORT LLVMGTestConfig
++ ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT llvm_gtest)
++ install(EXPORT LLVMGTestConfig DESTINATION ${LLVM_INSTALL_PACKAGE_DIR} COMPONENT llvm_gtest)
++ add_llvm_install_targets(install-llvm_gtest COMPONENT llvm_gtest DEPENDS llvm_gtest LLVMGTestConfig.cmake)
++ install(DIRECTORY googletest/include/gtest/ DESTINATION include/llvm-gtest/gtest/ COMPONENT llvm_gtest)
++ install(DIRECTORY googlemock/include/gmock/ DESTINATION include/llvm-gmock/gmock/ COMPONENT llvm_gtest)
++endif()
++
+ # When LLVM_LINK_LLVM_DYLIB is enabled, libLLVM.so is added to the interface
+ # link libraries for gtest and gtest_main. This means that any target, like
+ # unittests for example, that links against gtest will be forced to link
+--
+2.34.3
+
diff --git a/llvm16.spec b/llvm16.spec
new file mode 100644
index 0000000..76bce53
--- /dev/null
+++ b/llvm16.spec
@@ -0,0 +1,1317 @@
+# We are building with clang for faster/lower memory LTO builds.
+# See https://docs.fedoraproject.org/en-US/packaging-guidelines/#_compiler_macros
+%global toolchain clang
+
+# Opt out of https://fedoraproject.org/wiki/Changes/fno-omit-frame-pointer
+# https://bugzilla.redhat.com/show_bug.cgi?id=2158587
+%undefine _include_frame_pointers
+
+# Components enabled if supported by target architecture:
+%define gold_arches %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
+%ifarch %{gold_arches}
+ %bcond_without gold
+%else
+ %bcond_with gold
+%endif
+
+%bcond_without compat_build
+%bcond_without check
+
+#global rc_ver 4
+%global maj_ver 16
+%global min_ver 0
+%global patch_ver 6
+%global llvm_srcdir llvm-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:rc%{rc_ver}}.src
+%global cmake_srcdir cmake-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:rc%{rc_ver}}.src
+%global third_party_srcdir third-party-%{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:rc%{rc_ver}}.src
+%global _lto_cflags -flto=thin
+
+%if %{with compat_build}
+%global pkg_name llvm%{maj_ver}
+%global exec_suffix -%{maj_ver}
+%global install_prefix %{_libdir}/%{name}
+%global install_bindir %{install_prefix}/bin
+%global install_includedir %{install_prefix}/include
+%global install_libdir %{install_prefix}/lib
+
+%global pkg_includedir %{_includedir}/%{name}
+%global pkg_datadir %{install_prefix}/share
+%else
+%global pkg_name llvm
+%global install_prefix /usr
+%global install_bindir %{_bindir}
+%global install_libdir %{_libdir}
+%global install_includedir %{_includedir}
+%global pkg_datadir %{_datadir}
+%global exec_suffix %{nil}
+%endif
+
+%if 0%{?rhel}
+%global targets_to_build "X86;AMDGPU;PowerPC;NVPTX;SystemZ;AArch64;ARM;Mips;BPF;WebAssembly"
+%global experimental_targets_to_build ""
+%else
+%global targets_to_build "all"
+%global experimental_targets_to_build "AVR"
+%endif
+
+%global build_install_prefix %{buildroot}%{install_prefix}
+
+# Lower memory usage of dwz on s390x
+%global _dwz_low_mem_die_limit_s390x 1
+%global _dwz_max_die_limit_s390x 1000000
+
+%ifarch %{arm}
+# koji overrides the _gnu variable to be gnu, which is not correct for clang, so
+# we need to hard-code the correct triple here.
+%global llvm_triple armv7l-redhat-linux-gnueabihf
+%else
+%global llvm_triple %{_target_platform}
+%endif
+
+# https://fedoraproject.org/wiki/Changes/PythonSafePath#Opting_out
+# Don't add -P to Python shebangs
+# The executable Python scripts in /usr/share/opt-viewer/ import each other
+%undefine _py3_shebang_P
+
+Name: %{pkg_name}
+Version: %{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:~rc%{rc_ver}}
+Release: 5%{?dist}
+Summary: The Low Level Virtual Machine
+
+License: Apache-2.0 WITH LLVM-exception OR NCSA
+URL: http://llvm.org
+Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ver}...
+Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ver}...
+Source2: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ver}...
+Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ver}...
+Source4: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ver}...
+Source5: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{maj_ver}...
+Source6: release-keys.asc
+
+# Backported from LLVM 17
+Patch1: 0001-SystemZ-Improve-error-messages-for-unsupported-reloc.patch
+# See https://reviews.llvm.org/D137890 for the next two patches
+Patch2: 0001-llvm-Add-install-targets-for-gtest.patch
+# Backport of https://reviews.llvm.org/D154212 from LLVM 17.
+Patch3: 0001-cmake-Add-LLVM_UNITTEST_LINK_FLAGS-option.patch
+
+# RHEL-specific patch to avoid unwanted recommonmark dep
+Patch101: 0101-Deactivate-markdown-doc.patch
+# Patching third-party dir with a 200 offset in patch number
+Patch201: 0201-third-party-Add-install-targets-for-gtest.patch
+
+BuildRequires: gcc
+BuildRequires: gcc-c++
+BuildRequires: clang
+BuildRequires: cmake
+BuildRequires: ninja-build
+BuildRequires: zlib-devel
+BuildRequires: libffi-devel
+BuildRequires: ncurses-devel
+BuildRequires: python3-psutil
+BuildRequires: python3-sphinx
+%if %{undefined rhel}
+BuildRequires: python3-recommonmark
+%endif
+BuildRequires: multilib-rpm-config
+%if %{with gold}
+BuildRequires: binutils-devel
+%endif
+%ifarch %{valgrind_arches}
+# Enable extra functionality when run the LLVM JIT under valgrind.
+BuildRequires: valgrind-devel
+%endif
+# LLVM's LineEditor library will use libedit if it is available.
+BuildRequires: libedit-devel
+# We need python3-devel for %%py3_shebang_fix
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+
+# For origin certification
+BuildRequires: gnupg2
+
+
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+
+Provides: llvm(major) = %{maj_ver}
+
+%description
+LLVM is a compiler infrastructure designed for compile-time, link-time,
+runtime, and idle-time optimization of programs from arbitrary programming
+languages. The compiler infrastructure includes mirror sets of programming
+tools as well as libraries with equivalent functionality.
+
+%package devel
+Summary: Libraries and header files for LLVM
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+# The installed LLVM cmake files will add -ledit to the linker flags for any
+# app that requires the libLLVMLineEditor, so we need to make sure
+# libedit-devel is available.
+Requires: libedit-devel
+# The installed cmake files reference binaries from llvm-test and llvm-static.
+# We tried in the past to split the cmake exports for these binaries out into
+# separate files, so that llvm-devel would not need to Require these packages,
+# but this caused bugs (rhbz#1773678) and forced us to carry two non-upstream
+# patches.
+Requires: %{name}-static%{?_isa} = %{version}-%{release}
+%if %{without compat_build}
+Requires: %{name}-test%{?_isa} = %{version}-%{release}
+%endif
+
+
+Requires(post): %{_sbindir}/alternatives
+Requires(postun): %{_sbindir}/alternatives
+
+Provides: llvm-devel(major) = %{maj_ver}
+
+%description devel
+This package contains library and header files needed to develop new native
+programs that use the LLVM infrastructure.
+
+%package doc
+Summary: Documentation for LLVM
+BuildArch: noarch
+Requires: %{name} = %{version}-%{release}
+
+%description doc
+Documentation for the LLVM compiler infrastructure.
+
+%package libs
+Summary: LLVM shared libraries
+
+%description libs
+Shared libraries for the LLVM compiler infrastructure.
+
+%package static
+Summary: LLVM static libraries
+Conflicts: %{name}-devel < 8
+
+Provides: llvm-static(major) = %{maj_ver}
+
+%description static
+Static libraries for the LLVM compiler infrastructure.
+
+%package cmake-utils
+Summary: CMake utilities shared across LLVM subprojects
+
+%description cmake-utils
+CMake utilities shared across LLVM subprojects.
+This is for internal use by LLVM packages only.
+
+%if %{without compat_build}
+
+%package test
+Summary: LLVM regression tests
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+
+Provides: llvm-test(major) = %{maj_ver}
+
+%description test
+LLVM regression tests.
+
+%package googletest
+Summary: LLVM's modified googletest sources
+
+%description googletest
+LLVM's modified googletest sources.
+
+%endif
+
+%prep
+%{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
+%{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE3}' --data='%{SOURCE2}'
+%{gpgverify} --keyring='%{SOURCE6}' --signature='%{SOURCE5}' --data='%{SOURCE4}'
+%setup -T -q -b 2 -n %{cmake_srcdir}
+# TODO: It would be more elegant to set -DLLVM_COMMON_CMAKE_UTILS=%{_builddir}/%{cmake_srcdir},
+# but this is not a CACHED variable, so we can't actually set it externally :(
+cd ..
+mv %{cmake_srcdir} cmake
+%setup -T -q -b 4 -n %{third_party_srcdir}
+%autopatch -m200 -p2
+cd ..
+mv %{third_party_srcdir} third-party
+
+%setup -T -q -b 0 -n %{llvm_srcdir}
+%autopatch -M%{?!rhel:100}%{?rhel:200} -p2
+
+%py3_shebang_fix \
+ test/BugPoint/compile-custom.ll.py \
+ tools/opt-viewer/*.py \
+ utils/update_cc_test_checks.py
+
+%build
+
+%ifarch s390 s390x %{arm} %ix86
+# Decrease debuginfo verbosity to reduce memory consumption during final library linking
+%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
+%endif
+
+# Copy CFLAGS into ASMFLAGS, so -fcf-protection is used when compiling assembly files.
+export ASMFLAGS=$CFLAGS
+
+# force off shared libs as cmake macros turns it on.
+%cmake -G Ninja \
+ -DBUILD_SHARED_LIBS:BOOL=OFF \
+ -DLLVM_PARALLEL_LINK_JOBS=1 \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DCMAKE_SKIP_RPATH:BOOL=ON \
+%ifarch s390 %{arm} %ix86
+ -DCMAKE_C_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" \
+ -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" \
+%endif
+%if %{without compat_build}
+%if 0%{?__isa_bits} == 64
+ -DLLVM_LIBDIR_SUFFIX=64 \
+%else
+ -DLLVM_LIBDIR_SUFFIX= \
+%endif
+%endif
+ \
+ -DLLVM_TARGETS_TO_BUILD=%{targets_to_build} \
+ -DLLVM_ENABLE_LIBCXX:BOOL=OFF \
+ -DLLVM_ENABLE_ZLIB:BOOL=ON \
+ -DLLVM_ENABLE_FFI:BOOL=ON \
+ -DLLVM_ENABLE_RTTI:BOOL=ON \
+ -DLLVM_USE_PERF:BOOL=ON \
+%if %{with gold}
+ -DLLVM_BINUTILS_INCDIR=%{_includedir} \
+%endif
+ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=%{experimental_targets_to_build} \
+ \
+ -DLLVM_BUILD_RUNTIME:BOOL=ON \
+ \
+ -DLLVM_INCLUDE_TOOLS:BOOL=ON \
+ -DLLVM_BUILD_TOOLS:BOOL=ON \
+ \
+ -DLLVM_INCLUDE_TESTS:BOOL=ON \
+ -DLLVM_BUILD_TESTS:BOOL=ON \
+%if %{with compat_build}
+ -DLLVM_INSTALL_GTEST:BOOL=OFF \
+%else
+ -DLLVM_INSTALL_GTEST:BOOL=ON \
+%endif
+ -DLLVM_LIT_ARGS=-v \
+ \
+ -DLLVM_INCLUDE_EXAMPLES:BOOL=ON \
+ -DLLVM_BUILD_EXAMPLES:BOOL=OFF \
+ \
+ -DLLVM_INCLUDE_UTILS:BOOL=ON \
+%if %{with compat_build}
+ -DLLVM_INSTALL_UTILS:BOOL=OFF \
+%else
+ -DLLVM_INSTALL_UTILS:BOOL=ON \
+ -DLLVM_UTILS_INSTALL_DIR:PATH=%{_bindir} \
+ -DLLVM_TOOLS_INSTALL_DIR:PATH=bin \
+%endif
+ \
+ -DLLVM_INCLUDE_DOCS:BOOL=ON \
+ -DLLVM_BUILD_DOCS:BOOL=ON \
+ -DLLVM_ENABLE_SPHINX:BOOL=ON \
+ -DLLVM_ENABLE_DOXYGEN:BOOL=OFF \
+ \
+%if %{without compat_build}
+ -DLLVM_VERSION_SUFFIX='' \
+%endif
+ -DLLVM_UNREACHABLE_OPTIMIZE:BOOL=OFF \
+ -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON \
+ -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \
+ -DLLVM_BUILD_EXTERNAL_COMPILER_RT:BOOL=ON \
+ -DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL=OFF \
+ -DLLVM_DEFAULT_TARGET_TRIPLE=%{llvm_triple} \
+ -DSPHINX_WARNINGS_AS_ERRORS=OFF \
+ -DCMAKE_INSTALL_PREFIX=%{install_prefix} \
+ -DLLVM_INSTALL_SPHINX_HTML_DIR=%{_pkgdocdir}/html \
+ -DSPHINX_EXECUTABLE=%{_bindir}/sphinx-build-3 \
+ -DLLVM_INCLUDE_BENCHMARKS=OFF \
+ -DLLVM_UNITTEST_LINK_FLAGS="-Wl,-plugin-opt=O0"
+
+# Build libLLVM.so first. This ensures that when libLLVM.so is linking, there
+# are no other compile jobs running. This will help reduce OOM errors on the
+# builders without having to artificially limit the number of concurrent jobs.
+%cmake_build --target LLVM
+%cmake_build
+
+%install
+%cmake_install
+
+mkdir -p %{buildroot}/%{_bindir}
+
+%if %{without compat_build}
+
+# Fix some man pages
+ln -s llvm-config.1 %{buildroot}%{_mandir}/man1/llvm-config%{exec_suffix}-%{__isa_bits}.1
+
+# Install binaries needed for lit tests
+%global test_binaries llvm-isel-fuzzer llvm-opt-fuzzer
+
+for f in %{test_binaries}
+do
+ install -m 0755 %{_vpath_builddir}/bin/$f %{buildroot}%{_bindir}
+done
+
+# Remove testing of update utility tools
+rm -rf test/tools/UpdateTestChecks
+
+%multilib_fix_c_header --file %{_includedir}/llvm/Config/llvm-config.h
+
+# Install libraries needed for unittests
+%global build_libdir %{_vpath_builddir}/%{_lib}
+
+install %{build_libdir}/libLLVMTestingSupport.a %{buildroot}%{_libdir}
+install %{build_libdir}/libLLVMTestingAnnotations.a %{buildroot}%{_libdir}
+
+%if %{with gold}
+# Add symlink to lto plugin in the binutils plugin directory.
+%{__mkdir_p} %{buildroot}%{_libdir}/bfd-plugins/
+ln -s -t %{buildroot}%{_libdir}/bfd-plugins/ ../LLVMgold.so
+%endif
+
+%else
+
+# Add version suffix to binaries
+for f in %{buildroot}/%{install_bindir}/*; do
+ filename=`basename $f`
+ ln -s ../../%{install_bindir}/$filename %{buildroot}/%{_bindir}/$filename%{exec_suffix}
+done
+
+# Move header files
+mkdir -p %{buildroot}/%{pkg_includedir}
+ln -s ../../../%{install_includedir}/llvm %{buildroot}/%{pkg_includedir}/llvm
+ln -s ../../../%{install_includedir}/llvm-c %{buildroot}/%{pkg_includedir}/llvm-c
+
+# Fix multi-lib
+%multilib_fix_c_header --file %{install_includedir}/llvm/Config/llvm-config.h
+
+# Create ld.so.conf.d entry
+mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d
+cat >> %{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf << EOF
+%{install_libdir}
+EOF
+
+# Add version suffix to man pages and move them to mandir.
+mkdir -p %{buildroot}/%{_mandir}/man1
+for f in %{build_install_prefix}/share/man/man1/*; do
+ filename=`basename $f | cut -f 1 -d '.'`
+ mv $f %{buildroot}%{_mandir}/man1/$filename%{exec_suffix}.1
+done
+
+# Remove opt-viewer, since this is just a compatibility package.
+rm -Rf %{build_install_prefix}/share/opt-viewer
+
+%endif
+
+# llvm-config special casing. llvm-config is managed by update-alternatives.
+# the original file must remain available for compatibility with the CMake
+# infrastructure. Without compat, cmake points to the symlink, with compat it
+# points to the original file.
+
+%if %{without compat_build}
+
+mv %{buildroot}/%{install_bindir}/llvm-config %{buildroot}/%{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits}
+# We still maintain a versionned symlink for consistency across llvm versions.
+# This is specific to the non-compat build and matches the exec prefix for
+# compat builds. An isa-agnostic versionned symlink is also maintained in the (un)install
+# steps.
+(cd %{buildroot}/%{install_bindir} ; ln -s llvm-config%{exec_suffix}-%{__isa_bits} llvm-config-%{maj_ver}-%{__isa_bits} )
+# ghost presence
+touch %{buildroot}%{_bindir}/llvm-config-%{maj_ver}
+
+%else
+
+rm %{buildroot}%{_bindir}/llvm-config%{exec_suffix}
+(cd %{buildroot}/%{install_bindir} ; ln -s llvm-config llvm-config%{exec_suffix}-%{__isa_bits} )
+
+%endif
+
+# ghost presence
+touch %{buildroot}%{_bindir}/llvm-config%{exec_suffix}
+
+mkdir -p %{buildroot}%{pkg_datadir}/llvm/cmake
+cp -Rv ../cmake/* %{buildroot}%{pkg_datadir}/llvm/cmake
+
+%check
+# Disable check section on arm due to some kind of memory related failure.
+# Possibly related to https://bugzilla.redhat.com/show_bug.cgi?id=1920183
+%ifnarch %{arm}
+
+# TODO: Fix the failures below
+%ifarch %{arm}
+rm test/tools/llvm-readobj/ELF/dependent-libraries.test
+%endif
+
+# non reproducible errors
+rm test/tools/dsymutil/X86/swift-interface.test
+
+%if %{with check}
+# FIXME: use %%cmake_build instead of %%__ninja
+LD_LIBRARY_PATH=%{buildroot}/%{install_libdir} %{__ninja} check-all -C %{_vpath_builddir}
+%endif
+
+%endif
+
+%ldconfig_scriptlets libs
+
+%post devel
+%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config%{exec_suffix} llvm-config%{exec_suffix} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{__isa_bits}
+%if %{without compat_build}
+%{_sbindir}/update-alternatives --install %{_bindir}/llvm-config-%{maj_ver} llvm-config-%{maj_ver} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits} %{__isa_bits}
+%endif
+
+%postun devel
+if [ $1 -eq 0 ]; then
+ %{_sbindir}/update-alternatives --remove llvm-config%{exec_suffix} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits}
+%if %{without compat_build}
+ %{_sbindir}/update-alternatives --remove llvm-config-%{maj_ver} %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits}
+%endif
+fi
+
+%files
+%license LICENSE.TXT
+%exclude %{_mandir}/man1/llvm-config*
+%{_mandir}/man1/*
+%{_bindir}/*
+
+%exclude %{_bindir}/llvm-config%{exec_suffix}
+%exclude %{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits}
+
+%if %{without compat_build}
+%exclude %{_bindir}/llvm-config-%{maj_ver}
+%exclude %{install_bindir}/llvm-config-%{maj_ver}-%{__isa_bits}
+%exclude %{_bindir}/not
+%exclude %{_bindir}/count
+%exclude %{_bindir}/yaml-bench
+%exclude %{_bindir}/lli-child-target
+%exclude %{_bindir}/llvm-isel-fuzzer
+%exclude %{_bindir}/llvm-opt-fuzzer
+%{_datadir}/opt-viewer
+%else
+%{install_bindir}
+%endif
+
+%files libs
+%license LICENSE.TXT
+%{install_libdir}/libLLVM-%{maj_ver}.so
+%if %{without compat_build}
+%if %{with gold}
+%{_libdir}/LLVMgold.so
+%{_libdir}/bfd-plugins/LLVMgold.so
+%endif
+%{_libdir}/libLLVM-%{maj_ver}.%{min_ver}*.so
+%{_libdir}/libLTO.so*
+%else
+%config(noreplace) %{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf
+%if %{with gold}
+%{_libdir}/%{name}/lib/LLVMgold.so
+%endif
+%{install_libdir}/libLLVM-%{maj_ver}.%{min_ver}*.so
+%{install_libdir}/libLTO.so*
+%exclude %{install_libdir}/libLTO.so
+%endif
+%{install_libdir}/libRemarks.so*
+
+%files devel
+%license LICENSE.TXT
+
+%ghost %{_bindir}/llvm-config%{exec_suffix}
+%{install_bindir}/llvm-config%{exec_suffix}-%{__isa_bits}
+%{_mandir}/man1/llvm-config*
+
+%{install_includedir}/llvm
+%{install_includedir}/llvm-c
+%{install_libdir}/libLLVM.so
+%{install_libdir}/cmake/llvm
+%if %{without compat_build}
+%{install_bindir}/llvm-config-%{maj_ver}-%{__isa_bits}
+%ghost %{_bindir}/llvm-config-%{maj_ver}
+%else
+%{pkg_includedir}/llvm
+%{pkg_includedir}/llvm-c
+%{install_libdir}/libLTO.so
+%endif
+
+%files doc
+%license LICENSE.TXT
+%doc %{_pkgdocdir}/html
+
+%files static
+%license LICENSE.TXT
+%{install_libdir}/*.a
+%if %{without compat_build}
+%exclude %{install_libdir}/libLLVMTestingSupport.a
+%exclude %{install_libdir}/libLLVMTestingAnnotations.a
+%exclude %{install_libdir}/libllvm_gtest.a
+%exclude %{install_libdir}/libllvm_gtest_main.a
+%endif
+
+%files cmake-utils
+%license LICENSE.TXT
+%{pkg_datadir}/llvm/cmake
+
+%if %{without compat_build}
+
+%files test
+%license LICENSE.TXT
+%{_bindir}/not
+%{_bindir}/count
+%{_bindir}/yaml-bench
+%{_bindir}/lli-child-target
+%{_bindir}/llvm-isel-fuzzer
+%{_bindir}/llvm-opt-fuzzer
+
+%files googletest
+%license LICENSE.TXT
+%{install_libdir}/libLLVMTestingSupport.a
+%{install_libdir}/libLLVMTestingAnnotations.a
+%{install_libdir}/libllvm_gtest.a
+%{install_libdir}/libllvm_gtest_main.a
+%{install_includedir}/llvm-gtest
+%{install_includedir}/llvm-gmock
+
+%endif
+
+%changelog
+* Thu Jul 20 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 16.0.6-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Mon Jul 10 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.6-4
+- Use LLVM_UNITTEST_LINK_FLAGS to reduce link times for unit tests
+
+* Mon Jul 03 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.6-3
+- Improve error messages for unsupported relocs on s390x (rhbz#2216906)
+- Disable LLVM_UNREACHABLE_OPTIMIZE
+
+* Wed Jun 14 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.6-1
+- Update to LLVM 16.0.6
+
+* Fri Jun 09 2023 Nikita Popov <npopov(a)redhat.com> - 16.0.5-2
+- Split off llvm-cmake-utils package
+
+* Mon Jun 05 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.5-1
+- Update to LLVM 16.0.5
+
+* Fri May 19 2023 Yaakov Selkowitz <yselkowi(a)redhat.com> - 16.0.4-2
+- Avoid recommonmark dependency in RHEL builds
+
+* Thu May 18 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.4-1
+- Update to LLVM 16.0.4
+
+* Tue May 09 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.3-1
+- Update to LLVM 16.0.3
+
+* Tue Apr 25 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.2-1
+- Update to LLVM 16.0.2
+
+* Tue Apr 11 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.1-1
+- Update to LLVM 16.0.1
+
+* Thu Mar 23 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.0-2
+- Distribute libllvm_gtest.a and libllvm_gtest_main.a with llvm-googletest
+- Stop distributing /usr/share/llvm/src/utils
+
+* Mon Mar 20 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.0-1
+- Update to LLVM 16.0.0
+
+* Thu Mar 16 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.0~rc4-2
+- Fix the ppc64le triple
+
+* Tue Mar 14 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.0~rc4-1
+- Update to LLVM 16.0.0 RC4
+
+* Fri Mar 10 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.0~rc3-2
+- Fix llvm-exegesis failures on s390x
+
+* Wed Feb 22 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.0~rc3-1
+- Update to LLVM 16.0.0 RC3
+
+* Wed Feb 01 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 16.0.0~rc1-1
+- Update to LLVM 16.0.0 RC1
+
+* Thu Jan 19 2023 Tulio Magno Quites Machado Filho <tuliom(a)redhat.com> - 15.0.7-3
+- Update license to SPDX identifiers.
+- Include the Apache license adopted in 2019.
+
+* Thu Jan 19 2023 Fedora Release Engineering <releng(a)fedoraproject.org> - 15.0.7-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Thu Jan 12 2023 Nikita Popov <npopov(a)redhat.com> - 15.0.7-1
+- Update to LLVM 15.0.7
+
+* Mon Jan 09 2023 Tom Stellard <tstellar(a)redhat.com> - 15.0.6-3
+- Omit frame pointers when building
+
+* Mon Dec 19 2022 Nikita Popov <npopov(a)redhat.com> - 15.0.6-2
+- Remove workaround for rbhz#2048440
+
+* Mon Dec 05 2022 Nikita Popov <npopov(a)redhat.com> - 15.0.6-1
+- Update to LLVM 15.0.6
+
+* Fri Nov 11 2022 Nikita Popov <npopov(a)redhat.com> - 15.0.4-2
+- Copy CFLAGS to ASMFLAGs to enable CET in asm files
+
+* Wed Nov 02 2022 Nikita Popov <npopov(a)redhat.com> - 15.0.4-1
+- Update to LLVM 15.0.4
+
+* Tue Sep 27 2022 Nikita Popov <npopov(a)redhat.com> - 15.0.0-2
+- Export GetHostTriple.cmake
+
+* Tue Sep 06 2022 Nikita Popov <npopov(a)redhat.com> - 15.0.0-1
+- Update to LLVM 15.0.0
+
+* Thu Jul 21 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 14.0.5-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Fri Jun 17 2022 Timm Bäder <tbaeder(a)redhat.com> - 14.0.5-2
+- Release bump for new redhat-rpm-config
+
+* Mon Jun 13 2022 Timm Bäder <tbaeder(a)redhat.com> - 14.0.5-1
+- 14.0.5 Release
+
+* Wed May 18 2022 Tom Stellard <tstellar(a)redhat.com> - 14.0.3-1
+- 14.0.3 Release
+
+* Fri Apr 29 2022 Timm Bäder <tbaeder(a)redhat.com> - 14.0.0-2
+- Remove llvm-cmake-devel package
+
+* Wed Mar 23 2022 Timm Bäder <tbaeder(a)redhat.com> - 14.0.0-1
+- Update to LLVM 14.0.0
+
+* Wed Feb 02 2022 Nikita Popov <npopov(a)redhat.com> - 13.0.1-1
+- Update to LLVM 13.0.1 final
+
+* Tue Jan 25 2022 Nikita Popov <npopov(a)redhat.com> - 13.0.1~rc3-1
+- Update to LLVM 13.0.1rc3
+
+* Thu Jan 20 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 13.0.1~rc2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Thu Jan 13 2022 Nikita Popov <npopov(a)redhat.com> - 13.0.1~rc2-1
+- Update to LLVM 13.0.1rc2
+
+* Mon Jan 10 2022 Nikita Popov <npopov(a)redhat.com> - 13.0.1~rc1-1
+- Upstream 13.0.1 rc1 release
+
+* Sat Jan 08 2022 Miro Hrončok <mhroncok(a)redhat.com> - 13.0.0-8
+- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34
+
+* Thu Nov 11 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0-7
+- Enable lto on s390x and arm
+
+* Mon Oct 25 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0-6
+- Build with Thin LTO
+
+* Mon Oct 18 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0-5
+- Build with clang
+
+* Fri Oct 08 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0-4
+- Fix default triple on arm
+
+* Wed Oct 06 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0-3
+- Set default triple
+
+* Mon Oct 04 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0-2
+- Drop abi_revision from soname
+
+* Thu Sep 30 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0-1
+- 13.0.0 Release
+
+* Thu Sep 30 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0~rc4-2
+- Restore config.guess for host triple detection
+
+* Fri Sep 24 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0~rc4-1
+- 13.0.0-rc4 Release
+
+* Fri Sep 17 2021 Tom Stellard <tstellar(a)redhta.com> - 13.0.0~rc3-1
+- 13.0.0-rc3 Release
+
+* Mon Sep 13 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0~rc1-3
+- Pass LLVM_DEFAULT_TARGET_TRIPLE to cmake
+
+* Mon Sep 13 2021 Konrad Kleine <kkleine(a)redhat.com> - 13.0.0~rc1-2
+- Add --without=check option
+
+* Wed Aug 04 2021 Tom Stellard <tstellar(a)redhat.com> - 13.0.0~rc1-1
+- 13.0.0-rc1 Release
+
+* Thu Jul 22 2021 sguelton(a)redhat.com - 12.0.1-3
+- Maintain versionned link to llvm-config
+
+* Thu Jul 22 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 12.0.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Mon Jul 12 2021 Tom Stellard <tstellar(a)redhat.com> - 12.0.1-1
+- 12.0.1 Release
+
+* Wed Jun 30 2021 Tom Stellard <tstellar(a)redhat.com> - llvm-12.0.1~rc3-1
+- 12.0.1-rc3 Release
+
+* Fri May 28 2021 Tom Stellard <tstellar(a)redhat.com> - 12.0.1~rc1-2
+- Stop installing lit tests
+
+* Wed May 26 2021 Tom Stellard <tstellar(a)redhat.com> - llvm-12.0.1~rc1-1
+- 12.0.1-rc1 Release
+
+* Mon May 17 2021 sguelton(a)redhat.com - 12.0.0-7
+- Fix handling of llvm-config
+
+* Mon May 03 2021 kkleine(a)redhat.com - 12.0.0-6
+- More verbose builds thanks to python3-psutil
+
+* Sat May 01 2021 sguelton(a)redhat.com - 12.0.0-5
+- Fix llvm-config install
+
+* Tue Apr 27 2021 sguelton(a)redhat.com - 12.0.0-4
+- Provide default empty value for exec_suffix when not in compat mode
+
+* Tue Apr 27 2021 sguelton(a)redhat.com - 12.0.0-3
+- Fix llvm-config install
+
+* Tue Apr 20 2021 sguelton(a)redhat.com - 12.0.0-2
+- Backport compat package fix
+
+* Thu Apr 15 2021 Tom Stellard <tstellar(a)redhat.com> - 12.0.0-1
+- 12.0.0 Release
+
+* Thu Apr 08 2021 sguelton(a)redhat.com - 12.0.0-0.11.rc5
+- New upstream release candidate
+
+* Tue Apr 06 2021 sguelton(a)redhat.com - 12.0.0-0.10.rc4
+- Patch test case for compatibility with llvm-test latout
+
+* Fri Apr 02 2021 sguelton(a)redhat.com - 12.0.0-0.9.rc4
+- New upstream release candidate
+
+* Wed Mar 31 2021 Jonathan Wakely <jwakely(a)redhat.com> - 12.0.0-0.8.rc3
+- Rebuilt for removed libstdc++ symbols (#1937698)
+
+* Thu Mar 11 2021 sguelton(a)redhat.com - 12.0.0-0.7.rc3
+- LLVM 12.0.0 rc3
+
+* Wed Mar 10 2021 Kalev Lember <klember(a)redhat.com> - 12.0.0-0.6.rc2
+- Add llvm-static(major) provides to the -static subpackage
+
+* Tue Mar 09 2021 sguelton(a)redhat.com - 12.0.0-0.5.rc2
+- rebuilt
+
+* Tue Mar 02 2021 sguelton(a)redhat.com - 12.0.0-0.4.rc2
+- Change CI working dir
+
+* Wed Feb 24 2021 sguelton(a)redhat.com - 12.0.0-0.3.rc2
+- 12.0.0-rc2 release
+
+* Tue Feb 16 2021 Dave Airlie <airlied(a)redhat.com> - 12.0.0-0.2.rc1
+- Enable LLVM_USE_PERF to allow perf integration
+
+* Tue Feb 2 2021 Serge Guelton - 12.0.0-0.1.rc1
+- 12.0.0-rc1 release
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 11.1.0-0.3.rc2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Fri Jan 22 2021 Serge Guelton - 11.1.0-0.2.rc2
+- 11.1.0-rc2 release
+
+* Thu Jan 14 2021 Serge Guelton - 11.1.0-0.1.rc1
+- 11.1.0-rc1 release
+
+* Tue Jan 05 2021 Serge Guelton - 11.0.1-3.rc2
+- Waive extra test case
+
+* Sun Dec 20 2020 sguelton(a)redhat.com - 11.0.1-2.rc2
+- 11.0.1-rc2 release
+
+* Tue Dec 01 2020 sguelton(a)redhat.com - 11.0.1-1.rc1
+- 11.0.1-rc1 release
+
+* Sat Oct 31 2020 Jeff Law <law(a)redhat.com> - 11.0.0-2
+- Fix missing #include for gcc-11
+
+* Wed Oct 14 2020 Josh Stone <jistone(a)redhat.com> - 11.0.0-1
+- Fix coreos-installer test crash on s390x (rhbz#1883457)
+
+* Mon Oct 12 2020 sguelton(a)redhat.com - 11.0.0-0.11
+- llvm 11.0.0 - final release
+
+* Thu Oct 08 2020 sguelton(a)redhat.com - 11.0.0-0.10.rc6
+- 11.0.0-rc6
+
+* Fri Oct 02 2020 sguelton(a)redhat.com - 11.0.0-0.9.rc5
+- 11.0.0-rc5 Release
+
+* Sun Sep 27 2020 sguelton(a)redhat.com - 11.0.0-0.8.rc3
+- Fix NVR
+
+* Thu Sep 24 2020 sguelton(a)redhat.com - 11.0.0-0.2.rc3
+- Obsolete patch for rhbz#1862012
+
+* Thu Sep 24 2020 sguelton(a)redhat.com - 11.0.0-0.1.rc3
+- 11.0.0-rc3 Release
+
+* Wed Sep 02 2020 sguelton(a)redhat.com - 11.0.0-0.7.rc2
+- Apply upstream patch for rhbz#1862012
+
+* Tue Sep 01 2020 sguelton(a)redhat.com - 11.0.0-0.6.rc2
+- Fix source location
+
+* Fri Aug 21 2020 Tom Stellard <tstellar(a)redhat.com> - 11.0.0-0.5.rc2
+- 11.0.0-rc2 Release
+
+* Wed Aug 19 2020 Tom Stellard <tstellar(a)redhat.com> - 11.0.0-0.4.rc1
+- Fix regression-tests CI tests
+
+* Tue Aug 18 2020 Tom Stellard <tstellar(a)redhat.com> - 11.0.0-0.3.rc1
+- Fix rust crash on ppc64le compiling firefox
+- rhbz#1862012
+
+* Tue Aug 11 2020 Tom Stellard <tstellar(a)redhat.com> - 11.0.0-0.2.rc1
+- Install update_cc_test_checks.py script
+
+* Thu Aug 06 2020 Tom Stellard <tstellar(a)redhat.com> - 11.0.0-0.1-rc1
+- LLVM 11.0.0-rc1 Release
+- Make llvm-devel require llvm-static and llvm-test
+
+* Tue Aug 04 2020 Tom Stellard <tstellar(a)redhat.com> - 10.0.0-10
+- Backport upstream patch to fix build with -flto.
+- Disable LTO on s390x to work-around unit test failures.
+
+* Sat Aug 01 2020 sguelton(a)redhat.com - 10.0.0-9
+- Fix update-alternative uninstall script
+
+* Sat Aug 01 2020 sguelton(a)redhat.com - 10.0.0-8
+- Fix gpg verification and update macro usage.
+
+* Sat Aug 01 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 10.0.0-7
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Tue Jul 28 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 10.0.0-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+* Thu Jun 11 2020 sguelton(a)redhat.com - 10.0.0-5
+- Make llvm-test.tar.gz creation reproducible.
+
+* Tue Jun 02 2020 sguelton(a)redhat.com - 10.0.0-4
+- Instruct cmake not to generate RPATH
+
+* Thu Apr 30 2020 Tom Stellard <tstellar(a)redhat.com> - 10.0.0-3
+- Install LLVMgold.so symlink in bfd-plugins directory
+
+* Tue Apr 07 2020 sguelton(a)redhat.com - 10.0.0-2
+- Do not package UpdateTestChecks tests in llvm-tests
+- Apply upstream patch bab5908df to pass gating tests
+
+* Wed Mar 25 2020 sguelton(a)redhat.com - 10.0.0-1
+- 10.0.0 final
+
+* Mon Mar 23 2020 sguelton(a)redhat.com - 10.0.0-0.6.rc6
+- 10.0.0 rc6
+
+* Thu Mar 19 2020 sguelton(a)redhat.com - 10.0.0-0.5.rc5
+- 10.0.0 rc5
+
+* Sat Mar 14 2020 sguelton(a)redhat.com - 10.0.0-0.4.rc4
+- 10.0.0 rc4
+
+* Thu Mar 05 2020 sguelton(a)redhat.com - 10.0.0-0.3.rc3
+- 10.0.0 rc3
+
+* Fri Feb 28 2020 sguelton(a)redhat.com - 10.0.0-0.2.rc2
+- Remove *_finite support, see rhbz#1803203
+
+* Fri Feb 14 2020 sguelton(a)redhat.com - 10.0.0-0.1.rc2
+- 10.0.0 rc2
+
+* Fri Jan 31 2020 sguelton(a)redhat.com - 10.0.0-0.1.rc1
+- 10.0.0 rc1
+
+* Wed Jan 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 9.0.1-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Tue Jan 21 2020 Tom Stellard <tstellar(a)redhat.com> - 9.0.1-4
+- Rebuild after previous build failed to strip binaries
+
+* Fri Jan 17 2020 Tom Stellard <tstellar(a)redhat.com> - 9.0.1-3
+- Add explicit Requires from sub-packages to llvm-libs
+
+* Fri Jan 10 2020 Tom Stellard <tstellar(a)redhat.com> - 9.0.1-2
+- Fix crash with kernel bpf self-tests
+
+* Thu Dec 19 2019 tstellar(a)redhat.com - 9.0.1-1
+- 9.0.1 Release
+
+* Mon Nov 25 2019 sguelton(a)redhat.com - 9.0.0-4
+- Activate AVR on all architectures
+
+* Mon Sep 30 2019 Tom Stellard <tstellar(a)redhat.com> - 9.0.0-3
+- Build libLLVM.so first to avoid OOM errors
+
+* Fri Sep 27 2019 Tom Stellard <tstellar(a)redhat.com> - 9.0.0-2
+- Remove unneeded BuildRequires: libstdc++-static
+
+* Thu Sep 19 2019 sguelton(a)redhat.com - 9.0.0-1
+- 9.0.0 Release
+
+* Wed Sep 18 2019 sguelton(a)redhat.com - 9.0.0-0.5.rc3
+- Support avr target, see rhbz#1718492
+
+* Tue Sep 10 2019 Tom Stellard <tstellar(a)redhat.com> - 9.0.0-0.4.rc3
+- Split out test executables into their own export file
+
+* Fri Sep 06 2019 Tom Stellard <tstellar(a)redhat.com> - 9.0.0-0.3.rc3
+- Fix patch for splitting out static library exports
+
+* Fri Aug 30 2019 Tom Stellard <tstellar(a)redhat.com> - 9.0.0-0.2.rc3
+- 9.0.0-rc3 Release
+
+* Thu Aug 01 2019 Tom Stellard <tstellar(a)redhat.com> - 9.0.0-0.1.rc2
+- 9.0.0-rc2 Release
+
+* Tue Jul 30 2019 Tom Stellard <tstellar(a)redhat.com> - 8.0.0-9
+- Sync with llvm8.0 spec file
+
+* Thu Jul 25 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 8.0.0-8.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Wed Jul 17 2019 Tom Stellard <tstellar(a)redhat.com> - 8.0.0-8
+- Add provides for the major version of sub-packages
+
+* Fri May 17 2019 sguelton(a)redhat.com - 8.0.0-7
+- Fix conflicts between llvm-static = 8 and llvm-dev < 8 around LLVMStaticExports.cmake
+
+* Wed Apr 24 2019 Tom Stellard <tstellar(a)redhat.com> - 8.0.0-6
+- Make sure we aren't passing -g on s390x
+
+* Sat Mar 30 2019 Tom Stellard <tstellar(a)redhat.com> - 8.0.0-5
+- Enable build rpath while keeping install rpath disabled
+
+* Wed Mar 27 2019 Tom Stellard <tstellar(a)redhat.com> - 8.0.0-4
+- Backport r351577 from trunk to fix ninja check failures
+
+* Tue Mar 26 2019 Tom Stellard <tstellar(a)redhat.com> - 8.0.0-3
+- Fix ninja check
+
+* Fri Mar 22 2019 Tom Stellard <tstellar(a)redhat.com> - 8.0.0-2
+- llvm-test fixes
+
+* Wed Mar 20 2019 sguelton(a)redhat.com - 8.0.0-1
+- 8.0.0 final
+
+* Fri Mar 15 2019 sguelton(a)redhat.com - 8.0.0-0.6.rc4
+- Activate all backends (rhbz#1689031)
+
+* Tue Mar 12 2019 sguelton(a)redhat.com - 8.0.0-0.5.rc4
+- 8.0.0 Release candidate 4
+
+* Mon Mar 4 2019 sguelton(a)redhat.com - 8.0.0-0.4.rc3
+- Move some binaries to -test package, cleanup specfile
+
+* Mon Mar 4 2019 sguelton(a)redhat.com - 8.0.0-0.3.rc3
+- 8.0.0 Release candidate 3
+
+* Fri Feb 22 2019 sguelton(a)redhat.com - 8.0.0-0.2.rc2
+- 8.0.0 Release candidate 2
+
+* Sat Feb 9 2019 sguelton(a)redhat.com - 8.0.0-0.1.rc1
+- 8.0.0 Release candidate 1
+
+* Fri Feb 01 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.0.1-2.1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Mon Jan 21 2019 Josh Stone <jistone(a)redhat.com> - 7.0.1-2
+- Fix discriminators in metadata, rhbz#1668033
+
+* Mon Dec 17 2018 sguelton(a)redhat.com - 7.0.1-1
+- 7.0.1 release
+
+* Tue Dec 04 2018 sguelton(a)redhat.com - 7.0.0-5
+- Ensure rpmlint passes on specfile
+
+* Sat Nov 17 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-4
+- Install testing libraries for unittests
+
+* Sat Oct 27 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-3
+- Fix running unittests as not-root user
+
+* Thu Sep 27 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-2
+- Fixes for llvm-test package:
+- Add some missing Requires
+- Add --threads option to run-lit-tests script
+- Set PATH so lit can find tools like count, not, etc.
+- Don't hardcode tools directory to /usr/lib64/llvm
+- Fix typo in yaml-bench define
+- Only print information about failing tests
+
+* Fri Sep 21 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-1
+- 7.0.0 Release
+
+* Thu Sep 13 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.15.rc3
+- Disable rpath on install LLVM and related sub-projects
+
+* Wed Sep 12 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.14.rc3
+- Remove rpath from executables and libraries
+
+* Tue Sep 11 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.13.rc3
+- Re-enable arm and aarch64 targets on x86_64
+
+* Mon Sep 10 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.12.rc3
+- 7.0.0-rc3 Release
+
+* Fri Sep 07 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.11.rc2
+- Use python3 shebang for opt-viewewr scripts
+
+* Thu Aug 30 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.10.rc2
+- Drop all uses of python2 from lit tests
+
+* Thu Aug 30 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.9.rc2
+- Build the gold plugin on all supported architectures
+
+* Wed Aug 29 2018 Kevin Fenzi <kevin(a)scrye.com> - 7.0.0-0.8.rc2
+- Re-enable debuginfo to avoid 25x size increase.
+
+* Tue Aug 28 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.7.rc2
+- 7.0.0-rc2 Release
+
+* Tue Aug 28 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.6.rc1
+- Guard valgrind usage with valgrind_arches macro
+
+* Thu Aug 23 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.5.rc1
+- Package lit tests and googletest sources.
+
+* Mon Aug 20 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.4.rc1
+- Re-enable AMDGPU target on ARM rhbz#1618922
+
+* Mon Aug 13 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.3.rc1
+- Drop references to TestPlugin.so from cmake files
+
+* Fri Aug 10 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.2.rc1
+- Fixes for lit tests
+
+* Fri Aug 10 2018 Tom Stellard <tstellar(a)redhat.com> - 7.0.0-0.1.rc1
+- 7.0.0-rc1 Release
+- Reduce number of enabled targets on all arches.
+- Drop s390 detection patch, LLVM does not support s390 codegen.
+
+* Mon Aug 06 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-6
+- Backport some fixes needed by mesa and rust
+
+* Thu Jul 26 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-5
+- Move libLLVM-6.0.so to llvm6.0-libs.
+
+* Mon Jul 23 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-4
+- Rebuild because debuginfo stripping failed with the previous build
+
+* Fri Jul 13 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-3
+- Sync specfile with llvm6.0 package
+
+* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Mon Jun 25 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-1
+- 6.0.1 Release
+
+* Thu Jun 07 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-0.4.rc2
+- 6.0.1-rc2
+
+* Wed Jun 06 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-0.3.rc1
+- Re-enable all targets to avoid breaking the ABI.
+
+* Mon Jun 04 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-0.2.rc1
+- Reduce the number of enabled targets based on the architecture
+
+* Thu May 10 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.1-0.1.rc1
+- 6.0.1 rc1
+
+* Tue Mar 27 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-11
+- Re-enable arm tests that used to hang
+
+* Thu Mar 22 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-10
+- Fix testcase in backported patch
+
+* Tue Mar 20 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-9
+- Prevent external projects from linking against both static and shared
+ libraries. rhbz#1558657
+
+* Mon Mar 19 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-8
+- Backport r327651 from trunk rhbz#1554349
+
+* Fri Mar 16 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-7
+- Filter out cxxflags and cflags from llvm-config that aren't supported by clang
+- rhbz#1556980
+
+* Wed Mar 14 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-6
+- Enable symbol versioning in libLLVM.so
+
+* Wed Mar 14 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-5
+- Stop statically linking libstdc++. This is no longer required by Steam
+ client, but the steam installer still needs a work-around which should
+ be handled in the steam package.
+* Wed Mar 14 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-4
+- s/make check/ninja check/
+
+* Fri Mar 09 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-3
+- Backport fix for compile time regression on rust rhbz#1552915
+
+* Thu Mar 08 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-2
+- Build with Ninja: This reduces RPM build time on a 6-core x86_64 builder
+ from 82 min to 52 min.
+
+* Thu Mar 08 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-1
+- 6.0.0 Release
+
+* Thu Mar 08 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-0.5.rc2
+- Reduce debuginfo size on i686 to avoid OOM errors during linking
+
+* Fri Feb 09 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-0.4.rc2
+- 6.0.1 rc2
+
+* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 6.0.0-0.3.rc1
+- Escape macros in %%changelog
+
+* Thu Feb 08 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-0.2.rc1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Fri Jan 19 2018 Tom Stellard <tstellar(a)redhat.com> - 6.0.0-0.1.rc1
+- 6.0.1 rc1
+
+* Tue Dec 19 2017 Tom Stellard <tstellar(a)redhat.com> - 5.0.1-1
+- 5.0.1 Release
+
+* Mon Nov 20 2017 Tom Stellard <tstellar(a)redhat.com> - 5.0.0-5
+- Backport debuginfo fix for rust
+
+* Fri Nov 03 2017 Tom Stellard <tstellar(a)redhat.com> - 5.0.0-4
+- Reduce debuginfo size for ARM
+
+* Tue Oct 10 2017 Tom Stellard <tstellar(a)redhat.com> - 5.0.0-2
+- Reduce memory usage on ARM by disabling debuginfo and some non-ARM targets.
+
+* Mon Sep 25 2017 Tom Stellard <tstellar(a)redhat.com> - 5.0.0-1
+- 5.0.0 Release
+
+* Mon Sep 18 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.1-6
+- Add Requires: libedit-devel for llvm-devel
+
+* Fri Sep 08 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.1-5
+- Enable libedit backend for LineEditor API
+
+* Fri Aug 25 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.1-4
+- Enable extra functionality when run the LLVM JIT under valgrind.
+
+* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 4.0.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 4.0.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Wed Jun 21 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.1-1
+- 4.0.1 Release
+
+* Thu Jun 15 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-6
+- Install llvm utils
+
+* Thu Jun 08 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-5
+- Fix docs-llvm-man target
+
+* Mon May 01 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-4
+- Make cmake files no longer depend on static libs (rhbz 1388200)
+
+* Tue Apr 18 2017 Josh Stone <jistone(a)redhat.com> - 4.0.0-3
+- Fix computeKnownBits for ARMISD::CMOV (rust-lang/llvm#67)
+
+* Mon Apr 03 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-2
+- Simplify spec with rpm macros.
+
+* Thu Mar 23 2017 Tom Stellard <tstellar(a)redhat.com> - 4.0.0-1
+- LLVM 4.0.0 Final Release
+
+* Wed Mar 22 2017 tstellar(a)redhat.com - 3.9.1-6
+- Fix %%postun sep for -devel package.
+
+* Mon Mar 13 2017 Tom Stellard <tstellar(a)redhat.com> - 3.9.1-5
+- Disable failing tests on ARM.
+
+* Sun Mar 12 2017 Peter Robinson <pbrobinson(a)fedoraproject.org> 3.9.1-4
+- Fix missing mask on relocation for aarch64 (rhbz 1429050)
+
+* Wed Mar 01 2017 Dave Airlie <airlied(a)redhat.com> - 3.9.1-3
+- revert upstream radeonsi breaking change.
+
+* Thu Feb 23 2017 Josh Stone <jistone(a)redhat.com> - 3.9.1-2
+- disable sphinx warnings-as-errors
+
+* Fri Feb 10 2017 Orion Poplawski <orion(a)cora.nwra.com> - 3.9.1-1
+- llvm 3.9.1
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.9.0-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Tue Nov 29 2016 Josh Stone <jistone(a)redhat.com> - 3.9.0-7
+- Apply backports from rust-lang/llvm#55, #57
+
+* Tue Nov 01 2016 Dave Airlie <airlied(a)gmail.com - 3.9.0-6
+- rebuild for new arches
+
+* Wed Oct 26 2016 Dave Airlie <airlied(a)redhat.com> - 3.9.0-5
+- apply the patch from -4
+
+* Wed Oct 26 2016 Dave Airlie <airlied(a)redhat.com> - 3.9.0-4
+- add fix for lldb out-of-tree build
+
+* Mon Oct 17 2016 Josh Stone <jistone(a)redhat.com> - 3.9.0-3
+- Apply backports from rust-lang/llvm#47, #48, #53, #54
+
+* Sat Oct 15 2016 Josh Stone <jistone(a)redhat.com> - 3.9.0-2
+- Apply an InstCombine backport via rust-lang/llvm#51
+
+* Wed Sep 07 2016 Dave Airlie <airlied(a)redhat.com> - 3.9.0-1
+- llvm 3.9.0
+- upstream moved where cmake files are packaged.
+- upstream dropped CppBackend
+
+* Wed Jul 13 2016 Adam Jackson <ajax(a)redhat.com> - 3.8.1-1
+- llvm 3.8.1
+- Add mips target
+- Fix some shared library mispackaging
+
+* Tue Jun 07 2016 Jan Vcelak <jvcelak(a)fedoraproject.org> - 3.8.0-2
+- fix color support detection on terminal
+
+* Thu Mar 10 2016 Dave Airlie <airlied(a)redhat.com> 3.8.0-1
+- llvm 3.8.0 release
+
+* Wed Mar 09 2016 Dan Horák <dan[at][danny.cz> 3.8.0-0.3
+- install back memory consumption workaround for s390
+
+* Thu Mar 03 2016 Dave Airlie <airlied(a)redhat.com> 3.8.0-0.2
+- llvm 3.8.0 rc3 release
+
+* Fri Feb 19 2016 Dave Airlie <airlied(a)redhat.com> 3.8.0-0.1
+- llvm 3.8.0 rc2 release
+
+* Tue Feb 16 2016 Dan Horák <dan[at][danny.cz> 3.7.1-7
+- recognize s390 as SystemZ when configuring build
+
+* Sat Feb 13 2016 Dave Airlie <airlied(a)redhat.com> 3.7.1-6
+- export C++ API for mesa.
+
+* Sat Feb 13 2016 Dave Airlie <airlied(a)redhat.com> 3.7.1-5
+- reintroduce llvm-static, clang needs it currently.
+
+* Fri Feb 12 2016 Dave Airlie <airlied(a)redhat.com> 3.7.1-4
+- jump back to single llvm library, the split libs aren't working very well.
+
+* Fri Feb 05 2016 Dave Airlie <airlied(a)redhat.com> 3.7.1-3
+- add missing obsoletes (#1303497)
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Thu Jan 07 2016 Jan Vcelak <jvcelak(a)fedoraproject.org> 3.7.1-1
+- new upstream release
+- enable gold linker
+
+* Wed Nov 04 2015 Jan Vcelak <jvcelak(a)fedoraproject.org> 3.7.0-100
+- fix Requires for subpackages on the main package
+
+* Tue Oct 06 2015 Jan Vcelak <jvcelak(a)fedoraproject.org> 3.7.0-100
+- initial version using cmake build system
diff --git a/release-keys.asc b/release-keys.asc
new file mode 100644
index 0000000..0d3789a
--- /dev/null
+++ b/release-keys.asc
@@ -0,0 +1,104 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGNBGLtemUBDADClvDIromq0Y4TX+wyRyYCq5WusPQheQuY8dVCXd9KhMpYAv8U
+X15E5boH/quGpJ0ZlVkWcf+1WUHIrQWlbzQdIx514CDM7DBgO92CXsnn86kIMDW+
+9S+Hkn8upbizT1fWritlHwzD9osz7ZQRq7ac03PPgw27tqeIizHGuG4VNLyhbbjA
+w+0VLFSu3r219eevS+lzBIvR5U9W720jFxWxts4UvaGuD6XW1ErcsTvuhgyCKrrs
+gxO5Ma/V7r0+lqRL688ZPr4HxthwsON1YCfpNiMZ6sgxT8rOE0qL/d07ItbnXxz6
+KdcNWIXamTJKJgag6Tl0gYX4KIuUCcivXaRdJtUcFFsveCorkdHkdGNos403XR89
+5u9gq7Ef10Zahsv5GjE2DV5oFCEhXvfIWxvyeJa65iBkJafElb2stgUjkIut2a2u
++XmpKpwpGSFklce1ABLrmazlLjhsYiJVrz5l5ktoT9moE4GaF7Q5LD6JgsxzLE0U
+Tzo9/AQPd8qG2REAEQEAAbQeVG9iaWFzIEhpZXRhIDx0b2JpYXNAaGlldGEuc2U+
+iQHUBBMBCAA+FiEE1XS9XR0OmIleO/kARPJIXkXVkEIFAmLtemUCGwMFCRLMAwAF
+CwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQRPJIXkXVkEKoNwv+MEMVzdnzJarx
+ZJ0OzHrGJJG8/chkuoejTjCLG73li9yWQigy5KmvynB5yW0fk0PAQ90vvp2wr/Hd
+mUh0Zda3CwF6sWlO3N6DEDjVA3lZUuofTtvMn/tdGvvOOXYXAP9N+SZfp/7q8dxX
+zn5SA1AO87nXq5lrwVzlVzUCdwOeqDlJ+2U9VEqvukP/FdkgaR2bEb8Wm/h+encW
+UIQEqPDE+qOyJ9dRaiL0CUI4x+1wXeXB3OA7VybF2LvaZDbMlocdy+vs825iUWfa
+n8g3mE2TpV8jkc9UHgGGopzxqNquvkkIB7ZFZm/PSW40W3OeHKhYsZZbHrz9403t
+3R4SAzA3ApmMP/P8ue9irsbe24g3rzYMvck1w4C1a4Uy9buT0OCfA+dA16IRAPgV
+5SJEIS62cFbUxkw8el3rUK9V+6kwoq4k8Fs8f1U7DEnOKS/v8BJJCNEc1cvimZai
+Y5/3r5BeneEmuZFKX4iIIfcn5PmLSDB4aw+gKAIAAus+E2DxBqE+uQGNBGLtemUB
+DADBCNyvUdv0OV//6pQ/0YC2bYXL/ElF0rOjFFl4H7O3TRxgIz2C4nQJHUOrXSmo
+iL7ldfUjoAMgebcoWDpgE8S2Vjw2Gd+UJBQXj+3J6dPKLBUCjj9CLyb5hwOHITMV
+b9UC/E+iwpn4vgTbI6K1O847brkBC+GuDT4g9D3O3sRbja0GjN0n2yZiS8NtRQm1
+MXAVy1IffeXKpGLookAhoUArSN88koMe+4Nx6Qun4/aUcwz0P2QUr5MA5jUzFLy1
+R3M5p1nctX15oLOU33nwCWuyjvqkxAeAfJMlkKDKYX25u1R2RmQ4ju2kAbw0PiiZ
+yYft8fGlrwT4/PB3AqfKeSpx8l9Vs15ePvcuJITauo3fhBjJ6Y4WCKlTG1FbDYUl
+KvPhyGO8yLhtZJg3+LbA5M/CEHsDmUh7YEQVxM0RTQMTxNBVBF5IG/4y8v/+19DZ
+89VdpsQF3ThoPV0yh57YMemTBeIxpF9Swp5N7kUWct4872kBnXOmbp/jhU4MpLj6
+iLEAEQEAAYkBvAQYAQgAJhYhBNV0vV0dDpiJXjv5AETySF5F1ZBCBQJi7XplAhsM
+BQkSzAMAAAoJEETySF5F1ZBCdPwL/3Ox6MwrKFzYJNz3NpQFpKFdDrkwhf25D/Qw
+vu5e8Lql/q62NIhEKH3jxXXgoFYas2G7r8CSCRehraDqvXygbaiWUIkxSU0xuDTl
+lNqHSkCRqIxhi/yxNm1Pk84NVGTLXWW0+CwT9cRwWn5foIPJhoDdZ732zJ7rcY3R
+g71SJTe3R6MnGBzIF1LzT7Znwkh7YfcmeTfInareIWXpeNaeKy8KrQmr/0+5AIer
+Ax1gu03o8GD5LFDUuGbESgDJU6nVtVyht7C6AlJWqSX6QS3+lPCw5BOCKbxakYNR
+/oBNauzyDISdbUwzHM2d+XGCjBsXKRA0Tft2NlG6EC83/PuY2J9MSA2gg3iPHsiN
+J5iipbdZNpZ3XL0l8/t/7T60nM7UZDqt3twLMA0eRFRlCnhMjvFE5Zgj5DE7BsJh
+w2nCoGWkAcfeuih+jfyEjN24NK+sE/bM+krwVv430ewJwm1bVUqKrbOb9aa6V9gP
+9RmlwZlOTFGcWBYl/cfRONn9qi9a6w==
+=Lvw+
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBFrqgT0BEAC7xo0WH+eNrLlU5LrCk59KmImn1abFcmWNd8kYr5XfqmJKyVqo
+EY7A/yRjf+Yn1621EDkpKPjbql7q7MlZMpqKVdOWKWgmhvz08IOKJxaIABd/iIRT
+FwhIvB68YjtmzcoOJRi1wLnwuG55fJ9E69HyZ33jgAlRaWV3bE/YyszoTlZriUOE
+RbzC5WzX004cE9evlrr+YLt5Y6z7tntOdSXPLyGOFAO5LYMsHsEdi2JBYWrjlslG
+6iJr5iEt9v442PrJ79YYbu5QWe/6APRWtI3AtKBp7y250oon2lbj+bIVD7U9fOBB
+n/Frqx54UN22sJycET63hgYW4pIjIi5zq+FF15aU+ZqBdtNltoX4hEN7wlDpuNc0
+ezVu2Z8hdt8thpjiFUioTQ1t3RmsN6N548VwxmHdoYpAmiZqPIYBYvm85JB7S/3h
+RLuoeGxufBhXGCpnG8ghTOGtbbdanuLB/UROFXTdyZbTCBN5S6jvwkPSaHG7H35Z
+3fazMriTXwL1RGAbKITSWhDe5dXy/yOInWe8emJx+35vwQYCB2L4S8wRyQyRw6x4
+YoXCscW041DUMBX2CC7SjMCcmAC39UX1c3GbTpS3rkJR9cmXt50nviMnKpIwlIPd
+ZYhmxKifwTJ70+c4GVK2o0MG9bTYvpYhLnYxv6iJCfgmT40E+qkDSzSoZwARAQAB
+tCJUb20gU3RlbGxhcmQgPHRzdGVsbGFyQHJlZGhhdC5jb20+iQI/BBMBAgApBQJa
+6oE9AhsDBQkB4TOABwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQoseUqYZB
+nYp8Gg//RmX6Nup/Dv05jTL7dKRBSD08MF400tRtTmRhIuAgGv27qO2hbqzprKVu
+vd20vKBB9CNZpXC2oY8k9VhGv2PZNi/X7iuULIYmzjeFMbJ5CjU6XvuUBmNasITH
+6K/0KLhGebPs5h/DNtd7lbzDm86dLcjxgl6LXUULaSyYvTAKn6YB6mAv5J3qJs2X
+lfTmenNh9p7TPFTfcMHcS70ywjqKXlDiH0q9bRKJnSX7xUFlTHjKkNnAcRjlPaGf
+wUUhIPrnpDboqfwfcmScLrHANW9nwFWSFkNAJu1HQUEuF+An/RZUHDxFbLPKKAIp
+hwZ0aORTfBVZ80AjehDMYCbmp1DJeTyLjC1/94un6mlxPIKnPPPM8rMxr83xnrvP
++Y1+pJaDUL7ZvKnmt2LrGRa9GvsNiYKpCNCORfiwZTeSxxXb+LgaodnbCHvGBnk7
+nlbLdMY08vNlxSx8LNyG0krFxJw/rq260+73yc+qjENeG68fozTEy/4jSVrF4t3m
+8AAUu5r6i/Aomo7Q27TjU928bbCVunpvDpserfDqr3zsA96LO9k8T6THR6zC9i+R
+LiN9Vjl+Rr2YuU26DjFYkCNEA2kNflYCWPJi5I0eodTPZrIPBWJ+H0YTRX31bMH9
+X88FnWJuCwaqAMN3rWlX/lXNCouWDdCuPWseZApISAMnVDE2mM+JAlYEEwEIAEAC
+GwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgBYhBEdOIjFqv0eFqIxujqLHlKmG
+QZ2KBQJgkytfBQkJaxEiAAoJEKLHlKmGQZ2Kv8YP/jNPjcMAP0ZTpUcYV46mGKwf
+aQ0g5FUMSfxP7uJHtctj2dUckPGpA9SAH+ApiJutVgTQpWqNJKPd2vVxOiu5sywN
+iDKCOMlKug5m6lgLX5h3zBvSN90Hpn4I0qHRA3rgENLoPs/UYBxohvFPIhOOjPqO
+HIUuSPhAIuIZawxtqlADswHiKPy38Ao5GnWRb60zKfrB+N+ZiOtg7ITrlTGYm2tX
+0W9iWUG32gIA/RX2qmFPoLrDFqsk66Eir0Ghk5gppRrmpEl/M1lqA8bxlqWto/8w
+V8yDbSEu5fmM3WN3OUcSA23lYJi4j656Q4hS5PU+IWuZbBhcpYwDGexV5+m/ySZb
+wtHZMIb4Au+dgJHCvRiSqHgplyfiamxX5CfA0DJVHoGXpBOw8a2geRT0+DrjSbOS
++CDDnlfmQLfHgjEuyQPU8V0Wlb0tJEvnPPqNPmAv0Rv7MC4qmD/zDrgwuddpfr1x
+H+nWus2plR8E6p/x9uvPLb3plJ94ri1XjXiJPyPvqzBAwA40Zeg0rE7sTVwCC3E9
+RZa7dHh17exkcZdOIS/vRQ1G/VNaOVUwrcC/vIMgZSe37bCLeOKViMtacAiBJDjo
+INC1QJ2F3CYVwktrcgmuz9S8e2WrqdTWwijjConB80EwfHQllz5sp/jU6Bgv297X
+UXkgpk1y+ibQ9/syRQpFuQINBFrqgT0BEADB2vDHMuexkaUm3rPi6SvyMGcsHWle
+feAWm+UjROKIaV77rHwo0/8ncKbtoQx4ZZjDXdI77M2bXB7tPgyEML90bWDMMGN/
+gnpwWSsiDRWpFIV/+hD6B+l9UaEi4UvEstUbIchOkGrZgPZ4Qism4FSVosEK+FE7
+EKCT4PSS+LiBKSxJZB8/g2uX+3pJvVxYurvcVpTmiNlXvUyll4KMpzy5e0KKa/0y
+w9h7SAre5399cSM8E7PDQZQDb1EwbyVyO2yDLgs+p3yzPtRJAydaqRPmT1JbSCYf
+hcihTrViMA4EDN5GRjH2EElI37+2HMpgLs4rc6Abz1F4FUVFhqWJXCKUcAIrG17w
+A7YUlYg38S6Xws2Xj1VfZ/WP7/qIMJZidYTHZbN9WWCaifCPfLlE5VDNsa8y6Mxm
+uFMBAB4PpB1gmmP9pPZsOzV9SmeYt8h2P8cVKDW2f56azpBZvZX6NFn8e0+ZDXS4
+8BQz31G2Xdfa3uOEV0J3JxPXcEbfuPzDHb7OMYP+2Ypjox1TozT1e9zr46SQl9OF
+MglOBnwLZJ9baA/IqZkqLq5iu5Oqda44EIVNAntQ3gebi3+q3YG1SvNUseIy2+8y
+cNWtdDuWv366Af0okCdrKAdap8+KbREer9uXhamtvxc49RCoWwuKoKfBz0RdVvMv
+R/Py2xV8A7PaIQARAQABiQIlBBgBAgAPBQJa6oE9AhsMBQkB4TOAAAoJEKLHlKmG
+QZ2KAaMQALHif2E0PBLVt09vlr4i8jAsQvDrzRajmVPd2B9RpfNU6HJe/y93SZd2
+udr9vzgmfd2o5u12vbegKNiMRgp1VyHQDmYlce27jrH5aPuKmos78+o5/p5yPWCv
+Rj8zxGKh7le7UPO+7UveKu+bgb3zwTj6bEuHX7fVI+WjGmEH3bbjDGamWxXrpfGc
+7+Jr8TN4ZO2OwYBcFOS9U2ZQ6TxrPaCSIm6+j8f+a9HPOuuDc62mMuV/EWQZy0i7
+DhDqU2PNpVjQDWQNpHA8oLDrjNFAoJS8gbHABVsFM1VnwBNT2MKcZQmm05dlQ+ll
+S6meHNCvTniKIKC+Giz1Yd5JVGDACZWWPxEz6VhpQW/twkxRqwlUdpFt7UgDquTL
+M1beQUCZRt81yJTNdrggbhQ2POxOdIO0CPiQv7U1IzndZp6baedeBw4a7FCbj6GY
+cQeHxQCrWpQrwigiseG5uhhS9aiaVFEHja9baSLfXlZu/vsR4MdDG5/iEpier/Xw
+h1qnpTSY+r31Uw3lTUlPHzlg47PMgPslaIhCzfVggxh9bTqxcDbuYJ7NuoMho3tN
+yWfeofTJ7PhKzoXM2Y/rRFoM5gNh1RVA19ngLT5Jwiof8fPZvHJ/9ZkHn+O7eMNm
+m5++gYza3pnn2/PoGpGGAKok+sfJiq5Tb7RUefyJTeZiyTZ/XJrA
+=tMzl
+-----END PGP PUBLIC KEY BLOCK-----
8 months, 4 weeks