Здравствуйте. Я научился программировать на lua. :) Кто-нибудь сталкивался? Язычок в принципе ничего. Очень раздражает отсутствие 'continue' в цикле (при том, что есть 'break'). Разработчики языка не хотят добавлять continue по каким-то принципиальным соображениям. В результате вместо while ... do if ... then continue end end приходится писать while ... do while true do if ... then break end break end end Ну так вот. Алгоритм оптимизации зависимостей в BuildRequires. Происходит в два этапа: 1) expand: список зависимостей дополняется настолько, насколько это возможно; 2) squeeze: список зависимостей сжимается настолько, насколько это возможно. Ниже приводится протокол выполнения алгоритма для списка пакетов { rpm-build, xvfb-run }. На выходе получается тот же самый список (т.е. эти пакеты между собой не зависят, а всё остальное успешно выносится. Usage: ./squeeze.lua <список пакетов>. Для сборки нужно librpm-devel, liblua5-devel, для запуска lua5. $ ./squeeze.lua rpm-build xvfb-run Expanding (pass 1, 2 packages)... rpm-build -> librpmbuild rpm-build -> rpm rpm-build -> shadow-utils Warning: autoconf provided by { autoconf_2.13, autoconf_2.5 } rpm-build -> autoconf-common Warning: automake provided by { automake_1.4, automake_1.8, automake_1.6, automake_1.7 } rpm-build -> automake-common rpm-build -> bison rpm-build -> coreutils rpm-build -> cpio Warning: gcc provided by { gcc3.4, gcc2.95, gcc2.96 } rpm-build -> gettext-tools rpm-build -> glibc-devel rpm-build -> file Warning: kernel-headers provided by { kernel-headers-std-up, glibc-kernheaders, kernel24-headers } Warning: libtool provided by { libtool_1.4, libtool_1.5 } rpm-build -> m4 rpm-build -> make rpm-build -> net-tools rpm-build -> procps rpm-build -> psmisc rpm-build -> sed rpm-build -> service rpm-build -> sh rpm-build -> texinfo rpm-build -> which rpm-build -> bzip2 rpm-build -> gzip rpm-build -> info-install rpm-build -> mktemp rpm-build -> patch rpm-build -> tar rpm-build -> rpm-build-perl rpm-build -> rpm-build-python rpm-build -> rpm-build-tcl rpm-build -> binutils rpm-build -> diffutils rpm-build -> findutils rpm-build -> gawk rpm-build -> glibc-core rpm-build -> grep rpm-build -> libpopt.so.0 -> libpopt rpm-build -> librpm-4.0.4.so -> librpm rpm-build -> perl(File/Basename.pm) -> perl-base xvfb-run -> xorg-x11-Xvfb xvfb-run -> xorg-x11-xauth xvfb-run -> fakeroot Expanding (pass 2, 44 packages)... Warning: autoconf provided by { autoconf_2.13, autoconf_2.5 } Warning: automake provided by { automake_1.4, automake_1.8, automake_1.6, automake_1.7 } Warning: gcc provided by { gcc3.4, gcc2.95, gcc2.96 } Warning: kernel-headers provided by { kernel-headers-std-up, glibc-kernheaders, kernel24-headers } Warning: libtool provided by { libtool_1.4, libtool_1.5 } rpm -> alt-gpgkeys shadow-utils -> shadow-convert shadow-utils -> tcb-utils shadow-utils -> /etc/pam.d -> pam-config Warning: libpam(include) provided by { libpam2, libpam0 } shadow-utils -> libpam.so.0 -> libpam0 shadow-utils -> libpam_userpass.so.1 -> pam0_userpass shadow-utils -> libtcb.so.0 -> libtcb shadow-utils -> pam0(system-auth-use_first_pass) -> pam0-config shadow-utils -> pam_rootok.so -> pam coreutils -> libtinfo.so.5 -> libtinfo gettext-tools -> gettext gettext-tools -> /etc/emacs/site-start.d -> emacs-base gettext-tools -> libintl.so.3 -> libintl3 glibc-devel -> glibc glibc-devel -> glibc-kernheaders glibc-devel -> kernel-headers-common file -> libmagic file -> libz.so.1 -> zlib procps -> libncurses.so.5 -> libncurses psmisc -> SysVinit service -> /bin/tput -> termutils service -> chkconfig bzip2 -> bzlib binutils -> libbfd glibc-core -> setup librpm -> libbeecrypt librpm -> libdb4.3 xorg-x11-Xvfb -> xorg-x11-server-common xorg-x11-Xvfb -> libXau.so.6 -> xorg-x11-libs xorg-x11-Xvfb -> libfreetype.so.6 -> freetype2 fakeroot -> getopt Expanding (pass 3, 75 packages)... Warning: autoconf provided by { autoconf_2.13, autoconf_2.5 } Warning: automake provided by { automake_1.4, automake_1.8, automake_1.6, automake_1.7 } Warning: gcc provided by { gcc3.4, gcc2.95, gcc2.96 } Warning: libtool provided by { libtool_1.4, libtool_1.5 } tcb-utils -> pam_tcb -> pam0_tcb pam0-config -> pam_passwdqc.so -> pam0_passwdqc libtinfo -> terminfo glibc -> glibc-nss glibc -> glibc-locales glibc -> glibc-gconv-modules glibc -> iconv glibc -> glibc-timezones glibc -> glibc-utils libncurses -> libgpm.so.1 -> libgpm SysVinit -> /sbin/sulogin -> msulogin xorg-x11-server-common -> xorg-x11-misc-fonts xorg-x11-server-common -> xorg-x11-utils xorg-x11-server-common -> util-linux xorg-x11-server-common -> xinitrc xorg-x11-server-common -> app-defaults xorg-x11-libs -> freetype xorg-x11-libs -> xorg-x11-locales xorg-x11-libs -> libexpat.so.0 -> libexpat xorg-x11-libs -> libfontconfig.so.1 -> fontconfig Expanding (pass 4, 95 packages)... Warning: autoconf provided by { autoconf_2.13, autoconf_2.5 } Warning: automake provided by { automake_1.4, automake_1.8, automake_1.6, automake_1.7 } Warning: gcc provided by { gcc3.4, gcc2.95, gcc2.96 } Warning: libtool provided by { libtool_1.4, libtool_1.5 } pam0_tcb -> nss_tcb pam0_tcb -> control xorg-x11-misc-fonts -> chkfontpath xorg-x11-misc-fonts -> xorg-x11-font-utils xorg-x11-utils -> xterm xinitrc -> bash Expanding (pass 5, 101 packages)... Warning: autoconf provided by { autoconf_2.13, autoconf_2.5 } Warning: automake provided by { automake_1.4, automake_1.8, automake_1.6, automake_1.7 } Warning: gcc provided by { gcc3.4, gcc2.95, gcc2.96 } Warning: libtool provided by { libtool_1.4, libtool_1.5 } xterm -> libutempter xterm -> alternatives bash -> libhistory.so.4.3 -> libreadline Expanding (pass 6, 104 packages)... Warning: autoconf provided by { autoconf_2.13, autoconf_2.5 } Warning: automake provided by { automake_1.4, automake_1.8, automake_1.6, automake_1.7 } Warning: gcc provided by { gcc3.4, gcc2.95, gcc2.96 } Warning: libtool provided by { libtool_1.4, libtool_1.5 } alternatives -> ed Expanding (pass 7, 105 packages)... Warning: autoconf provided by { autoconf_2.13, autoconf_2.5 } Warning: automake provided by { automake_1.4, automake_1.8, automake_1.6, automake_1.7 } Warning: gcc provided by { gcc3.4, gcc2.95, gcc2.96 } Warning: libtool provided by { libtool_1.4, libtool_1.5 } { rpm-build, xvfb-run, librpmbuild, rpm, shadow-utils, autoconf-common, automake-common, bison, coreutils, cpio, gettext-tools, glibc-devel, file, m4, make, net-tools, procps, psmisc, sed, service, sh, texinfo, which, bzip2, gzip, info-install, mktemp, patch, tar, rpm-build-perl, rpm-build-python, rpm-build-tcl, binutils, diffutils, findutils, gawk, glibc-core, grep, libpopt, librpm, perl-base, xorg-x11-Xvfb, xorg-x11-xauth, fakeroot, alt-gpgkeys, shadow-convert, tcb-utils, pam-config, libpam0, pam0_userpass, libtcb, pam0-config, pam, libtinfo, gettext, emacs-base, libintl3, glibc, glibc-kernheaders, kernel-headers-common, libmagic, zlib, libncurses, SysVinit, termutils, chkconfig, bzlib, libbfd, setup, libbeecrypt, libdb4.3, xorg-x11-server-common, xorg-x11-libs, freetype2, getopt, pam0_tcb, pam0_passwdqc, terminfo, glibc-nss, glibc-locales, glibc-gconv-modules, iconv, glibc-timezones, glibc-utils, libgpm, msulogin, xorg-x11-misc-fonts, xorg-x11-utils, util-linux, xinitrc, app-defaults, freetype, xorg-x11-locales, libexpat, fontconfig, nss_tcb, control, chkfontpath, xorg-x11-font-utils, xterm, bash, libutempter, alternatives, libreadline, ed } Squeezing terminfo ... terminfo < termutils Squeezing alt-gpgkeys ... alt-gpgkeys < rpm Squeezing setup ... setup < glibc-core Squeezing emacs-base ... emacs-base < /etc/emacs/site-start.d < gettext-tools Squeezing glibc-kernheaders ... glibc-kernheaders < glibc-devel Squeezing glibc-core ... glibc-core < libc.so.6 < getopt Squeezing getopt ... getopt < fakeroot Squeezing app-defaults ... app-defaults < xorg-x11-server-common Squeezing mktemp ... mktemp < glibc-utils Squeezing net-tools ... net-tools < rpm-build Squeezing chkfontpath ... chkfontpath < xorg-x11-misc-fonts Squeezing pam-config ... pam-config < pam0-config Squeezing patch ... patch < rpm-build Squeezing msulogin ... msulogin < /sbin/sulogin < SysVinit Squeezing rpm-build-python ... rpm-build-python < rpm-build Squeezing automake-common ... automake-common < gettext-tools Squeezing autoconf-common ... autoconf-common < rpm-build Squeezing gzip ... gzip < /bin/zcat < info-install Squeezing rpm-build-tcl ... rpm-build-tcl < rpm-build Squeezing which ... which < xinitrc Squeezing chkconfig ... chkconfig < kernel-headers-common Squeezing xvfb-run ... Squeezing xorg-x11-misc-fonts ... xorg-x11-misc-fonts < xorg-x11-server-common Squeezing libtcb ... libtcb < libtcb.so.0 < shadow-convert Squeezing libexpat ... libexpat < libexpat.so.0 < fontconfig Squeezing pam0-config ... pam0-config < pam0(system-auth-use_first_pass) < shadow-utils Squeezing zlib ... zlib < libz.so.1 < freetype2 Squeezing gettext ... gettext < gettext-tools Squeezing ed ... ed < alternatives Squeezing info-install ... info-install < /usr/sbin/uninstall_info < automake-common Squeezing psmisc ... psmisc < service Squeezing glibc-gconv-modules ... glibc-gconv-modules < glibc Squeezing xorg-x11-locales ... xorg-x11-locales < xorg-x11-libs Squeezing cpio ... cpio < rpm-build Squeezing pam0_passwdqc ... pam0_passwdqc < pam_passwdqc.so < pam0-config Squeezing shadow-convert ... shadow-convert < tcb-utils Squeezing glibc-timezones ... glibc-timezones < glibc Squeezing bzlib ... bzlib < bzip2 Squeezing libpopt ... libpopt < chkconfig Squeezing freetype2 ... freetype2 < libfreetype.so.6 < xorg-x11-font-utils Squeezing control ... control < util-linux Squeezing pam0_userpass ... pam0_userpass < libpam_userpass.so.1 < shadow-utils Squeezing file ... file < rpm-build Squeezing sh ... sh < /bin/sh < app-defaults Squeezing libbfd ... libbfd < binutils Squeezing xorg-x11-server-common ... xorg-x11-server-common < xorg-x11-Xvfb Squeezing glibc ... glibc < glibc-devel Squeezing libreadline ... libreadline < libhistory.so.4.3 < bash Squeezing libgpm ... libgpm < libgpm.so.1 < libncurses Squeezing tcb-utils ... tcb-utils < shadow-utils Squeezing sed ... sed < control Squeezing libdb4.3 ... libdb4.3 < libdb-4.3.so < pam Squeezing bzip2 ... bzip2 < /bin/bzcat < info-install Squeezing termutils ... termutils < service Squeezing make ... make < rpm-build Squeezing libutempter ... libutempter < xterm Squeezing m4 ... m4 < bison Squeezing librpmbuild ... librpmbuild < rpm Squeezing alternatives ... alternatives < xterm Squeezing nss_tcb ... nss_tcb < pam0_tcb Squeezing tar ... tar < gettext-tools Squeezing kernel-headers-common ... kernel-headers-common < glibc-devel Squeezing libtinfo ... libtinfo < libtinfo.so.5 < psmisc Squeezing libintl3 ... libintl3 < gettext Squeezing libmagic ... libmagic < file Squeezing iconv ... iconv < glibc Squeezing grep ... grep < control Squeezing fakeroot ... fakeroot < xvfb-run Squeezing glibc-locales ... glibc-locales < glibc Squeezing xorg-x11-xauth ... xorg-x11-xauth < xvfb-run Squeezing rpm-build-perl ... rpm-build-perl < rpm-build Squeezing findutils ... findutils < control Squeezing SysVinit ... SysVinit < psmisc Squeezing procps ... procps < rpm-build Squeezing diffutils ... diffutils < texinfo Squeezing libbeecrypt ... libbeecrypt < librpm Squeezing freetype ... freetype < xorg-x11-libs Squeezing bison ... bison < rpm-build Squeezing bash ... bash < xinitrc Squeezing libpam0 ... libpam0 < pam_deny.so < pam0-config Squeezing libncurses ... libncurses < libncurses.so.5 < procps Squeezing xorg-x11-font-utils ... xorg-x11-font-utils < xorg-x11-misc-fonts Squeezing fontconfig ... fontconfig < libfontconfig.so.1 < xorg-x11-libs Squeezing glibc-utils ... glibc-utils < glibc Squeezing service ... service < kernel-headers-common Squeezing pam ... pam < pam_limits.so < pam0-config Squeezing gawk ... gawk < alternatives Squeezing glibc-devel ... glibc-devel < rpm-build Squeezing xorg-x11-Xvfb ... xorg-x11-Xvfb < xvfb-run Squeezing texinfo ... texinfo < rpm-build Squeezing rpm ... rpm < rpm-build-python Squeezing util-linux ... util-linux < xorg-x11-server-common Squeezing binutils ... binutils < gettext-tools Squeezing glibc-nss ... glibc-nss < glibc Squeezing shadow-utils ... shadow-utils < libutempter Squeezing coreutils ... coreutils < rpm-build-python Squeezing pam0_tcb ... pam0_tcb < pam_tcb.so < pam0-config Squeezing perl-base ... perl-base < rpm-build-perl Squeezing librpm ... librpm < librpmbuild Squeezing xorg-x11-libs ... xorg-x11-libs < xorg-x11-xauth Squeezing xterm ... xterm < xinitrc Squeezing xinitrc ... xinitrc < xorg-x11-server-common Squeezing gettext-tools ... gettext-tools < rpm-build Squeezing xorg-x11-utils ... xorg-x11-utils < xorg-x11-server-common Squeezing rpm-build ... { xvfb-run, rpm-build } $