#!/usr/bin/perl $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 nftables nmap pinentry pssh rfkill rpcbind slrn snownews tcpdump vsftpd wpa_supplicant xdg-user-dirs MPlayer 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 geeqie "; #$include{arm}=$include{armv7hl}=" mesa wavpack "; #$include{mips}=$include{mipsel}=$include{ppc}=" dhcp "; $fpic{arm}=" ebtables "; #$fpic{armv7hl}=" tigervnc cdparanoia a52dec fftw alpine ebtables php xine-lib "; $fpic{armv7hl}=" tigervnc cdparanoia a52dec fftw alpine ebtables php "; $fpic{aarch64}=" a52dec jasper alpine ebtables php electricsheep "; $fpic{mipsel}=$fpic{mips}=$fpic{ppc}=" ebtables alpine tigervnc a52dec "; $fpic{sparc64}=" elfutils nmap "; $fpic{sparc}=" "; $fpic{alpha}=" ebtables "; $fpic{hppa}=" ebtables tigervnc a52dec "; $force_only_slkcflags=" geeqie "; $force=""; foreach(keys %fpic) { $force.=" $fpic{$_} "; } $buildaux=" recordmydesktop::. findutils:build-aux/ floppy inotify-tools kbd:config/ mtx sysfsutils a2ps:auxdir/ acct at cdparanoia/ cdrdao dc3dd:build-aux/ dmapi hplip jed:autoconf/ linuxdoc-tools:::.:config/::::::.::. madplay moc most:autoconf/ normalize:config/ radeontool sqlite vorbis-tools zsh clisp:build-aux/ distcc gcc:. gnu-cobol indent:config/ a52dec:autotools/ aalib/ aspell chmlib db42:../dist/ db44:../dist/ db48:../dist/ enchant esound exiv2:config/ expat:conftools/ gamin glib gst-plugins-base0 gst-plugins-good0 gstreamer0 gtk+ gtkspell hunspell ilmbase jasper:acaux/ js185:build/autoconf/,ctypes/libffi/ judy lcms lcms2 libart_lgpl libasyncns libatasmart:build-aux/ libcddb libexif libfakekey libglade libid3tag id3lib libidl libieee1284 libiodbc:admin/ libmad libmcrypt libmcs libmowgli libnjb liboggz liboil libsamplerate:Cfg/ libsigsegv:build-aux/ libtheora libtiff:config/ libunistring:build-aux/ libvisual libvisual-plugins libwmf libwnck mhash mm notify-python openexr pilot-link polkit-gnome popt pygobject pygtk sdl:build-scripts/::.:.:build-scripts/:.:. startup-notification system-config-printer t1lib:ac-tools/ virtuoso-ose:binsrc/config/ vte:.,gnome-pty-helper/ cyrus-sasl:config/ dirmngr htdig:.,db/,libhtdigphp/ idnkit iftop:config/ libnetfilter_log:build-aux/ metamail:config/ net-snmp ntp openldap-client:build/ pidentd:aux/ ppp::. pth tetex:config/,texk/,utils/texi2html/ expect:tclconfig/ anthy libhangul m17n-lib mtdev:config-aux/ scim-anthy scim-hangul scim-input-pad scim-m17n x11/ blackbox:. ddd electricsheep:::. gftp gv pidgin::. rdesktop rxvt:autoconf/ sane::. x3270 xaos xmms usb_modeswitch:jim/autosetup/ jmtpfs ccache libssh2 gmm grub:build-aux/ "; # Add HPPA: $buildaux.="libksba:build-aux/ "; # Add fix for old "configure" to support PPC64LE $conffix=" popt attr acl inotify-tools sysfsutils libffi expat libsigsegv libusb-compat lcms lcms2 sqlite db42:../dist/configure db44:../dist/configure db48:../dist/configure libunistring guile gamin x11 libXaw3dXft libhangul m17n-lib mtdev glu freeglut upower libatasmart cyrus-sasl:./config/ltconfig,./saslauthd/config/ltconfig openldap-client gnu-cobol alsa-lib dmapi libexif exiv2 libmad libid3tag judy qpdf giflib libevent libplist libusbmuxd libmng GConf gtkmm2 libmnl libnfnetlink libnetfilter_acct libnetfilter_conntrack libnetfilter_cthelper libnetfilter_cttimeout libnetfilter_log libnetfilter_queue ipset gdbm pth gpgme idnkit:ltconfig bind conntrack-tools "; $conffix.="hplip moc normalize vorbis-tools chmlib esound gst-plugins-base0 gst-plugins-good0 gstreamer0 gtkspell ilmbase libasyncns libcddb libglade libidl libieee1284 libmcrypt libnjb liboggz liboil libtheora libvisual libvisual-plugins libwmf libwnck mhash mm openexr pilot-link polkit-gnome pygtk sdl:configure::configure:configure:configure:configure:configure startup-notification t1lib htdig:configure,db/configure net-snmp anthy scim-anthy scim-hangul scim-input-pad scim-m17n scim-pinyin pidgin::configure xmms:configure,libxmms/configure "; $conffix.="fftw libsamplerate alsa-oss audiofile sbc jasper gegl gsl apr apr-util httpd aspell hunspell enchant libiodbc libzip pygobject sane:configure: libart_lgpl linuxdoc-tools:::configure:::::::::::::: aalib:ltconfig libcaca libnotify blackbox:configure gucharmap gmime libcanberra libxklavier vte libxfce4util xfconf garcon xfce4-clipman-plugin xfce4-screenshooter xfce4-systemload-plugin alsa-plugins libgpod libfakekey libspectre libyaml notify-python "; $conffix.="raptor2 rasqal redland virtuoso-ose ppp::configure clisp:avcall/configure,callback/configure "; $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|^# compile libfftw3'; @params=qw(SLKCFLAGS LIBDIRSUFFIX SLKLDFLAGS ARCHQUADLET CONFIGURE_ARGS ARCHOPTS HOSTTARGET OPTFLAGS WEBKITFLAGS EXTRACONF MFILE CONFARGS FFARCHOPTS MMX DRI_DRIVERS GALLIUM_DRIVERS OPTIMIZE OPTIMIZE_FLAG LIB_ARCH); $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"=>'${MFILE:-"m-i80386.h"}', "CONFARGS"=>'${CONFARGS:-""}', "FFARCHOPTS"=>'${FFARCHOPTS:-""}', ); $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:-"-O1"}'; $params_default{"mozilla-firefox:OPTIMIZE"}='${OPTIMIZE:-" --enable-optimize=-O1 "}'; $params_default{"mozilla-thunderbird:SLKCFLAGS"}='${SLKCFLAGS:-"-O1"}'; $params_default{"mozilla-thunderbird:OPTIMIZE"}='${OPTIMIZE:-" --enable-optimize=-O1 "}'; $params_default{"wavpack:MMX"}='${MMX:-""}'; $params_default{"mesa:DRI_DRIVERS"}='${EXT_DRI_DRIVERS:-"$DRI_DRIVERS"}'; $params_default{"mesa:GALLIUM_DRIVERS"}='${EXT_GALLIUM_DRIVERS:-"$GALLIUM_DRIVERS"}'; $params_default{"gcc:LIB_ARCH"}='${LIB_ARCH:-"$ARCH"}'; $params_default{"dhcp:SLKLDFLAGS"}='${SLKLDFLAGS:-""}'; $params_default{"alpine:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -fPIC"}'; $params_default{"geeqie:SLKCFLAGS"}='${SLKCFLAGS:-"-O2 -D_FILE_OFFSET_BITS=64"}'; %{$params{arm}}=("SLKCFLAGS"=>'"-O2"', "LIBDIRSUFFIX"=>'""', "SLKLDFLAGS"=>'""', "ARCHQUADLET"=>'"-gnueabi"', "CONFIGURE_ARGS"=>'""', "ARCHOPTS"=>'""', "HOSTTARGET"=>'""', "OPTFLAGS"=>'-O3', "WEBKITFLAGS"=>'""', "MFILE"=>'""', "CONFARGS"=>'""', "FFARCHOPTS"=>'""', "MMX"=>'""', ); %{$params{aarch64}}=("SLKCFLAGS"=>'"-O2"', "LIBDIRSUFFIX"=>'"64"', "SLKLDFLAGS"=>'"-L/usr/lib$LIBDIRSUFFIX"', "ARCHQUADLET"=>'""', "CONFIGURE_ARGS"=>'""', "ARCHOPTS"=>'""', "HOSTTARGET"=>'""', "OPTFLAGS"=>'-O3', "WEBKITFLAGS"=>'""', "MFILE"=>'"m-x86_64.h"', "CONFARGS"=>'""', "FFARCHOPTS"=>'"--enable-pic"', "MMX"=>'""', ); # It is only for patches: make it in the diff file %{$params{mips}}=("SLKCFLAGS"=>'"-O2"', "LIBDIRSUFFIX"=>'""', # "dhcp:SLKLDFLAGS"=>'"-latomic"', ); %{$params{mipsel}}=%{$params{ppc}}=%{$params{mips}}; %params_add=("seamonkey:OPTIMIZE_FLAG"=>'"-O1"', "mozilla-firefox:SLKCFLAGS"=>'"-O1"', "mozilla-firefox:OPTIMIZE"=>'" --enable-optimize=-O1 "', "mozilla-thunderbird:SLKCFLAGS"=>'"-O1"}', "mozilla-thunderbird:OPTIMIZE"=>'" --enable-optimize=-O1 "', "mesa:DRI_DRIVERS"=>'"nouveau,r300,r600,radeonsi,swrast,virgl,freedreno,vc4"', "mesa:GALLIUM_DRIVERS"=>'"nouveau,r300,r600,radeonsi,swrast,virgl,freedreno,vc4"', ); foreach(keys %params_add) { $params{arm}{$_}=$params_add{$_}; $params{aarch64}{$_}=$params_add{$_}; } %{$params{armv7hl}}=%{$params{arm}}; $params{armv7hl}{"xine-lib:FFARCHOPTS"}='"--enable-pic"'; $params{arm}{"wavpack:MMX"}='"--disable-asm"'; $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{alpha}{"SLKCFLAGS"}='"-O2"'; $params{alpha}{"SLKLDFLAGS"}='""'; $params{alpha}{"LIBDIRSUFFIX"}='""'; # 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}{"ilmbase:SLKCFLAGS"}='"-O2 -mieee"'; $params{alpha}{"librsvg:SLKCFLAGS"}='"-O2 -mieee"'; $params{alpha}{"openexr:SLKCFLAGS"}='"-O2 -mieee"'; $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}{"geeqie:SLKCFLAGS"}='"-O2 -D_FILE_OFFSET_BITS=64 -mieee"'; $params{sparc64}{"SLKCFLAGS"}='"-O2"'; $params{sparc64}{"SLKLDFLAGS"}='""'; $params{sparc64}{"LIBDIRSUFFIX"}='"64"'; $params{hppa}{"xine-lib:FFARCHOPTS"}='"--enable-pic"'; $params{sparc}{"SLKCFLAGS"}='"-O2"'; $params{sparc}{"SLKLDFLAGS"}='""'; $params{sparc}{"LIBDIRSUFFIX"}='""'; #$params{sparc}{"akonadi:SLKLDFLAGS"}='"-latomic"'; # the real missing linking is from boost library libboost_program_options $params{sparc}{"boost:SLKLDFLAGS"}='"-latomic"'; $debug=$ENV{DEBUG}; foreach $arch (keys %fpic) { foreach(split(' ',$fpic{$arch})) { $params{$arch}{"$_:SLKCFLAGS"}='"-O2 -fPIC"'; if(!defined($params_default{"$_:SLKCFLAGS"})) { $params_default{"$_:SLKCFLAGS"}=$params_default{"SLKCFLAGS"}; } } } foreach $arch (keys %params) { foreach $p (keys %{$params{$arch}}) { ($p1,$p2)=split(':',$p); if(length($p2)>0) { $include{$arch}.=" $p1 "; } } } sub addarch { my $arch=shift; my $pp=shift; my ($filler,$i,$add,$value); $add=""; if($case) { $filler="${arch})"; $filler.=" " x (11-length($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}; } $add.="${spaces}${filler}${export}$p=$value\n"; $filler=" " x length($filler); } } if($case) { $add.="${spaces}${filler};;\n"; } return($add); } foreach $file (@ARGV) { $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; while() { print "[$status / $num_params] $_" if($debug); if($status eq "SEARCH") { %do_params=(); $num_params=0; $export=""; %arch=(); #$aarch64=0; #$armv7hl=0; #$arm=0; #$mips=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(m/aarch64/ || ($exclude=~m/ $packageregexp /)) { # Already patched for aarch64 $arch{aarch64}=1; $status="SEARCH"; $prev=""; } else { $arch{aarch64}=0; $prev=$_; $_=""; } } elsif(m/^\s*if.*\[.*\$\{?ARCH.*=.*\]/) # } just to close the curly bracket.... { $status="IFARCH"; } elsif(m/^\s*case.*\$\{?ARCH.*in.*/) # } just to close the curly bracket.... { $status="IFARCH"; $case=1; } 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=(); ($pack,@times)=split(":",$dirs,-1); $add=""; 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 new architectures:\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 "LIB64") { # Be sure we are setting only LIBDIRSUFFIX if(m/LIBDIRSUFFIX/) { if(!$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"; $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++ } $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 if($num_params==0 && (m/^\s*else|^\s*fi/ || ($case && m/^\s*\*\s*\)|^\s*esac/))) { $status="SEARCH"; } elsif(m/$filter_params/) { for($i=0;$i<=$#params;$i++) { if(m/\s+$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(m/export /) { $export="export "; } } } } elsif(m/\$ARCH.*"\S+"/) { ($current)=m/\$ARCH.*"(\S+)"/; $arch{$current}=1; } elsif(m/^\s*else|^\s*fi/) { $status="IFARCHOK"; } if($case && $status eq "IFARCH") { if(m/^\s*\*\s*\)|^\s*esac/) { $status="IFARCHOK"; } elsif(m/^\s*\S+\s*\)/) { ($current)=m/^\s*(\S+)\s*\)/; $arch{$current}=1; } if($case && m/^\s*\S+\s*\)/) { # Get the spaces... ($spaces)=m/(^\s*)/; } } } 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="SEARCH"; } $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 $a (sort keys %fpic) { if($a ne "aarch64") { print "[$status / $a] $include{$a}\n" if($debug); if(!$arch{$a} && ($fpic{$a}=~m/ $packageregexp / || $include{$a}=~m/ $packageregexp / )) { $fixed++; $add.=addarch($a,$params{$a}); } } } $a="aarch64"; if(!$arch{$a}) { # Check if it is in the exclude filter: if(!($exclude=~m/ $packageregexp /)) { $fixed++; $add.=addarch("$a",$params{$a}); } } #elsif($fixed<0) { $fixed=0; } # xine-lib has x86_64 as the first entry if(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/)) { #$fixed=1; if(!$case) { ($spaces)=m/(^\s*)/; } $add.=addarch("*",\%params_default); $status="SEARCH"; } else { $_=""; } } if($status eq "IFARCHOK" && (m/^\s*else/ || ($case && m/^\s*\*\s*\)/))) { $status="IFARCHELSE"; if($case) { $_=""; } } $_=$add . $_; } $buffer.=$_; $lastline=$_; } close(F); if($fixed) { 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"); } 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"; } }