#!/usr/bin/perl $force_add_aarch64=0; $exclude=" wicd xf86-video-fbdev xfce4-volumed dosfstools efibootmgr elilo floppy glibc-zoneinfo gptfdisk hwdata logrotate mdadm ncompress pcmciautils quota sed sharutils smartmontools tree udisks usb_modeswitch usbutils acct cdrdao dc3dd ddrescue htop itstool lzip nano pamixer powertop terminus-font tmux usbmuxd cscope m4 rcs scons adwaita-icon-theme dconf-editor eigen2 eigen3 polkit-gnome pyrex python-pillow shared-desktop-ontologies system-config-printer dirmngr ethtool gnupg2 gpa iftop iptraf-ng iputils nfacct nmap pinentry pssh rfkill rpcbind slrn snownews tcpdump vsftpd wpa_supplicant xdg-user-dirs blueman ddd fluxbox fvwm gnuplot gparted pavucontrol rdesktop x11-ssh-askpass x3270 xfractint xlockmore xpdf xscreensaver thunar-volman xfce4-appfinder xfce4-dev-tools xfce4-taskmanager xfce4-terminal xfdesktop libvpx "; $onlyi686=" rust cargo-vendor-filterer cbindgen rust-bindgen mozjs128 mozjs140 mozilla-firefox mozilla-thunderbird seamonkey thin-provisioning-tools qt6 "; # xaos xine-ui (qt6 for qtmultimedia that uses simd instructions...) $include32=" mesa wavpack "; @archs32=qw(arm armv7hl hppa mips mipsel or1k ppc sh4 sparc i586 i686); @archs64=qw(aarch64 alpha loongarch64 mips64el ppc64 ppc64le riscv64 s390x sparc64 x86_64); @archs=(sort(@archs32,@archs64)); @archslib=qw(alpha arm armv7hl hppa mips mipsel or1k ppc sh4 sparc i586 i686); @archslib64=qw(aarch64 loongarch64 mips64el ppc64 ppc64le riscv64 s390x sparc64 x86_64); @time64updated=qw( libcdio=2.1.0/3 glibmm=2.64.5/3 atkmm=2.28.2/1 pangomm=2.42.2/3 gnucobol=3.1.2/3 rpm=4.16.1.3/4 libevent=2.1.12/3 pavucontrol=5.0/1 pan=0.149/1 ); @time64removed=qw( genpower=1.0.5/5 ); @time64=qw( blackbox=0.77/1 db48=4.8.30/6 dvdauthor=0.7.2/5 gtkmm2=2.24.5/4 libgnome-keyring=3.12.0/4 nvi=1.81.6/3 startup-notification=0.12/5 libwnck=2.31.0/5 xfwm4=4.20.0/1 ); $time64_pre='PRINT_PACKAGE_NAME'; foreach(@time64) { ($pkg,$ver,$build)=m|(\S+?)=(\S+?)/(\S+)|; $time64{$pkg}="$ver\t$build"; } $time64ok=0; #$fpicv5=" ebtables llvm rust seamonkey "; $fpic{aarch64}="jasper ebtables php electricsheep binutils"; $fpic{alpha}=""; $fpic{arm}="ebtables"; $fpic{armv7hl}="tigervnc cdparanoia fftw ebtables php zstd cryptopp lua vulkan-sdk"; $fpic{loongarch64}=""; $fpic{hppa}="binutils"; $fpic{mips}="efivar popt vulkan-sdk qt5 lxc"; $fpic{mipsel}="efivar vulkan-sdk qt5 lxc"; $fpic{mips64el}="qt5"; $fpic{or1k}="ffmpeg cryfs binutils vulkan-sdk"; $fpic{ppc}=""; $fpic{ppc64}=""; $fpic{ppc64le}=$fpic{ppc64}; $fpic{riscv64}="ffmpeg binutils"; $fpic{sh4}=""; $fpic{sparc}=""; $fpic{sparc64}="nmap"; # Maybe also elfutils? $fpic{s390x}=""; #$ccarchs="sh4|or1k|alpha|hppa*|loongarch*"; $forcecc=" libplist ncftp icu4c "; $forcecc_arch="libplist:sparc ncftp:sparc"; foreach(split(" ",$forcecc_arch)) { ($p,$a)=split(":",$_); $forcecc_arch{$p}=$a; } #$force=" $fpicv5 $fpicv7 $fpic64 sdl "; $force_only_slkcflags=" alpine cmake "; # Buildaux still to be fixed (to be checked...): $buildaux=" anthy cyrus-sasl:config/ db48:../dist/ gamin judy kbd:config/ lcms linuxdoc-tools:::.:config/::::::.::. mtx sysfsutils libmcrypt t1lib:ac-tools/ floppy libhangul mtdev:config-aux/ xcm:build-aux/ startup-notification libatasmart:build-aux/ indent:config/ expect:tclconfig/ dc3dd:build-aux/ dmapi jmtpfs libmad libid3tag id3lib net-snmp at radeontool xorriso libnetfilter_log:build-aux/ libieee1284 metamail:config/ madplay libasyncns sdl:build-scripts/::.:autotools/:build-scripts/:.:.:. SDL2_gfx moc xmms normalize:config/ jed:autoconf/ openexr libvisual libvisual-plugins a52dec:autotools/ libtheora mm pygtk htdig:.,db/,libhtdigphp/ pidentd:aux/ libidl libcddb ddd electricsheep:::. a2ps:auxdir/ gv rdesktop x3270 libwnck chmlib libnjb liboggz liboil mhash pilot-link libdaemon "; # Adding config.* copy for new RISC-V architecture: $buildaux.="autoconf:build-aux/ cups gdbm:build-aux/ lbzip2:build-aux/ lcms2 libusb-compat libXcm:build-aux/ libkkc lvm2:autoconf/ mlocate:admin/ ntfs-3g nvi:dist/ oprofile pkg-config:./,glib/ reiserfsprogs sharutils tcsh udisks icecream yasm:config enscript joe ntp:sntp/libevent/build-aux/ most:autoconf xfsdump libmnl:build-aux/ ppp libnfnetlink:build-aux/ libnetfilter_acct:build-aux/ libnetfilter_cthelper:build-aux/ libnetfilter_cttimeout:build-aux/ bind dhcp iftop:config/ lftp:build-aux/ netatalk nfacct lame alsa-oss audiofile sox libmng GConf SDL2_net cdrdao libcaca:.auto gpa:build-aux/ hyphen aspell ibus-kkc nmap slrn:autoconf/ fluxbox:build-aux/ audacious:build-aux/ audacious-plugins:build-aux/ easytag:build-aux/ libcanberra:build-aux/ libxklavier:build-aux/ libgnome-keyring libgpod gsl libappindicator:.. libburn librevenge libodfgen libvisio libwpd libwpg qrencode:use/ system-config-printer subversion:build/ brltty:acdir/ libpng14 "; # # Adding config.* copy for new loongarch architecture: $buildaux.="shadow popt:build-aux/ file libnsl libunistring:build-aux/ gettext:build-aux/ procps-ng libevent:build-aux/ flex:build-aux/ python2 gmp mpfr libmpc:build-aux/ isl libssh2 c-ares:./,test/ elfutils:config/ cpio:build-aux/ attr:build-aux/ acl:build-aux/ cracklib exfatprogs:build-aux/ haveged:config/ libpwquality lzo:autoconf/ lrzip sg3_utils sdparm sed:build-aux/ time:build-aux/ rsync pcre swig:Tools/config/ smartmontools groff:build-aux/ icu4c sqlite libarchive:build/autoconf/ libiodbc:admin/ libsodium:build-aux/ nss-pam-ldapd xfsprogs libxslt p11-kit:build/litter/ libgcrypt:build-aux/ cryptsetup mozilla-nss:nspr/build/autoconf/ anthy-unicode libXaw3dXft gd:config/ cairo:build/ libmypaint m17n-lib glew:config/ dbus-glib:build-aux/ dbus-python:build-aux/ pam-krb5:build-aux/ cscope gnucobol:build_aux/ nasm:autoconf/helpers/ alsa-lib alsa-utils libmtp gphoto2:auto-aux/ slang:autoconf/ lsscsi upower:build-aux/ zsh fribidi cairomm:build/ gtkmm2:build/ libogg libvorbis flac opus opusfile libopusenc libassuan:build-aux/ libnftnl:build-aux/ ipset:build-aux/ libnetfilter_conntrack:build-aux/ libnetfilter_queue:build-aux/ yptools iptables:build-aux/ nftables:build-aux/ ebtables:build-aux/ gnupg:scripts/ npth:build-aux/ gnupg2:build-aux/ alpine conntrack-tools:build-aux/ nano loudmouth:build/ mtr:build-aux/ fftw sbc opus-tools mpg123:build/ distcc libwmf libcdio libcdio-paranoia libdvdread libdvdnav v4l-utils:build-aux/ mcabber sane python2-module-collection:build-aux udisks2:build-aux/ libpsl:build-aux/ pygobject apr:build/ apr-util:build/ httpd:build/ enchant:build-aux/ gutenprint:scripts/ libpinyin dovecot proftpd:./,lib/libltdl/config/,contrib/mod_sftp/,contrib/mod_load/,contrib/mod_dnsbl/,contrib/mod_auth_otp/,contrib/mod_snmp/ ulogd:build-aux/ fltk gnome-themes-extra adwaita-icon-theme neon gftp:autoconf/ gnuchess mc:config/ gparted gucharmap pidgin windowmaker xine-lib xine-ui xlockmore xscreensaver xsnow gtksourceview3 keybinder3 xfce4-dev-tools libxfce4util xfconf libxfce4ui thunar thunar-volman xfce4-appfinder xfce4-power-manager xfwm4 xfce4-session xfce4-clipman-plugin xfce4-screensaver xfce4-systemload-plugin xfce4-taskmanager xfce4-weather-plugin alsa-plugins gmm gnome-keyring:build libgsf libgtop libraw1394 polkit-gnome xf86-video-fbdev gimp userspace-rcu:config gtkspell3:build libunibreak libev wcslib:config/ LibRaw nut opensc ";#LOONG # Add fix for old "configure" to support PPC64LE $conffix=" libusb-compat lcms lcms2 sqlite db48:../dist/configure gamin x11/ libXaw3dXft libhangul libatasmart openldap-client dmapi libexif libmad libid3tag judy libmng GConf "; $conffix.="moc normalize chmlib gst-plugins-base0 gst-plugins-good0 gstreamer0 gtkspell ilmbase libasyncns libcddb libidl libieee1284 libmcrypt libnjb liboggz liboil libtheora libvisual libvisual-plugins libwnck mhash mm openexr pilot-link polkit-gnome pygtk sdl:configure::configure::configure:configure:configure:configure startup-notification t1lib htdig net-snmp anthy scim-anthy scim-hangul scim-input-pad scim-m17n scim-pinyin pidgin::configure xmms:configure,libxmms/configure SDL2_gfx "; $conffix.="alsa-oss linuxdoc-tools:::configure::::::::: aalib:ltconfig libcanberra libxklavier libgpod raptor2 rasqal redland "; # Fix configure for _REENTRANT on or1k (seems no more needed from gcc 12) #$conffix.="krb5 powertop libplist libusbmuxd libimobiledevice libimobiledevice-glue v4l-utils "; $targetfix=" binutils gcc glibc libgccjit "; $buildauxfull=$buildaux.$conffix; $buildaux_pre='^\s*LDFLAGS=|^\s*CFLAGS=|^\s*CXXFLAGS=|^\s*PIDGIN_CFLAGS=|^# Configure|^# End of preparations|^# Feel free to change the|^\s*\./configure|^JED_ROOT=|^configure\(|^# We must use --disable-x11-shared|^# we don\'t want sdl to|^# Do not enable pthread here|^echo Building \.\.\.|^# "make static" uses the embedded "jim" Tcl interpreter|^mkdir -p build|make -e.*INS_BASE|^EXTRA_NSS'; @params=qw(SLKCFLAGS OPTIMIZ LIBDIRSUFFIX LIBDIRSUFFIXROOT SLKLDFLAGS ARCHQUADLET ARCHOPTS HOSTTARGET OPTFLAGS WEBKITFLAGS MFILE CONFARGS MMX OPTIMIZE OPTIMIZE_FLAG WITH_SIMD EXTRACONFIGUREOPTIONS); @params_specific=qw(EXTRACONF CMAKE_EXTRA SVGA LIB_ARCH addlang TARGET EXTRAGUILE EXTRATEX ENABLE_JIT LINKER ENABLE_GOLD SLKRUSTFLAGS BUILD_FLANG KVMARCH); push(@params,@params_specific); @params_specific=(); # 2024-05-19 Seems no more useful differentiate specific params (used only to replace current values), and it will add duplicated entries if the script pass a 2nd time. foreach(@params_specific) { $params_specific{$_}=1; } foreach(@archs) { $arch{$_}=0; } $filter_params='\s+'.join('|\s+',@params); $params_default{"SLKCFLAGS"}='${SLKCFLAGS:-"-O2"}'; $params_default{"LIBDIRSUFFIX"}='${LIBDIRSUFFIX:-""}'; #$params_default{"SLKLDFLAGS"}='${SLKLDFLAGS:-"-L/usr/lib$LIBDIRSUFFIX"}'; # not very useful, since /usr/lib$LIBDIRSUFFIX is already in linker path #$params_default{"SLKLDFLAGS"}='${SLKLDFLAGS:-""}'; $params_default{"ARCHQUADLET"}='${ARCHQUADLET:-""}'; $params_default{"ARCHOPTS"}='${ARCHOPTS:-""}'; $params_default{"HOSTTARGET"}='${HOSTTARGET:-""}'; $params_default{"OPTFLAGS"}='${OPTFLAGS:-"$SLKCFLAGS"}'; $params_default{"WEBKITFLAGS"}='${WEBKITFLAGS:-""}'; $params_default{"MFILE"}='`[[ "$LIBDIRSUFFIX" = "64" ]] && echo m-x86_64.h || echo m-i80386.h`'; $params_default{"CONFARGS"}='${CONFARGS:-""}'; #$params_default{"FFARCHOPTS"}='${FFARCHOPTS:-""}'; # was used only by xine-lib on Slackware 14.2 $params_default{"EXTRACONFIGUREOPTIONS"}='${EXTRACONFIGUREOPTIONS:-""}'; $params_default{"ruby:SLKCFLAGS"}='${SLKCFLAGS:-"-O3"}'; $params_default{"slang:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -fno-tree-dse"}'; $params_default{"tcl:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -DHAVE_USLEEP=1"}'; $params_default{"speexdsp:EXTRACONF"}='${EXTRACONF:-""}'; $params_default{"seamonkey:OPTIMIZE_FLAG"}='${OPTIMIZE_FLAG:-"-O1"}'; $params_default{"mozilla-firefox:SLKCFLAGS"}='${SLKCFLAGS:-"-g0"}'; $params_default{"mozilla-firefox:EXTRACONF"}='""'; $params_default{"mozilla-thunderbird:EXTRACONF"}='""'; $params_default{"wavpack:MMX"}='${MMX:-""}'; $params_default{"llvm:CMAKE_EXTRA"}='${CMAKE_EXTRA:-""}'; #$params_default{"llvm:LINKER"}='${LINKER:-"lld"}'; # Not useful: LINKER already set $params_default{"SDL2_gfx:MMX"}='"--disable-mmx"'; $params_default{"sdl:SVGA"}='${SVGA:-"--disable-video-svga"}'; $params_default{"gcc:LIB_ARCH"}='${LIB_ARCH:-"$ARCH"}'; $params_default{"libgccjit:LIB_ARCH"}='${LIB_ARCH:-"$ARCH"}'; #$params_default{"gcc:addlang"}='${ADDLANG:-"$addlang"}'; $params_default{"guile:EXTRAGUILE"}='${EXTRAGUILE:-""}'; $params_default{"mpg123:TARGET"}='${TARGET:-""}'; $params_default{"yasm:SLKCFLAGS"}='${SLKCFLAGS:-"-O3"}'; $params_default{"glibc:OPTIMIZ"}='${OPTIMIZ:-"-O3"}'; $params_default{"glibc:LIBDIRSUFFIXROOT"}='${LIBDIRSUFFIXROOT:-"$LIBDIRSUFFIX"}'; $params_default{"qt5-webkit:CMAKE_EXTRA"}='${CMAKE_EXTRA:-"-DENABLE_JIT=OFF"}'; $params_default{"texlive:EXTRATEX"}='${EXTRATEX:-""}'; $params_default{"zstd:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -fPIC"}'; $params_default{"mozjs128:EXTRACONF"}='${EXTRACONF:-""}'; $params_default{"mozjs128:SLKLDFLAGS"}='${SLKLDFLAGS:-""}'; $params_default{"mozjs140:EXTRACONF"}='${EXTRACONF:-""}'; $params_default{"mozjs140:SLKLDFLAGS"}='${SLKLDFLAGS:-""}'; $params_default{"ffmpeg:EXTRACONF"}='${EXTRACONF:-""}'; $params_default{"vulkan-sdk:SLKCFLAGS"}='${SLKCFLAGS-"-O2 -fPIC"}'; $params_default{"vulkan-sdk:CMAKE_EXTRA"}='${CMAKE_EXTRA:-""}'; $params_default{"cryptopp:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -fPIC"}'; $params_default{"cryfs:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -fPIC"}'; $params_default{"dhcp:SLKLDFLAGS"}='${SLKLDFLAGS:-""}'; $params_default{"a52dec:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -fPIC"}'; $params_default{"alpine:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -fPIC"}'; $params_default{"poke"}='${EXTRACONF:-""}'; $params_default{"electricsheep:SLKLDFLAGS"}='${SLKLDFLAGS:-""}'; $params_default{"lua:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -fPIC"}'; $params_default{"openblas:TARGET"}='${TARGET:-"GENERIC"}'; $params_default{"xine-lib:SLKCFLAGS"}='${SLKCFLAGS:-"-std=gnu17 -Wno-error=incompatible-pointer-types"}'; $params_default{"qemu:KVMARCH"}='"$ARCH"'; %params_add=(); #%params_add=("seamonkey:OPTIMIZE_FLAG"=>'${OPTIMIZE_FLAG:-"-O1"}', # "mozilla-thunderbird:SLKCFLAGS"=>'""', # "mozilla-thunderbird:OPTIMIZE"=>'"-O1"', # ); foreach(keys %params_add) { foreach $arch (@archs) { $params{$arch}{$_}=$params_add{$_}; } } sub commonparams { my($param,$value,@archs)=@_; foreach(@archs) { $params{$_}{$param}=$value; } } commonparams("SLKCFLAGS",'"-O2"',@archs); commonparams("SLKLDCFLAGS",'""',@archs); commonparams("LIBDIRSUFFIX",'""',@archslib); commonparams("LIBDIRSUFFIX",'"64"',@archslib64); commonparams("mozjs128:SLKLDFLAGS",'"-latomic"', qw(arm)); commonparams("mozjs128:SLKLDFLAGS",'"-latomic -lpthread"', qw(mips)); commonparams("mozjs140:SLKLDFLAGS",'"-latomic"', qw(arm)); commonparams("mozjs140:SLKLDFLAGS",'"-latomic -lpthread"', qw(mips)); commonparams("cmake:SLKLDFLAGS",'"-latomic"', qw(arm mips or1k ppc sh4 riscv64)); commonparams("dhcp:SLKLDFLAGS",'"-latomic"', qw(mips or1k ppc sh4 sparc)); commonparams("ffmpeg:SLKLDFLAGS",'"-latomic"', qw(mips or1k ppc sh4 sparc)); commonparams("gjs:SLKLDFLAGS",'"-latomic"', qw(arm mips ppc)); commonparams("icu4c:SLKLDFLAGS",'"-latomic"', qw(arm)); commonparams("libwpg:SLKLDFLAGS",'"-latomic"', qw(arm)); commonparams("libfyaml:SLKLDFLAGS",'"-latomic"', qw(arm)); commonparams("mariadb:SLKLDFLAGS",'"-latomic"', qw(arm mips ppc sh4 sparc riscv64)); commonparams("openssl:SLKLDFLAGS",'"-latomic"', qw(or1k sh4)); commonparams("qt5:SLKLDFLAGS",'"-latomic"', qw(mips ppc riscv64)); commonparams("samba:SLKLDFLAGS",'"-latomic"', qw(arm mips or1k ppc sh4)); # Probably like the above, to be tested commonparams("gstreamer:SLKLDFLAGS",'"-latomic"', qw(arm ppc)); commonparams("gst-plugins-base:SLKLDFLAGS",'"-latomic"', qw(arm ppc)); commonparams("gst-plugins-bad-free:SLKLDFLAGS",'"-latomic"', qw(ppc)); commonparams("bcachefs-tools:SLKLDFLAGS",'"-latomic"', qw(arm mips or1k ppc sh4)); commonparams("netatalk:SLKLDFLAGS",'"-latomic"', qw(arm ppc mips or1k sh4)); commonparams("vulkan-sdk:CMAKE_EXTRA",'" -DCMAKE_EXE_LINKER_FLAGS=-latomic"', qw(arm mips or1k ppc sh4 sparc)); commonparams("opencv:CMAKE_EXTRA",'"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"', qw(arm mips or1k ppc sh4)); commonparams("llvm:CMAKE_EXTRA",'"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"', qw(ppc or1k riscv64 sh4 sparc)); commonparams("abseil-cpp:CMAKE_EXTRA",'"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"', qw(arm mips or1k ppc sh4)); commonparams("llvm:CMAKE_EXTRA",'" -DCMAKE_EXE_LINKER_FLAGS=-latomic -DCMAKE_MODULE_LINKER_FLAGS=-latomic -DCMAKE_SHARED_LINKER_FLAGS=-latomic"', qw(mips)); commonparams("llvm:CMAKE_EXTRA",'" -DCOMPILER_RT_BUILD_BUILTINS=OFF -DLLVM_HOST_TRIPLE=armv5te-linux-gnueabi -DCMAKE_EXE_LINKER_FLAGS=-latomic -DCMAKE_MODULE_LINKER_FLAGS=-latomic -DCMAKE_SHARED_LINKER_FLAGS=-latomic"', qw(arm)); commonparams("llvm:LINKER",'"bfd"', qw(alpha hppa loongarch64 mips mips64el or1k ppc64 riscv64 s390x sh4)); #commonparams("llvm:BUILD_FLANG",'NO', # Included directly in patch # qw(mips64el s390x)); commonparams("protobuf:CMAKE_EXTRA",'"-DCMAKE_SHARED_LINKER_FLAGS=-latomic -DCMAKE_EXE_LINKER_FLAGS=-latomic"', qw(arm mips ppc)); # qw(arm mips or1k ppc sh4)); commonparams("guile:EXTRAGUILE",'"--disable-jit"', qw(arm armv7hl)); commonparams("pcre:ENABLE_JIT",'""', qw(alpha hppa loongarch64 or1k riscv64 s390x sh4 sparc64)); # arm disabled on pcre2 because only V6 is supported in JIT commonparams("pcre2:ENABLE_JIT",'""', qw(arm alpha hppa loongarch64 or1k riscv64 s390x sh4 sparc sparc64)); commonparams("texlive:EXTRATEX",'"--disable-luajittex --disable-mfluajit"', qw(ppc64)); commonparams("texlive:EXTRATEX",'"--disable-luajittex --disable-mfluajit --disable-luajithbtex"', qw(alpha hppa loongarch64 or1k riscv64 s390x sh4 sparc64)); commonparams("binutils:ENABLE_GOLD",'"no"', qw(loongarch64 s390x)); commonparams("mozjs128:EXTRACONF",'"--disable-jit"', qw(arm mips loongarch64 mips64el)); # mips64el has unmaintained code (do not compile "/root/tmp/firefox-128.5.2/js/src/jit/mips-shared/MacroAssembler-mips-shared.cpp:2753:12: error: no matching member function for call to 'append' -- 2753 | masm.append(*access, masm.size()); commonparams("mozjs140:EXTRACONF",'"--disable-jit"', qw(arm mips loongarch64)); commonparams("opus:EXTRACONF",'""', qw(loongarch64)); commonparams("openblas:EXTRACONF",'"DYNAMIC_ARCH=0"', qw(ppc)); commonparams("openblas:TARGET",'"GENERIC"', qw(ppc)); ############################################################ # Architecture specific configurations ############################################################ #$params{aarch64}{"SLKLDFLAGS"}='"-L/usr/lib$LIBDIRSUFFIX"'; #$params{aarch64}{"ARCHQUADLET"}='""'; #$params{aarch64}{"ARCHOPTS"}='""'; #$params{aarch64}{"HOSTTARGET"}='""'; #$params{aarch64}{"WEBKITFLAGS"}='""'; #$params{aarch64}{"CONFARGS"}='""'; #$params{aarch64}{"MMX"}='""'; #$params{aarch64}{"gcc:LIB_ARCH"}='"aarch64"'; #$params{aarch64}{"ruby:SLKCFLAGS"}='"-O3"'; #$params{aarch64}{"slang:SLKCFLAGS"}='"-O2 -fno-tree-dse"'; #$params{aarch64}{"tcl:SLKCFLAGS"}='"-O2 -DHAVE_USLEEP=1"'; #$params{aarch64}{"glibc:OPTIMIZ"}='"-O3"'; #$params{aarch64}{"FFARCHOPTS"}='"--enable-pic"'; $params{aarch64}{"speexdsp:EXTRACONF"}='"--disable-neon"'; $params{aarch64}{"mpg123:TARGET"}='"aarch64"'; $params{aarch64}{"qt5-webkit:CMAKE_EXTRA"}='""'; $params{aarch64}{"mozilla-firefox:SLKCFLAGS"}='"-g0"'; $params{aarch64}{"mozilla-thunderbird:SLKCFLAGS"}='"-g0"'; # For some reason on aarch64 _GNU_SOURCE is not set by cmake during getresuid testing, force it: $params{aarch64}{"SDL3:SLKCFLAGS"}='"-O2 -D_GNU_SOURCE"'; #$params{alpha}{"gcc:LIB_ARCH"}='"$ARCH"'; #$params{alpha}{"gcc:addlang"}='"ada,go,"'; $params{alpha}{"llvm:CMAKE_EXTRA"}='"-DCMAKE_EXE_LINKER_FLAGS=-Wl,--no-relax -DCMAKE_MODULE_LINKER_FLAGS=-Wl,--no-relax -DCMAKE_SHARED_LINKER_FLAGS=-Wl,--no-relax"'; $params{alpha}{"mariadb:SLKLDFLAGS"}='"-Wl,--no-relax"'; # will fix "relocation truncated to fit: GPREL16" $params{alpha}{"ruby:SLKCFLAGS"}='"-O1"'; # Internal compiler error with -O2 or -O3 $params{alpha}{"qt5-webkit:SLKLDFLAGS"}='"-Wl,--no-relax"'; # wull fix "relocation truncated to file: ELF...." $params{alpha}{"qt5-webkit:CMAKE_EXTRA"}='"-DENABLE_JIT=OFF"'; # Fix Floating Point Exception (when overflow double=>float or float=>half, # hardware does not convert to "+/-inf" or "0+/-" and raise exception killing the program) $params{alpha}{"perl:SLKCFLAGS"}='"-O2 -mieee"'; $params{alpha}{"openexr:SLKCFLAGS"}='"-O2 -mieee"'; #$params{alpha}{"librsvg"}='"-O2 -mieee"'; Not useful since librsvg240 is added with already patched SlackBuild $params{alpha}{"babl:SLKCFLAGS"}='"-O2 -mieee"'; $params{alpha}{"gegl:SLKCFLAGS"}='"-O2 -mieee"'; $params{alpha}{"gimp:SLKCFLAGS"}='"-O2 -mieee"'; $params{alpha}{"gtk+3:SLKCFLAGS"}='"-O2 -mieee"'; $params{alpha}{"freerdp:SLKCFLAGS"}='"-O2 -mieee"'; $params{alpha}{"geeqie:SLKCFLAGS"}='"-O2 -D_FILE_OFFSET_BITS=64 -mieee"'; $params{alpha}{"vulkan-sdk:SLKCFLAGS"}='"-O2 -mieee -fPIC"'; $params{alpha}{"vulkan-sdk:CMAKE_EXTRA"}='" -DCMAKE_EXE_LINKER_FLAGS=-Wl,--no-relax"'; #$params{arm}{"ARCHQUADLET"}='"-gnueabi"'; #$params{arm}{"ARCHOPTS"}='""'; #$params{arm}{"HOSTTARGET"}='""'; #$params{arm}{"WEBKITFLAGS"}='""'; #$params{arm}{"CONFARGS"}='""'; #$params{arm}{"FFARCHOPTS"}='""'; #$params{arm}{"MMX"}='""'; #$params{arm}{"seamonkey:SLKCFLAGS"}='"-march=armv5te -mfloat-abi=soft"'; #$params{arm}{"llvm:CMAKE_EXTRA"}='" -DCOMPILER_RT_BUILD_BUILTINS=OFF -DLLVM_HOST_TRIPLE=arm-linux-gnueabi -DCMAKE_MODULE_LINKER_FLAGS=-latomic -DCMAKE_SHARED_LINKER_FLAGS=-latomic -DCMAKE_STATIC_LINKER_FLAGS=-latomic"'; #$params{arm}{"mozilla-firefox:SLKCFLAGS"}='"-Os -march=armv5te -mfloat-abi=soft"'; #$params{arm}{"mozilla-firefox:EXTRACONF"}='""'; #$params{arm}{"mozilla-thunderbird:SLKCFLAGS"}='"-Os -march=armv5te -mfloat-abi=soft"'; #$params{arm}{"mozilla-thunderbird:EXTRACONF"}='""'; #$params{arm}{"freerdp:SLKLDFLAGS"}='"-latomic"'; #$params{arm}{"freerdp:CMAKE_EXTRA"}='"$CMAKE_EXTRA -DWITH_NEON=OFF"'; $params{arm}{"gcc:SLKCFLAGS"}='"-O2 -march=armv5te -mfloat-abi=soft"'; $params{arm}{"gcc:LIB_ARCH"}='"arm"'; $params{arm}{"yasm:SLKCFLAGS"}='"-march=armv5te -mfloat-abi=soft -O3"'; $params{arm}{"yasm:SLKLDFLAGS"}='""'; $params{arm}{"seamonkey:OPTIMIZE_FLAG"}='${OPTIMIZE_FLAG:-"-Os"}'; $params{arm}{"wavpack:MMX"}='"--disable-asm"'; $params{arm}{"llvm:SLKCFLAGS"}='"-O2 -mfloat-abi=soft"'; $params{arm}{"rust:SLKCFLAGS"}='"-O2 -march=armv5te -mfloat-abi=soft"'; $params{arm}{"mozilla-firefox:SLKCFLAGS"}='"-g0"'; $params{arm}{"mozilla-thunderbird:SLKCFLAGS"}='"-g0"'; $params{arm}{"libjpeg-turbo:WITH_SIMD"}='"-DWITH_SIMD=no"'; $params{arm}{"freerdp:CMAKE_EXTRA"}='"-DWITH_NEON=OFF"'; $params{arm}{"lcms2:SLKCFLAGS"}='"-O2 -DCMS_PTR_ALIGNMENT=8"'; $params{arm}{"aom:CMAKE_EXTRA"}='"-DENABLE_NEON=0"'; $params{arm}{"libtheora:EXTRACONF"}='"--disable-asm"'; #$params{armv7hl}{"hplip:SLKCFLAGS"}='"-O2 -mfloat-abi=hard"'; # Fixed by changin clang triplet #$params{armv7hl}{FFARCHOPTS}='"--enable-pic"'; $params{armv7hl}{"mpg123:TARGET"}='"arm_fpu"'; $params{armv7hl}{"rust:SLKCFLAGS"}='"-O2"'; $params{armv7hl}{"yasm:SLKCFLAGS"}='"-march=armv7-a -O3 -mfpu=vfpv3-d16"'; $params{armv7hl}{"yasm:SLKLDFLAGS"}='""'; $params{armv7hl}{"libwebp:SLKCFLAGS"}='"-O3 -march=armv7-a -mfpu=neon"'; $params{armv7hl}{"criptopp:SLKCFLAGS"}='"-O2 -fPIC -mfpu=neon"'; $params{armv7hl}{"cryfs:SLKCFLAGS"}='"-O2 -fPIC -mfpu=neon"'; $params{armv7hl}{"qt5-webkit:CMAKE_EXTRA"}='""'; $params{armv7hl}{"libwpg:TARGET"}='"$ARCH-slackware-linux-gnueabihf"'; $params{armv7hl}{"mozilla-firefox:SLKCFLAGS"}='"-g0"'; $params{armv7hl}{"mozilla-thunderbird:SLKCFLAGS"}='"-g0"'; $params{armv7hl}{"aom:SLKCFLAGS"}='"-O3 -march=armv7-a -mfpu=neon"'; $params{armv7hl}{"libtheora:EXTRACONF"}='"--disable-asm"'; $params{armv7hl}{"xine-lib:SLKCFLAGS"}='"-fPIC -std=gnu17 -Wno-error=incompatible-pointer-types"'; #$params{hppa}{"llvm:CMAKE_EXTRA"}='"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"'; #$params{hppa}{"mariadb:SLKLDFLAGS"}=$params{arm}{"mariadb:SLKLDFLAGS"}; #$params{hppa}{"gcc:addlang"}='"ada,d,"'; #$params{hppa}{"gcc:LIB_ARCH"}='"$ARCH"'; $params{hppa}{"llvm:SLKCFLAGS"}='"-O2 -fPIC -ffunction-sections -mlong-calls"'; # Newer gcc 14 incorrectly detect possibile zero size copy on NULL pointer on hppa: # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112358 # Disabling Werror on this platform. $params{hppa}{"glibc:EXTRACONF"}='"--disable-werror"'; $params{hppa}{"glibc:OPTIMIZ"}='"-O3"'; $params{hppa}{"glibc:LIBDIRSUFFIXROOT"}='"$LIBDIRSUFFIX"'; #$params{loongarch64}{"llvm:CMAKE_EXTRA"}='"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"'; #$params{loongarch64}{"gcc:LIB_ARCH"}='"$ARCH"'; #$params{loongarch64}{"gcc:addlang"}='"rust"'; $params{mips}{"ffmpeg:EXTRACONF"}='"--disable-loongson3 --disable-mipsdsp --disable-mipsdspr2 --disable-msa"'; $params{mips}{"qt5-webkit:CMAKE_EXTRA"}='""'; $params{mips}{"poke:EXTRACONF"}='"--disable-assembly"'; $params{mips}{"librsvg:SLKRUSTFLAGS"}='"-C opt-level=1"'; # Undefined temporary symbol $BB14_1 $params{mips}{"glibc:EXTRACONF"}='""'; $params{mips}{"glibc:OPTIMIZ"}='"-O3"'; $params{mips}{"glibc:LIBDIRSUFFIXROOT"}='""'; %{$params{mipsel}}=%{$params{mips}}; $params{mips}{"libgccjit:SLKCFLAGS"}='"-O2 -mxgot"'; $params{mips}{"libgccjit:LIB_ARCH"}='"$ARCH"'; #$params{mips64el}{"freerdp:CMAKE_EXTRA"}='"-DWITH_SANITIZE_ADDRESS=OFF"'; $params{mips64el}{"ffmpeg:EXTRACONF"}='"--disable-msa"'; $params{mips64el}{"TARGET"}='$ARCH-slackware-linux-gnuabi64'; $params{mips64el}{"llvm:CMAKE_EXTRA"}='" -DLLVM_HOST_TRIPLE=mips64el-linux-gnuabi64"'; $params{mips64el}{"llvm:SLKCFLAGS"}='"-O2 -mxgot"'; # On VulkanTools (VkLayers) the following error appear: # api_dump.cpp:(.text+0x1e4): relocation truncated to fit: R_MIPS_CALL16 # Fixed with -mxgot $params{mips64el}{"vulkan-sdk:SLKCFLAGS"}='"-O2 -mxgot"'; $params{mips64el}{"glibc:EXTRACONF"}='""'; $params{mips64el}{"glibc:OPTIMIZ"}='"-O3"'; $params{mips64el}{"glibc:LIBDIRSUFFIXROOT"}='"$LIBDIRSUFFIX"'; #$params{or1k}{"gcc:LIB_ARCH"}='"$ARCH"'; #$params{or1k}{"gcc:addlang"}='"ada,go,"'; $params{or1k}{"mariadb:SLKCFLAGS"}='"-O2 -mcmodel=large"'; $params{or1k}{"mariadb:SLKLDFLAGS"}='"-shared-libgcc"'; $params{or1k}{"ghostscript:SLKCFLAGS"}='"-O2 -mcmodel=large"'; $params{or1k}{"ghostscript:SLKLDFLAGS"}='"-shared-libgcc"'; $params{or1k}{"qt5-webkit:SLKCFLAGS"}='"-O2 -mcmodel=large"'; $params{or1k}{"qt5-webkit:CMAKE_EXTRA"}='"-DENABLE_JIT=OFF"'; $params{or1k}{"qt6:SLKCFLAGS"}='"-O2 -mcmodel=large"'; $params{or1k}{"openexr:SLKCFLAGS"}='"-O2 -mcmodel=large"'; $params{or1k}{"gtkmm4:SLKCFLAGS"}='"-O2 -mcmodel=large"'; $params{or1k}{"llvm:SLKCFLAGS"}='"-O2 -mcmodel=large"'; $params{ppc64}{"mozjs128:EXTRACONF"}='"--enable-linker=bfd"'; $params{ppc64}{"mozjs140:EXTRACONF"}='"--enable-linker=bfd"'; # From opencv 4.11 cpu VSX instruction are not completed for OpenPower, disabling them: $params{ppc64le}{"opencv:CMAKE_EXTRA"}='"-DCV_DISABLE_OPTIMIZATION=ON"'; # Missing some __builtins functions with gcc 15: $params{ppc64le}{"frei0r-plugins:SLKCFLAGS"}='"-O2 -std=gnu17"'; $params{ppc}{"SLKCFLAGS"}=$params{arm}{SLKCFLAGS}; $params{ppc}{"LIBDIRSUFFIX"}='""'; $params{ppc}{"llvm:LINKER"}='"bfd"'; $params{ppc}{"qt5-webkit:SLKCFLAGS"}='"-O2 -fPIC"'; $params{ppc}{"qt5-webkit:CMAKE_EXTRA"}='"-DENABLE_JIT=OFF"'."\n ".'export PATH="$CWD/nogold:$PATH"'; #$params{riscv64}{"mozjs102:EXTRACONF"}='"--disable-jit"'; #$params{riscv64}{"cryfs:CMAKE_EXTRA"}='"-DCMAKE_LIBRARY_PATH=/usr/lib64"'; # On riscv64 I initially didn't success to insert /usr/lib64 to gcc's library path, now ok $params{riscv64}{"glibc:OPTIMIZ"}='"-O3"'; $params{riscv64}{"glibc:LIBDIRSUFFIXROOT"}='"64/lp64d"'; $params{riscv64}{"qt5-webkit:CMAKE_EXTRA"}='"-DCMAKE_EXE_LINKER_FLAGS=-latomic -DCMAKE_SHARED_LINKER_FLAGS=-latomic -DENABLE_JIT=OFF"'; $params{riscv64}{"curl:SLKLDFLAGS"}='"-latomic"'; $params{s390x}{"gcc:LIB_ARCH"}='"$ARCH"'; #$params{s390x}{"gcc:addlang"}='"ada,d,go,"'; # libgrust segment violation... #$params{sh4}{"gcc:LIB_ARCH"}='"$ARCH"'; #$params{sh4}{"gcc:addlang"}='"ada,go,"'; $params{sh4}{"glibc:OPTIMIZ"}='"-O3"'; $params{sh4}{"glibc:EXTRACONF"}='"--disable-default-pie"'; $params{sh4}{"ghostscript:SLKCFLAGS"}='"-O2 -fno-delayed-branch"'; $params{sh4}{"qt5-webkit:SLKCFLAGS"}='"-O1"'; $params{sh4}{"qt5-webkit:CMAKE_EXTRA"}='"-DENABLE_JIT=OFF"'; $params{sparc}{"glibc:EXTRACONF"}='"--disable-default-pie"'; $params{sparc}{"glibc:OPTIMIZ"}='"-O3 -mcpu=leon3"'; $params{sparc}{"glibc:LIBDIRSUFFIXROOT"}='""'; $params{sparc}{"lcms2:SLKCFLAGS"}='"-O2 -DCMS_PTR_ALIGNMENT=8"'; $params{sparc}{"xine-lib:SLKCFLAGS"}='"-std=gnu17 -Wno-error=incompatible-pointer-types"'; $params{sparc}{"xine-lib:EXTRACONF"}='"--disable-vis"'; #$params{sparc}{"gcc:LIB_ARCH"}='"$ARCH"'; #$params{sparc}{"gcc:addlang"}='"ada,go,"'; #$params{sparc64}{"gcc:LIB_ARCH"}='"$ARCH"'; #$params{sparc64}{"gcc:addlang"}='"ada,go,"'; $params{sparc64}{"glibc:EXTRACONF"}='"--disable-default-pie"'; $params{sparc64}{"glibc:OPTIMIZ"}='"-O3"'; $params{sparc64}{"glibc:LIBDIRSUFFIXROOT"}='"$LIBDIRSUFFIX"'; $params{i586}{SLKCFLAGS}='"-O2 -march=i586 -mtune=i686"'; $params{i586}{LIBDIRSUFFIX}='""'; $params{i586}{"gcc:LIB_ARCH"}='"i386"'; $params{i686}{"wavpack:MMX"}='"--enable-mmx"'; $params{i586}{"qemu:KVMARCH"}='"i386"'; $params{x86_64}{"wavpack:MMX"}='"--enable-mmx"'; ############################################################ foreach $arch (@archs) { foreach(split(' ',$fpic{$arch})) { $params{$arch}{"$_:SLKCFLAGS"}='"-O2 -fPIC"'; if(!defined($params_default{"$_:SLKCFLAGS"})) { $params_default{"$_:SLKCFLAGS"}=$params_default{"SLKCFLAGS"}; } } } $debug=$ENV{DEBUG}; sub checkadd { my $arch=shift; my $pp=$params{$arch}; if($arch eq "*") { $pp=\%params_default; } if($arch eq "aarch64" && $force_add_aarch64) { # Special handle for aarch64 (should add the entry for LIBSUFFIXDIR "mark") if(!($exclude=~m/ $packageregexp /) || $fixslkcflags) { return(1); } return(0); } if(($exclude=~m/ $packageregexp /) && !$fixslkcflags) { return(0); } my ($i,$value); for($i=0;$i<=$#params;$i++) { $p=$params[$i]; $value=$pp->{"${package}:$p"}; if(defined($value)) { return(1); } } return(0); } sub fixfcommon { my ($p,$value)=@_; my ($i); if($p eq "SLKCFLAGS" && $fixslkcflags && !($value=~m/-fcommon/)) { $i=rindex($value,'"'); if($i>0) { $value=substr($value,0,$i)." -fcommon\""; } else { $value.=" -fcommon"; } $_[1]=$value; } return($value); } sub addarch { my $arch=shift; my $pp=$params{$arch}; if($arch eq "*") { $pp=\%params_default; } my ($i,$add,$value); $add=""; if($case) { $filler="${arch})"; if($case==1) { $filler.=" " x (11-length($filler)); } else { $add.="${spaces}${filler}\n"; $filler=" "; } } else { $filler=" "; if($arch ne "*") { $add.="${spaces}elif [ \"\$ARCH\" = \"$arch\" ]; then\n"; } } for($i=0;$i<=$#params;$i++) { $p=$params[$i]; $value=$pp->{"${package}:$p"}; if($do_params{$p} || defined($value)) { if(!defined($value)) { $value=$pp->{$p}; } if(defined($value)) { fixfcommon($p,$value); print "{$fixed [$arch] Adding $p=$value}\n" if($debug); if($arch eq "*" && $do_params{$p}<2) { $fixed++; } $add.="${spaces}${filler}${export}$p=$value\n"; $filler=" " x length($filler); } } } if($case) { $add.="${spaces}${filler};;\n"; } return($add); } sub fixarch { my $arch=shift; my $pp=$params{$arch}; if($arch eq "*") { $pp=\%params_default; } my ($i,$value); if($case) { $filler=" " x 11; } else { $filler=" "; } for($i=0;$i<=$#params;$i++) { $p=$params[$i]; if($do_params{"${arch}:$p"}) { next; } $value=$pp->{"${package}:$p"}; if(defined($value)) { fixfcommon($p,$value); print "{[$arch] Fix/Adding $p=$value}\n" if($debug); $add.="${spaces}${filler}${export}$p=$value\n"; } } if(length($add)>0) { $fixed++; } return($add); } #### MAIN #### foreach $file (@ARGV) { if(length($file)==0) { next; } $package=$file; $package=~s/\.SlackBuild.*|\.build.*//; $package=~s/.*\///; $packageregexp=$package; $packageregexp=~s/\+/\\+/; # Check if the file set LIBDIRSUFFIX and/or SLKCFLAGS, and update it if(!open(F,$file)) { print STDERR "Cannot open file '$file': $!\n"; next; } $status="SEARCH"; $fixed=0; $time64ok=0; $buffer=""; $baux=0; $nbaux=0; $case=0; $archfixed=0; $fixslkcflags=0; $ccfixed=0; $addi586=0; while() { print "[$status / $num_params / $current / $fixed] $_" if($debug); if(m/=.{SYSTEM_LLVM:-NO}/) { # We don't want rust to be builded with bundled LLVM (not patched for archs != x86*): s/(=.{SYSTEM_LLVM:-)NO/${1}YES/; $fixed++; } if($status eq "SEARCHCC") { if(index($forcecc," $package ")<0) { $status="SEARCH"; } elsif(length($_)>1) { if(m|^# Force gcc/g| || $ccfixed) { $status="CCEND"; } else { $fccarch=""; if(length($forcecc_arch{$package})>0) { foreach $a (split(",",$forcecc_arch{$package})) { $fccarch.="-o \"\${ARCH}\" = \"$a\" "; } } $_="# Force gcc/g++ for platforms that has clang only for GPUs\n". "if [ `file -L /usr/bin/clang | grep -c 'shell.script'` -gt 0 ${fccarch}] ; then\n". " export CC=gcc; export CXX=g++;\n". "fi\n\n". $_; $status="SEARCH"; $fixed+=1000; } $ccfixed=1; } } elsif($status eq "CCEND") { if(m/^esac/) { $status="SEARCH"; } } if($status eq "SEARCH") { %do_params=(); $fixtarget=0; $num_params=0; $export=""; %arch=(); %curval=(); foreach $arch (@archs) { $arch{$arch}=0; } #$aarch64=0; #$armv7hl=0; #$arm=0; if(m/time64 for 32bit systems/) { $time64ok=1; } elsif(length($time64{$package}) && !$time64ok && m/$time64_pre/) { $time64ok=2; ($ver,$build)=split("\t",$time64{$package}); $fixed+=10000; $_="# Fix build number if the package was built before 15.0 release (!time64 for 32bit systems):\n". 'if [ `gcc -dM -E - < /dev/null | grep -c _LP64` -eq 0 -a "$VERSION" = "'.$ver.'" -a "$BUILD" = "'.$build.'" ]; then'."\n". ' BUILD="${BUILD}_time64"'."\n". 'fi'."\n\n".$_; } elsif(m/# Add AArch|# Fix configure to support shared libraries for PPC64LE/) { $baux=1; print "[WARNING] build-aux already present, excluded...\n" if($debug); } elsif(m/^\s*if.*\[.*\$ARCH.*=.*x86_64.*\]/) { ($spaces)=m/(^\s*)/; $status="LIB64"; if($force_add_aarch64) { if(m/aarch64/ || ($exclude=~m/ $packageregexp / && !$fixslkcflags)) { # Already patched for aarch64 $arch{aarch64}=1; $status="SEARCH"; $prev=""; } else { $arch{aarch64}=0; $prev=$_; $_=""; } } else { $prev=$_; $_=""; } } elsif(m/^\s*if.*\[.*\$\{?ARCH.*=.*\]/) # } just to close the curly bracket.... { if(!$archfixed) { $status="IFARCH"; $current=undef; $case=0; } } elsif(m/^\s*case.*\$\{?ARCH.*in.*/) # } just to close the curly bracket.... { if(!$archfixed) { $case=1; $status="IFARCH"; $current=undef; } else { if($targetfix=~m/ $package /) { $status="CASETARGET"; $fixtarget=0; } } } elsif(m/^\s*case.*(\$\{?MARCH|uname -m).*in.*/) # } just to close the curly bracket.... { if(! ($onlyi686=~m/ $packageregexp /)) { # To fix i686 => i586 $status="MARCH"; } } elsif(m/^\s*for\s+swr_arch\s+in\s+/) { # Skip mesa GALLIUM_DRIVERS addition $status="SKIPFOR"; } elsif(!$baux && m/$buildaux_pre/) { print "[BAUXCHECK] Checking build aux... for ${package}\n" if($debug); ($dirs)=($buildauxfull=~m/ (${packageregexp}(?::\S*)?) /); if(length($dirs)) { print "[BAUXCHECK] FOUND!!\n" if($debug); ($dirs)=($buildaux=~m/ (${packageregexp}(?::\S*)?) /); ($spaces)=m/(^\s*)/; @times=(); @dirs=(); $add=""; ($pack,@times)=split(":",$dirs,-1); if(length($pack)>0) { if($#times<0) { @dirs=("."); } else { @dirs=split(",",$times[$nbaux]); } } if($#dirs>=0) { if(!($lastline=~m/^\s*$/)) { $add.="\n"; } $add.="${spaces}# Add AArch64 architecture (and new architectures):\n"; for($i=0;$i<=$#dirs;$i++) { $add.="${spaces}\\cp /usr/share/libtool/build-aux/config.* $dirs[$i]\n"; } $add.="\n"; $lastline=""; $fixed+=10; } ($dirs)=($conffix=~m/ (${packageregexp}(?::\S*)?) /); if(length($dirs)) { ($pack,@times)=split(":",$dirs,-1); if($#times<0) { @dirs=(" "); } else { @dirs=split(",",$times[$nbaux]); } if($#dirs>=0) { if(!($lastline=~m/^\s*$/)) { $add.="\n"; } $add.="${spaces}# Fix configure to support shared libraries for PPC64LE and _REENTRANT for or1k:\n"; $add.="${spaces}if [ -x /usr/share/libtool/build-aux/fix_configure ]; then\n"; for($i=0;$i<=$#dirs;$i++) { $add.="${spaces} /usr/share/libtool/build-aux/fix_configure $dirs[$i]\n"; } $add.="${spaces}fi\n"; $add.="\n"; $fixed+=10; } } $nbaux++; $_=$add.$_; $status="BUILDAUX"; } } } elsif($status eq "BUILDAUX") { if(m/^\s*$|^\s*tar\s+|^\s*cd\s+/) { $status="SEARCH"; } } elsif($status eq "SKIPFOR") { if(m/^\s*done\s*$/) { $status="SEARCH"; } } elsif($status eq "LIB64") { # Be sure we are setting only LIBDIRSUFFIX if(m/LIBDIRSUFFIX/) { if($force_add_aarch64 && !$arch{aarch64}) { $prev=~s/" \]/" -o "\$ARCH" = "aarch64" \]/; } $status="LIB64OK"; } else { $status="IFARCH"; } $buffer.=$prev; } elsif($status eq "LIB64OK") { if(m/^\s*else/) { $status="LIB64ELSE"; } else { # It set other things, revert it $do_params{LIBDIRSUFFIX}=1; $num_params=1; $status="IFARCH"; if($force_add_aarch64) { $buffer=~s/" -o "\$ARCH" = "aarch64" \]/" \]/; } #if($fixed<0) { $fixed=0; } } } elsif($status eq "LIB64ELSE") { # Wait "fi" if(m/LIBDIRSUFFIX.*=.*/) { #if(!$fixed) { $fixed=-1; } #else { $fixed++ } if((!($exclude=~m/ $packageregexp /) || $fixslkcflags) && !m/LIBDIRSUFFIX:-/) { $fixed++; s/LIBDIRSUFFIX.*=.*"*/LIBDIRSUFFIX=\$\{LIBDIRSUFFIX:-\"\"\}/; } } elsif(m/^\s*fi/) { $status="SEARCH"; } } if($status eq "MARCH") { if(m/^\s*\*\s*\)|^\s*esac/) { $status="SEARCH"; } elsif(m/ARCH=i686/) { $addi586=1; $fixed+=0.1; s/ARCH=i686/ARCH=i586/; } } if($status eq "IFARCH") { # Be sure we are setting LIBDIRSUFFIX/SLKCFLAGS in the branch $add=""; if($num_params==0 && (m/^\s*else|^\s*fi/ || ($case && m/^\s*\*\s*\)|^\s*esac/))) { $status="SEARCH"; } elsif(m/^\s*else|^\s*fi/) { $add=fixarch($current); $status="IFARCHOK"; $archfixed++; } elsif(!$case && m/\$ARCH.*"\S+"/) { $add=fixarch($current); ($current)=m/\$ARCH.*"(\S+)"/; $arch{$current}=1; } if(!$case && length($add)>0) { $buffer.=$add; } if($case && $status eq "IFARCH") { if(m/\).*TARGET.*gnueabi/) { $status="CASETARGET"; $fixtarget=0; } elsif(m/^\s*\*\s*\)|^\s*esac/) { $add=fixarch($current); $status="IFARCHOK"; $current=undef; } elsif(m/^\s*\S+\s*\)/) { $add=fixarch($current); ($current)=m/^\s*(\S+)\s*\)/; $arch{$current}=1; } if($case && m/^\s*\S+\s*\)/) { # Get the spaces... ($spaces)=m/(^\s*)/; if(m/\)\s*$/) { $case=2; } } if(defined($current) && $case && m/;;/) { $add=fixarch($current); if(length($add)>0) { if(m/\s*;;\s*/) { $_=$add.$_; } else { $_=s/;;//; $_.=$add."${spaces}${filler};;\n"; } } $current=undef; } } if(m/$filter_params/) { if(m/SLKCFLAGS.*-fcommon/) { $num_params++; print "FORCING SLKCFLAGS update for -O2 -fcommon\n" if($debug); $fixslkcflags=1; $params_default{"${package}:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -fcommon"}'; foreach $arch (@archs) { if(defined($params{$arch}{"${package}:SLKCFLAGS"})) { if(index($params{$arch}{"${package}:SLKCFLAGS"},"-fcommon")<0) { $params{$arch}{"${package}:SLKCFLAGS"}.=" -fcommon"; } } } } for($i=0;$i<=$#params;$i++) { if(m/\s+$params[$i]\s*=/i && (!defined($params_specific{$params[$i]}) || defined($params_default{"${package}:$params[$i]"}) )) { if($do_params{$params[$i]}<=0) { $do_params{$params[$i]}=-1; if(!m/LIBDIRSUFFIX/ || m/LIBDIRSUFFIX.*=.*64/) { $num_params++; $do_params{$params[$i]}=1; } } if(defined($current)) { if(defined($value=$params{$current}{"${package}:$params[$i]"})) { # Replace the current value fixfcommon($params[$i],$value); if(m/$params[$i](\s*)=(\s*)(.*?);/) { ($curval)=m/$params[$i]\s*=\s*(.*?);/; if($curval ne $value) { s/$params[$i](\s*)=(\s*)(.*?);/$params[$i]$1=$2$value;/; $fixed++; } } else { ($curval)=m/$params[$i]\s*=\s*(.*)/; if($curval ne $value) { s/$params[$i](\s*)=(\s*)(.*)/$params[$i]$1=$2$value/; $fixed++; } } } elsif($current eq "arm" && m/march=armv4|mtune/) { # Substitute armv4[t] with armv5te s/-march=armv4[te]+("?)/-march=armv5te -mfloat-abi=soft$1/g; s/-march=armv4("?)/-march=armv5te -mfloat-abi=soft$1/g; s/\s*-mtune=\S+"/"/; s/\s*-mtune=\S+(.*?")/$1/; $fixed++; } elsif($current eq "i686" && m/march=pentium4/ && ($onlyi686=~m/ $packageregexp /)) { s/-march=pentium4/-march=i686/g; $fixed+=0.1; } # Save value to replicate for i586 if(m/$params[$i](\s*)=(\s*)(.*?);/) { ($curval)=m/$params[$i]\s*=\s*(.*?);/; } else { ($curval)=m/$params[$i]\s*=\s*(.*)/; } if(defined($curval{$current}{$params[$i]})) { print "Warning (${package}): $params[$i] for $current already defined (old=$curval{$current}{$params[$i]}, new=$curval)\n"; } $curval{$current}{$params[$i]}=$curval; } $do_params{"${current}:$params[$i]"}++; print "PARAM ${current}:$params[$i] done.\n" if($debug); if(m/export /) { $export="export "; } } } } } if($status eq "CASETARGET") { # Handle quadled special case if(m/\).*TARGET.*gnueabi/) { ($spaces)=m/(^\s*)/; $fixtarget=1; } elsif(m/\).*TARGET.*gnuabi64/) { $fixtarget=-1; } if(m/^\s*\*\s*\)|^\s*esac/) { if($fixtarget>0) { $case=1; $add=""; foreach $arch(@archs) { if(defined($params{$arch}{TARGET})) { $fixed+=100; $add.="${spaces}${arch}) ${export}TARGET=$params{$arch}{TARGET} ;;\n"; } } $_=$add . $_; $fixtarget=-1; } $status="SEARCH"; $current=undef; } } if($status eq "IFARCHOK" || $status eq "IFARCHELSE") { if($num_params==1 && $do_params{SLKCFLAGS} && !($force_only_slkcflags=~m/ $packageregexp /)) { # Do not update if only SLKCFLAGS is set $status="SEARCHCC"; } $add=""; if($status eq "IFARCHOK") { if(m/^\s*else|^\s*fi/ || ($case && m/^\s*\*\s*\)|^\s*esac/)) { # Reached else branch, add specific architecture flags (if not already done) if(!$case || m/^\s*\*\s*\)/) { ($spaces)=m/(^\s*)/; } # From about June 2024 Slackware progressively removed i586 support from packages # due to SSE requirement for some packages. Restore it to have support for (old) i586 # processors. if(!$arch{i586} && $addi586) { $fixed+=0.1; foreach $cp (keys %{$curval{i686}}) { $params{i586}{"${package}:$cp"}=$curval{i686}{$cp}; } if(defined($params{i586}{"${package}:SLKCFLAGS"})) { # cifs-utils incorrectly set only march (wrong duplicate case). # Check it anyway for any wrongly set package if($params{i586}{"${package}:SLKCFLAGS"}=~m/-march=\S+"/) { $params{i586}{"${package}:SLKCFLAGS"}=~s/-march=\S+"/-march=i586"/; } else { $params{i586}{"${package}:SLKCFLAGS"}=~s/-march=\S+/-march=i586/; } if($params{i586}{"${package}:SLKCFLAGS"}=~m/-mtune=\S+"/) { $params{i586}{"${package}:SLKCFLAGS"}=~s/-mtune=\S+"/-mtune=i686"/; } else { $params{i586}{"${package}:SLKCFLAGS"}=~s/-mtune=\S+/-mtune=i686/; } } $add.=addarch("i586"); $arch{i586}=1; } foreach $arch(@archs) { if(!$arch{$arch} && checkadd($arch)) { print "+ ADDING $arch...\n" if($debug); $fixed++; $add.=addarch($arch); } } #elsif($fixed<0) { $fixed=0; } # xine-lib has x86_64 as the first entry if($exclude=~m/ $packageregexp / && !$fixslkcflags) { $status="SEARCHCC"; } elsif(m/^\s*fi/) { $add.="${spaces}else\n"; $status="IFARCHELSE"; } elsif($case && m/\s*esac/) { $status="IFARCHELSE"; } } } if($status eq "IFARCHELSE") { # Wait "fi" if(m/^\s*fi/ || ($case && m/\s*esac/)) { #if($fixslkcflags) { $fixed++; } #$fixed=1; if(!$case) { ($spaces)=m/(^\s*)/; } if(!($exclude=~m/ $packageregexp /) || $fixslkcflags || $fixed) { $add.=addarch("*"); } $status="SEARCHCC"; } else { # Set specific SLKCFLAGS if(m/SLKCFLAGS/) { ($value)=m/SLKCFLAGS\s*=.*?(".*")/; if(defined($params_default{"${package}:SLKCFLAGS"})) { if(index($params_default{"${package}:SLKCFLAGS"},$value)>=0) { #$fixslkcflags=0; $do_params{SLKCFLAGS}=2; print "[$fixed] SLKCFLAGS already ok (".$params_default{"${package}:SLKCFLAGS"}.")\n" if($debug); } elsif(index($params_default{"${package}:SLKCFLAGS"},"-fcommon")>0) { { print "FORCING SLKCFLAGS to ".$params_default{"${package}:SLKCFLAGS"}."\n" if($debug); $fixslkcflags=2; } } else { $fixed++; } } elsif(index($value,"-fcommon")>=0) { $params_default{"${package}:SLKCFLAGS"}='${SLKCFLAGS:-'.$value.'}'; print "SETTING SLKCFLAGS to ".$params_default{"${package}:SLKCFLAGS"}."\n" if($debug); $fixslkcflags=3; } } if(m/$filter_params/) { for($i=0;$i<=$#params;$i++) { if(m/\s+$params[$i]\s*=/i && (!defined($params_specific{$params[$i]}) || defined($params_default{"${package}:$params[$i]"}) )) { $do_params{$params[$i]}=2; if(!defined($value=$params_default{"${package}:$params[$i]"})) { $value=$params_default{$params[$i]}; } if(index($_,$value)<0 && (!m/SLKCFLAGS/ || $fixslkcflags)) { if(!($exclude=~m/ $packageregexp /) || $fixslkcflags) { $fixed++; } } if(m/export /) { $export="export "; } } } } $_=""; } } if($status eq "IFARCHOK" && (m/^\s*else/ || ($case && m/^\s*\*\s*\)/))) { $status="IFARCHELSE"; if($case) { $_=""; } } $_=$add . $_; } $buffer.=$_; $lastline=$_; } close(F); if($fixed) { if(1) # Enable/disable real update { if(-e "$file.lib64") { print "File '$file.lib64' already exist, skip patch.\n"; next; } if(!rename($file,"$file.lib64")) { print STDERR "Cannot rename file '$file': $!, overwrite it\n"; } else { # Make a copy to preserve permissions/modes system("cp -p $file.lib64 $file"); } # Backup not very useful: comment the following line if you want it unlink("$file.lib64"); if(!open(F,">$file")) { print STDERR "Cannot open file '$file' for writing: $!\n"; next; } print F $buffer; close(F); } print "File $file fixed ($fixed).\n"; } }