#!/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(<F>)
  {
    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";
  }
}
