diff --git a/_constraints b/_constraints index 4b58efc..b360d26 100644 --- a/_constraints +++ b/_constraints @@ -28,4 +28,22 @@ + + + ppc64le + s390x + + + + 8 + + + 12 + + 8 + + 4 + + + diff --git a/racket-fortify.patch b/racket-fortify.patch new file mode 100644 index 0000000..5c57638 --- /dev/null +++ b/racket-fortify.patch @@ -0,0 +1,53 @@ +--- + src/rktio/rktio_fs.c | 4 +++- + src/start/ustart.c | 5 +++-- + 2 files changed, 6 insertions(+), 3 deletions(-) + +--- src/rktio/rktio_fs.c ++++ src/rktio/rktio_fs.c 2024-06-18 12:25:03.035413375 +0000 +@@ -1,6 +1,7 @@ + #include "rktio.h" + #include "rktio_private.h" + #include ++#include + #include + #include + #include +@@ -1092,7 +1093,8 @@ char *rktio_readlink(rktio_t *rktio, con + return NULL; + } + #else +- int len, buf_len = 256; ++ ssize_t len; ++ size_t buf_len = PATH_MAX; + char *buffer = malloc(buf_len); + + while (1) { +--- src/start/ustart.c ++++ src/start/ustart.c 2024-06-18 12:25:13.635224103 +0000 +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + #include + + #if defined(__GNUC__) +@@ -266,7 +267,7 @@ int main(int argc, char **argv) + char *exe_path, *lib_path, *dll_path; + int start, decl_end, prog_end, end, count, fd, v, en, x11; + int argpos, inpos, collcount = 1, fix_argv; +- int bufsize = 127; ++ size_t bufsize = PATH_MAX; + + if (config[7] == '[') { + write_str(2, argv[0]); +@@ -280,7 +281,7 @@ int main(int argc, char **argv) + + /* resolve soft links */ + while (1) { +- int len; ++ ssize_t len; + char *buf; + buf = (char *)malloc(bufsize + 1); + len = readlink(me, buf, bufsize); diff --git a/racket.changes b/racket.changes index 97efd39..1f081b3 100644 --- a/racket.changes +++ b/racket.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Fri Jun 21 07:17:41 UTC 2024 - Dr. Werner Fink + +- Switch over to pb (Platform without native-code Backend) for + architectures which do not build +- Add patch racket-fortify.patch to make it build with latest gcc + ------------------------------------------------------------------- Fri May 24 13:46:41 UTC 2024 - Martin Schreiner diff --git a/racket.spec b/racket.spec index bf9886d..9e7123b 100644 --- a/racket.spec +++ b/racket.spec @@ -17,6 +17,7 @@ # +%global _configure ../configure Name: racket Version: 8.13 Release: 0 @@ -28,6 +29,7 @@ Source0: http://download.racket-lang.org/installers/%{version}/%{name}-%{ Source2: racket-completion.bash Source3: racket-rpmlintrc Patch0: racket-doc.patch +Patch1: racket-fortify.patch BuildRequires: ImageMagick BuildRequires: ca-certificates BuildRequires: chrpath @@ -126,16 +128,32 @@ cp -p %{SOURCE2} src/ %build cd src/ - +mkdir build +pushd build %add_optflags -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=500 -fno-gcse -Wno-stringop-overread +# +# Overwrite stack size limit (hopefully a soft limit only) +# +for flag in s l m +do + ulimit -H$flag unlimited || true + ulimit -S$flag unlimited || true +done +echo "int main () { return !(sizeof(void*) >= 8); }" | gcc -x c -o test64 - +echo "int main () { return !(((union {unsigned int x; unsigned char c; }){1}).c); }" | gcc -x c -o testendianess - +./test64 && wide=64 || wide=32 +./testendianess && endianess=l || endianess=b +rm -f test64 testendianess +mach=tpb${wide}${endianess} +unset wide endianess %configure \ --prefix="%{_prefix}" \ --exec-prefix="%{_prefix}" \ --libdir=%{_libdir} \ --docdir="%{_defaultdocdir}/%{name}" \ --enable-shared \ -%ifarch ppc64 ppc64le s390x - --enable-bcdefault \ +%ifarch ppc64le s390x + --enable-pb --enable-mach=$mach \ %endif --disable-static \ --disable-strip \ @@ -145,9 +163,12 @@ cd src/ --enable-liblz4 \ --enable-pthread %make_build +popd %install +topdir=$(pwd) cd src/ +pushd build # use the following if setting extra plt_setup options # export LD_LIBRARY_PATH=%%{buildroot}%%{_libdir} @@ -157,6 +178,8 @@ install -d %{buildroot}/%{_datadir}/doc/%{name}/ %make_install +popd + # we do not need *.la and *.a files find %{buildroot}%{_libdir} -name "*.la" -delete find %{buildroot}%{_libdir} -name "*.a" -delete @@ -224,6 +247,14 @@ install -m 0644 ../README %{buildroot}%{_docdir}/%{name}/README %fdupes %{buildroot}%{_prefix} +# +# Dynamically determine which files gets installed +# bc, cs, and pb builds +# +pushd %{buildroot}%{_libdir} + find \( -name '*.boot' -o -name '*.so*' -o -name '*.lo' -o -name '*.o' -o -name bootinfo \) -printf '%{_libdir}/%%P\n' > ${topdir}/file.list +popd + %post /sbin/ldconfig %desktop_database_post @@ -232,7 +263,7 @@ install -m 0644 ../README %{buildroot}%{_docdir}/%{name}/README /sbin/ldconfig %desktop_database_postun -%files +%files -f file.list %doc %dir %{_docdir}/%{name} %doc %{_docdir}/%{name}/README %{_bindir}/drracket @@ -263,21 +294,6 @@ install -m 0644 ../README %{buildroot}%{_docdir}/%{name}/README %verify(not md5 size mtime) %{_libdir}/%{name}/*.rktd %dir %{_libdir}/%{name}/compiled/ %{_libdir}/%{name}/compiled/* -%ifnarch ppc64 ppc64le s390x -%{_libdir}/%{name}/petite.boot -%{_libdir}/%{name}/racket.boot -%{_libdir}/%{name}/scheme.boot -%endif -%ifarch ppc64 ppc64le s390x -%{_libdir}/libracket3m* -%{_libdir}/%{name}/buildinfo -%endif -%ifarch s390x -%{_libdir}/%{name}/mzdyn3m.o -%endif -%ifarch ppc64 ppc64le -%{_libdir}/%{name}/mzdyn3m.lo -%endif %{_mandir}/man1/mz* %{_mandir}/man1/racket* %{_mandir}/man1/raco*