#!/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 "; $include32=" mesa wavpack "; @archs=qw(aarch64 alpha arm armv7hl hppa mips mipsel mips64el or1k ppc ppc64 ppc64le riscv64 s390x sh4 sparc sparc64); #$fpicv5=" ebtables llvm rust seamonkey "; $fpic{arm}="ebtables"; $fpic{armv7hl}="tigervnc cdparanoia fftw ebtables php xine-lib zstd cryptopp"; $fpic{aarch64}="jasper ebtables php electricsheep"; $fpic{hppa}="binutils"; $fpic{mips}="efivar popt"; $fpic{mipsel}="efivar"; $fpic{mips64el}=""; $fpic{or1k}="ffmpeg cryfs"; $fpic{ppc}=""; $fpic{ppc64}=""; $fpic{ppc64le}=$fpic{ppc64}; $fpic{riscv64}="ffmpeg"; $fpic{sparc}=""; $fpic{sparc64}="nmap"; #$ccarchs="sh4|or1k|alpha|hppa*|loongarch*"; $forcecc=" libplist ncftp "; $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 nmap "; # Old Buildaux for 14.2: #$buildaux=" recordmydesktop::. floppy kbd:config/ mtx sysfsutils a2ps:auxdir/ at cdparanoia/ dc3dd:build-aux/ dmapi hplip jed:autoconf/ linuxdoc-tools:::.:config/::::::.::. madplay moc normalize:config/ radeontool vorbis-tools indent:config/ a52dec:autotools/ aalib/ chmlib db48:../dist/ esound gamin glib gst-plugins-base0 gst-plugins-good0 gstreamer0 gtk+ gtkspell ilmbase judy lcms libasyncns libatasmart:build-aux/ libcddb libexif libglade libid3tag id3lib libidl libieee1284 libmad libnjb liboggz liboil libsamplerate:Cfg/ libtheora libvisual libvisual-plugins libwmf libwnck mhash mm openexr pilot-link polkit-gnome popt pygtk sdl:build-scripts/::.::build-scripts/:.:.:. startup-notification t1lib:ac-tools/ htdig:.,db/,libhtdigphp/ libnetfilter_log:build-aux/ metamail:config/ net-snmp pidentd:aux/ expect:tclconfig/ anthy libhangul mtdev:config-aux/ scim-anthy scim-hangul scim-input-pad scim-m17n x11/ blackbox:. ddd electricsheep:::. gftp gv pidgin::. rdesktop sane::. x3270 xaos xmms usb_modeswitch:jim/autosetup/ jmtpfs SDL2_gfx xcm:build-aux/ "; # Still to be fixed: $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 sane::. 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 pidgin::. rdesktop x3270 libwnck chmlib libnjb liboggz liboil mhash pilot-link "; # 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 reiserfsprogs sharutils tcsh vulkan-sdk::::::::::::autoconf/ 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/ gnuchess::::. 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 OR1K: $buildaux.=" polkit-gnome "; # Add fix for old "configure" to support PPC64LE/OR1K $conffix=" sysfsutils libusb-compat lcms lcms2 sqlite db48:../dist/configure gamin x11/ libXaw3dXft libhangul libatasmart openldap-client dmapi libexif libmad libid3tag judy libmng GConf libnfnetlink libnetfilter_cthelper libnetfilter_cttimeout libnetfilter_log gdbm "; $conffix.="moc normalize chmlib gst-plugins-base0 gst-plugins-good0 gstreamer0 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 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 $conffix.="krb5 powertop libplist libusbmuxd libimobiledevice libimobiledevice-glue v4l-utils "; $conffix.="netatalk "; # Only needed for netatalk 3.1.15 (from patches) $targetfix=" binutils gcc glibc "; $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'; @params=qw(SLKCFLAGS OPTIMIZ LIBDIRSUFFIX LIBDIRSUFFIXROOT SLKLDFLAGS ARCHQUADLET CONFIGURE_ARGS ARCHOPTS HOSTTARGET OPTFLAGS WEBKITFLAGS MFILE CONFARGS MMX OPTIMIZE OPTIMIZE_FLAG WITH_SIMD EXTRACONFIGUREOPTIONS); @params_specific=qw(EXTRACONF CMAKE_EXTRA SVGA LIB_ARCH brig addlang TARGET EXTRAGUILE EXTRATEX ENABLE_JIT LINKER ENABLE_GOLD); push(@params,@params_specific); foreach(@params_specific) { $params_specific{$_}=1; } foreach(@archs) { $arch{$_}=0; } $filter_params='\s+'.join('|\s+',@params); %params_default=("SLKCFLAGS"=>'${SLKCFLAGS:-"-O2"}', "LIBDIRSUFFIX"=>'${LIBDIRSUFFIX:-""}', "SLKLDFLAGS"=>'${SLKLDFLAGS:-"-L/usr/lib$LIBDIRSUFFIX"}', "ARCHQUADLET"=>'${ARCHQUADLET:-""}', "CONFIGURE_ARGS"=>'${CONFIGURE_ARGS:-""}', "ARCHOPTS"=>'${ARCHOPTS:-""}', "HOSTTARGET"=>'${HOSTTARGET:-""}', "OPTFLAGS"=>'${OPTFLAGS:-"$SLKCFLAGS"}', "WEBKITFLAGS"=>'${WEBKITFLAGS:-""}', "MFILE"=>'`[[ "$LIBDIRSUFFIX" = "64" ]] && echo m-x86_64.h || echo m-i80386.h`', "CONFARGS"=>'${CONFARGS:-""}', "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:SLKCFLAGS"}='${SLKCFLAGS:-"-g0"}'; $params_default{"mozilla-thunderbird:EXTRACONF"}='""'; $params_default{"wavpack:MMX"}='${MMX:-""}'; $params_default{"llvm:CMAKE_EXTRA"}='${CMAKE_EXTRA:-""}'; $params_default{"llvm:LINKER"}='${LINKER:-"gold"}'; $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{"gcc:brig"}='${BRIG:-""}'; $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{"mozjs78:EXTRACONF"}='${EXTRACONF:-""}'; $params_default{"mozjs78:SLKLDFLAGS"}='${SLKLDFLAGS:-""}'; $params_default{"ffmpeg:EXTRACONF"}='${EXTRACONF:-""}'; $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{arm}}=("SLKCFLAGS"=>'"-O2"', "LIBDIRSUFFIX"=>'""', "SLKLDFLAGS"=>'""', "ARCHQUADLET"=>'"-gnueabi"', "CONFIGURE_ARGS"=>'""', "ARCHOPTS"=>'""', "HOSTTARGET"=>'""', "OPTFLAGS"=>'-O3', "WEBKITFLAGS"=>'""', "CONFARGS"=>'""', "MMX"=>'""', "guile:EXTRAGUILE"=>'"--disable-jit"', ); %{$params{aarch64}}=("SLKCFLAGS"=>'"-O2"', "LIBDIRSUFFIX"=>'"64"', "SLKLDFLAGS"=>'"-L/usr/lib$LIBDIRSUFFIX"', "ARCHQUADLET"=>'""', "CONFIGURE_ARGS"=>'""', "ARCHOPTS"=>'""', "HOSTTARGET"=>'""', "OPTFLAGS"=>'-O3', "WEBKITFLAGS"=>'""', "CONFARGS"=>'""', "MMX"=>'""', ); %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{$_}; } } %{$params{armv7hl}}=%{$params{arm}}; $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}{"gcc:brig"}='""'; foreach $p (qw(fcitx fcitx-anthy fcitx-configtool fcitx-hangul fcitx-kkc fcitx-libpinyin fcitx-m17n fcitx-qt5 fcitx-sayura fcitx-table-extra fcitx-table-other fcitx-unikey)) { $params{armv7hl}{"${p}:SLKCFLAGS"}='"-O2"'; } $params{armv7hl}{"criptopp:SLKCFLAGS"}='"-O2 -fPIC -mfpu=neon"'; $params{armv7hl}{"cryfs:SLKCFLAGS"}='"-O2 -fPIC -mfpu=neon"'; $params{armv7hl}{"qt5-webkit:CMAKE_EXTRA"}='""'; $params{armv7hl}{"kcm-fcitx:SLKCFLAGS"}='"-O2"'; $params{armv7hl}{"mozilla-firefox:SLKCFLAGS"}='"-g0"'; $params{armv7hl}{"mozilla-thunderbird:SLKCFLAGS"}='"-g0"'; $params{arm}{"gcc:SLKCFLAGS"}='"-O2 -march=armv5te -mfloat-abi=soft"'; $params{arm}{"gcc:LIB_ARCH"}='"arm"'; $params{arm}{"gcc:brig"}='""'; $params{arm}{"yasm:SLKCFLAGS"}='"-march=armv5te -mfloat-abi=soft -O3"'; $params{arm}{"yasm:SLKLDFLAGS"}='""'; #$params{arm}{"seamonkey:SLKCFLAGS"}='"-march=armv5te -mfloat-abi=soft"'; $params{arm}{"seamonkey:OPTIMIZE_FLAG"}='${OPTIMIZE_FLAG:-"-Os"}'; $params{arm}{"mariadb:SLKLDFLAGS"}='"-latomic"'; $params{arm}{"icu4c:SLKLDFLAGS"}='"-latomic"'; $params{arm}{"wavpack:MMX"}='"--disable-asm"'; #$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}{"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"'; $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-firefox:SLKCFLAGS"}='"-Os -march=armv5te -mfloat-abi=soft"'; #$params{arm}{"mozilla-firefox:EXTRACONF"}='""'; $params{arm}{"mozilla-thunderbird:SLKCFLAGS"}='"-g0"'; #$params{arm}{"mozilla-thunderbird:SLKCFLAGS"}='"-Os -march=armv5te -mfloat-abi=soft"'; #$params{arm}{"mozilla-thunderbird:EXTRACONF"}='""'; $params{arm}{"libjpeg-turbo:WITH_SIMD"}='"-DWITH_SIMD=no"'; $params{arm}{"vulkan-sdk:CMAKE_EXTRA"}='" -DCMAKE_EXE_LINKER_FLAGS=-latomic"'; #$params{arm}{"freerdp:SLKLDFLAGS"}='"-latomic"'; #$params{arm}{"freerdp:CMAKE_EXTRA"}='"$CMAKE_EXTRA -DWITH_NEON=OFF"'; $params{arm}{"freerdp:CMAKE_EXTRA"}='"-DWITH_NEON=OFF"'; $params{arm}{"gjs:SLKLDFLAGS"}='"-latomic"'; $params{arm}{"lcms2:SLKCFLAGS"}='"-O2 -DCMS_PTR_ALIGNMENT=8"'; #$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}{"speexdsp:EXTRACONF"}='"--disable-neon"'; $params{aarch64}{"mpg123:TARGET"}='"aarch64"'; #$params{aarch64}{"glibc:OPTIMIZ"}='"-O3"'; $params{aarch64}{"qt5-webkit:CMAKE_EXTRA"}='""'; $params{aarch64}{"mozilla-firefox:SLKCFLAGS"}='"-g0"'; $params{aarch64}{"mozilla-thunderbird:SLKCFLAGS"}='"-g0"'; $params{i686}{"wavpack:MMX"}='"--enable-mmx"'; $params{x86_64}{"wavpack:MMX"}='"--enable-mmx"'; $params{ppc}{"SLKCFLAGS"}=$params{arm}{SLKCFLAGS}; $params{ppc}{"LIBDIRSUFFIX"}='""'; $params{ppc}{"llvm:LINKER"}='"bfd"'; $params{ppc}{"llvm:CMAKE_EXTRA"}='"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"'; $params{ppc}{"mariadb:SLKLDFLAGS"}=$params{arm}{"mariadb:SLKLDFLAGS"}; $params{ppc}{"vulkan-sdk:CMAKE_EXTRA"}=$params{arm}{"vulkan-sdk:CMAKE_EXTRA"}; $params{ppc}{"dhcp:SLKLDFLAGS"}='"-latomic"'; $params{ppc}{"qt5-webkit:SLKCFLAGS"}='"-O2 -fPIC"'; $params{ppc}{"qt5-webkit:CMAKE_EXTRA"}='"-DENABLE_JIT=OFF"'."\n ".'export PATH="$CWD/nogold:$PATH"'; $params{ppc}{"ffmpeg:SLKLDFLAGS"}='"-latomic"'; $params{ppc}{"gjs:SLKLDFLAGS"}='"-latomic"'; $params{ppc}{"qt5:SLKLDFLAGS"}='"-latomic"'; $params{ppc64}{"SLKCFLAGS"}=$params{aarch64}{SLKCFLAGS}; $params{ppc64}{"SLKLDFLAGS"}=$params{aarch64}{SLKLDFLAGS}; $params{ppc64}{"LIBDIRSUFFIX"}='"64"'; $params{ppc64}{"texlive:EXTRATEX"}='"--disable-luajittex --disable-mfluajit"'; %{$params{ppc64le}}=%{$params{ppc64}}; delete($params{ppc64le}{"texlive:EXTRATEX"}); $params{mips}{"SLKCFLAGS"}=$params{arm}{"SLKCFLAGS"}; $params{mips}{"LIBDIRSUFFIX"}='""'; $params{mips}{"mariadb:SLKLDFLAGS"}=$params{arm}{"mariadb:SLKLDFLAGS"}; $params{mips}{"llvm:CMAKE_EXTRA"}='" -DCMAKE_EXE_LINKER_FLAGS=-latomic -DCMAKE_MODULE_LINKER_FLAGS=-latomic -DCMAKE_SHARED_LINKER_FLAGS=-latomic"'; $params{mips}{"vulkan-sdk:CMAKE_EXTRA"}=$params{arm}{"vulkan-sdk:CMAKE_EXTRA"}; $params{mips}{"mozjs78:EXTRACONF"}='"--disable-jit"'; $params{mips}{"mozjs78:SLKLDFLAGS"}='"-latomic -lpthread"'; $params{mips}{"ffmpeg:EXTRACONF"}='"--disable-loongson3"'; $params{mips}{"ffmpeg:SLKLDFLAGS"}='"-latomic"'; $params{mips}{"dhcp:SLKLDFLAGS"}='"-latomic"'; $params{mips}{"qt5:SLKLDFLAGS"}='"-latomic"'; $params{mips}{"gjs:SLKLDFLAGS"}='"-latomic"'; $params{mips}{"qt5-webkit:CMAKE_EXTRA"}='""'; $params{mips}{"poke:EXTRACONF"}='"--disable-assembly"'; %{$params{mipsel}}=%{$params{mips}}; $params{mips64el}{"SLKCFLAGS"}=$params{arm}{"SLKCFLAGS"}; $params{mips64el}{"LIBDIRSUFFIX"}='"64"'; $params{mips64el}{"TARGET"}='$ARCH-slackware-linux-gnuabi64'; #$params{mips64el}{"freerdp:CMAKE_EXTRA"}='"-DWITH_SANITIZE_ADDRESS=OFF"'; $params{mips64el}{"llvm:CMAKE_EXTRA"}='" -DLLVM_HOST_TRIPLE=mips64el-linux-gnuabi64"'; $params{riscv64}{"SLKCFLAGS"}=$params{aarch64}{SLKCFLAGS}; $params{riscv64}{"SLKLDFLAGS"}=$params{aarch64}{SLKLDFLAGS}; $params{riscv64}{"LIBDIRSUFFIX"}='"64"'; $params{riscv64}{"glibc:OPTIMIZ"}='"-O3"'; $params{riscv64}{"glibc:LIBDIRSUFFIXROOT"}='"64/lp64d"'; $params{riscv64}{"pcre:ENABLE_JIT"}='""'; $params{riscv64}{"pcre2:ENABLE_JIT"}='""'; $params{riscv64}{"texlive:EXTRATEX"}='"--disable-luajittex --disable-mfluajit --disable-luajithbtex"'; $params{riscv64}{"llvm:LINKER"}='"bfd"'; $params{riscv64}{"llvm:CMAKE_EXTRA"}='"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"'; $params{riscv64}{"mozjs78:EXTRACONF"}='"--disable-jit"'; $params{riscv64}{"qt5:SLKLDFLAGS"}='"-latomic"'; $params{riscv64}{"qt5-webkit:CMAKE_EXTRA"}='"-DCMAKE_EXE_LINKER_FLAGS=-latomic -DCMAKE_SHARED_LINKER_FLAGS=-latomic -DENABLE_JIT=OFF"'; #$params{riscv64}{"cryfs:CMAKE_EXTRA"}='"-DCMAKE_LIBRARY_PATH=/usr/lib64"'; # On riscv64 I didn't reach to insert /usr/lib64 to gcc's library path..... $params{s390x}{"SLKCFLAGS"}=$params{arm}{"SLKCFLAGS"}; $params{s390x}{"LIBDIRSUFFIX"}='"64"'; $params{s390x}{"pcre:ENABLE_JIT"}='""'; $params{s390x}{"pcre2:ENABLE_JIT"}='""'; $params{s390x}{"texlive:EXTRATEX"}=$params{riscv64}{"texlive:EXTRATEX"}; $params{s390x}{"binutils:ENABLE_GOLD"}='"no"'; $params{alpha}{"SLKCFLAGS"}='"-O2"'; $params{alpha}{"SLKLDFLAGS"}='""'; $params{alpha}{"LIBDIRSUFFIX"}='""'; $params{alpha}{"pcre:ENABLE_JIT"}='""'; $params{alpha}{"pcre2:ENABLE_JIT"}='""'; $params{alpha}{"texlive:EXTRATEX"}=$params{riscv64}{"texlive:EXTRATEX"}; $params{alpha}{"llvm:LINKER"}='"bfd"'; $params{alpha}{"ruby:SLKCFLAGS"}='"-O1"'; # gcc internal error with -O2/-O3 # Fix Floating Point Exception (when overflow double=>float or float=>half, # hardware does not convert to "inf" 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}{"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}{"mariadb:SLKLDFLAGS"}='"-Wl,--no-relax"'; # will fix "relocation truncated to fit: GPREL16" from 10.5.22 (patches) $params{hppa}{"SLKCFLAGS"}='"-O2"'; $params{hppa}{"SLKLDFLAGS"}='""'; $params{hppa}{"LIBDIRSUFFIX"}='""'; $params{hppa}{"llvm:LINKER"}='"bfd"'; #$params{hppa}{"llvm:CMAKE_EXTRA"}='"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"'; $params{hppa}{"pcre:ENABLE_JIT"}='""'; $params{hppa}{"pcre2:ENABLE_JIT"}='""'; #$params{hppa}{"mariadb:SLKLDFLAGS"}=$params{arm}{"mariadb:SLKLDFLAGS"}; $params{hppa}{"texlive:EXTRATEX"}=$params{riscv64}{"texlive:EXTRATEX"}; $params{hppa}{"gcc:addlang"}='"ada,d,"'; $params{hppa}{"llvm:LINKER"}='"bfd"'; $params{or1k}{"SLKCFLAGS"}='"-O2"'; $params{or1k}{"SLKLDFLAGS"}='""'; $params{or1k}{"LIBDIRSUFFIX"}='""'; $params{or1k}{"llvm:LINKER"}='"bfd"'; $params{or1k}{"llvm:CMAKE_EXTRA"}='"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"'; $params{or1k}{"pcre:ENABLE_JIT"}='""'; $params{or1k}{"pcre2:ENABLE_JIT"}='""'; $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}{"texlive:EXTRATEX"}=$params{riscv64}{"texlive:EXTRATEX"}; $params{or1k}{"vulkan-sdk:CMAKE_EXTRA"}=$params{arm}{"vulkan-sdk:CMAKE_EXTRA"}; $params{or1k}{"dhcp:SLKLDFLAGS"}='"-latomic"'; $params{or1k}{"ffmpeg:SLKLDFLAGS"}='"-latomic"'; $params{or1k}{"gcc:addlang"}='"d,"'; $params{or1k}{"cryfs:CMAKE_EXTRA"}='"-DCMAKE_EXE_LINKER_FLAGS=-latomic"'; $params{or1k}{"qt5-webkit:SLKCFLAGS"}='"-O2 -mcmodel=large"'; $params{or1k}{"qt5-webkit:CMAKE_EXTRA"}='"-DENABLE_JIT=OFF"'; $params{or1k}{"openexr:SLKCFLAGS"}='"-O2 -mcmodel=large"'; $params{sh4}{"SLKCFLAGS"}='"-O2"'; $params{sh4}{"SLKLDFLAGS"}='""'; $params{sh4}{"LIBDIRSUFFIX"}='""'; $params{sh4}{"llvm:LINKER"}='"bfd"'; $params{sh4}{"llvm:CMAKE_EXTRA"}='"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"'; $params{sh4}{"pcre:ENABLE_JIT"}='""'; $params{sh4}{"pcre2:ENABLE_JIT"}='""'; $params{sh4}{"mariadb:SLKLDFLAGS"}=$params{arm}{"mariadb:SLKLDFLAGS"}; $params{sh4}{"ghostscript:SLKCFLAGS"}='"-O2 -fno-delayed-branch"'; $params{sh4}{"texlive:EXTRATEX"}=$params{riscv64}{"texlive:EXTRATEX"}; $params{sh4}{"vulkan-sdk:CMAKE_EXTRA"}=$params{arm}{"vulkan-sdk:CMAKE_EXTRA"}; $params{sh4}{"dhcp:SLKLDFLAGS"}='"-latomic"'; $params{sh4}{"ffmpeg:SLKLDFLAGS"}='"-latomic"'; $params{sh4}{"qt5-webkit:SLKCFLAGS"}='"-O1"'; $params{sh4}{"qt5-webkit:CMAKE_EXTRA"}='"-DENABLE_JIT=OFF"'; $params{sparc}{"SLKCFLAGS"}='"-O2"'; $params{sparc}{"SLKLDFLAGS"}='""'; $params{sparc}{"LIBDIRSUFFIX"}='""'; $params{sparc}{"glibc:OPTIMIZ"}='"-O3 -mcpu=leon3"'; $params{sparc}{"glibc:LIBDIRSUFFIXROOT"}='""'; $params{sparc}{"lcms2:SLKCFLAGS"}='"-O2 -DCMS_PTR_ALIGNMENT=8"'; $params{sparc}{"mariadb:SLKLDFLAGS"}=$params{arm}{"mariadb:SLKLDFLAGS"}; $params{sparc}{"llvm:CMAKE_EXTRA"}='"-DCMAKE_SHARED_LINKER_FLAGS=-latomic"'; $params{sparc}{"vulkan-sdk:CMAKE_EXTRA"}=$params{arm}{"vulkan-sdk:CMAKE_EXTRA"}; $params{sparc}{"dhcp:SLKLDFLAGS"}='"-latomic"'; $params{sparc}{"ffmpeg:SLKLDFLAGS"}='"-latomic"'; $params{sparc}{"xine-lib:EXTRACONF"}='"--disable-vis"'; $params{sparc}{"pcre2:ENABLE_JIT"}='""'; $params{sparc64}{"SLKCFLAGS"}='"-O2"'; $params{sparc64}{"SLKLDFLAGS"}='""'; $params{sparc64}{"LIBDIRSUFFIX"}='"64"'; $params{sparc64}{"pcre:ENABLE_JIT"}='""'; $params{sparc64}{"pcre2:ENABLE_JIT"}='""'; $params{sparc64}{"texlive:EXTRATEX"}=$params{riscv64}{"texlive:EXTRATEX"}; $params{loongarch64}{"SLKCFLAGS"}='"-O2"'; $params{loongarch64}{"SLKLDFLAGS"}='""'; $params{loongarch64}{"LIBDIRSUFFIX"}='"64"'; $params{loongarch64}{"pcre:ENABLE_JIT"}='""'; $params{loongarch64}{"pcre2:ENABLE_JIT"}='""'; $params{loongarch64}{"texlive:EXTRATEX"}=$params{riscv64}{"texlive:EXTRATEX"}; 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; $buffer=""; $baux=0; $nbaux=0; $case=0; $archfixed=0; $fixslkcflags=0; $ccfixed=0; while() { print "[$status / $num_params / $current / $fixed] $_" if($debug); 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=""; foreach $arch (@archs) { $arch{$arch}=0; } #$aarch64=0; #$armv7hl=0; #$arm=0; if(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*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 "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++; } } $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*)/; } 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"; } }