LINUX.ORG.RU

[неосилил][кросскомпиляция] Разобрать скрипт на Perl


0

1

Здравствуйте, уважаемые форумчане. У меня возник вопрос следующего плана: стоит задача собрать специализированный тулчейн на основе GCC под MinGW. Компиляция, запускаемая из установочного скрипта, обрывается на libgcc. Для обхода этой проблемы есть прилагаемый скрипт на Perl. Но справки к нему нет, а Perl'a я не знаю. Если кому не трудно, разберите его пожалуйста, он не сильно большой. Т.е. собстно хотелось бы знать каких параметров он от меня ждет. Заранее спасибо всем.

Сам скрипт.

die "Usage: mingw-gccwa.pl <GCC TARGET DIRECTORY>" if $ARGV[0] eq '';

print "Running initial make...\n";
system "mingw32-make";


unless (-e "Makefile.mgwbk")
{
	print "Fixing Makefile includes...\n";
	rename "gcc/Makefile", "gcc/Makefile.mgwbk";

	open S, "gcc/Makefile.mgwbk";
	open D, ">gcc/Makefile";
	foreach(<S>)
	{
	s/-I\/([a-zA-Z])\//-I$1:\//g;
	print D $_;
	}
	close S;
	close D;
}

print "Running make from GCC subdir...\n";
system "mingw32-make -C gcc";

print "Restarting global make...\n";
system "mingw32-make";

print "Installing xgcc...\n";
system "mingw32-make -C gcc install";

open F, "msp430/libgcc/config.log" || die "Cannot open msp430/libgcc/config.log";
foreach (<F>)
{
	if (/^  \$ (.*)$/)
	{
		$cmdline = $1;
		last;
	}
}
close F;

die "Cannot retrieve libgcc configure invocation command line\n" if $cmdline eq '';
$cmdline =~ s/\\/\//g;

printf "Adding $ARGV[0] to path...\n";
$ENV{PATH} = $ARGV[0] . "/bin:" . $ENV{PATH};

chdir "msp430/libgcc";
print "Running configuration script ...\n";

system $cmdline;

printf "Patching Makefile...\n";
open F, "Makefile";
@MAKEFILE = <F>;
close F;

open D, ">Makefile";
print D "ifeq (\$(MINGW_WORKAROUND),)
all:
install:
else\n";
print D @MAKEFILE;
print D "\nendif";

close D;

printf "Building libgcc...\n";
system "mingw32-make MINGW_WORKAROUND=1";

printf "Installing libgcc...\n";
system "make install MINGW_WORKAROUND=1";

chdir "../..";
system "mingw32-make";
system "mingw32-make install";
LongLiveUbuntu ★★★★★ ()
Ответ на: комментарий от LongLiveUbuntu

>die «Usage: mingw-gccwa.pl <GCC TARGET DIRECTORY>» if $ARGV[0] eq ";

ОЧЕВИДНОЕ И НЕВЕРОЯТНОЕ!!!11

anonymous ()
Ответ на: комментарий от anonymous

Ладно... Вот это скажем, что означает?

 foreach(<S>)
   {
   s/-I\/([a-zA-Z])\//-I$1:\//g;
   print D $_;
   }

LongLiveUbuntu ★★★★★ ()
Ответ на: комментарий от LongLiveUbuntu

-I/X/ --> -IX:/

где X любая латинская буква в верхнем или нижнем регистре

Olegymous ★★ ()
Ответ на: комментарий от LongLiveUbuntu

Бля.. ну какое же гавно этот перл. Извините, не ударжался :) ТС-у: сочуствую, сам не раз занимался «раскопками» чужого перл-скрипта.

dizza ★★★★★ ()
Ответ на: комментарий от dizza

Бугага, данный конкретный экземлперя написан невероятно понятно. Если кто-то регулярки не понимает то дело не в перле.

Если же дело не в регулярках, то кто-то просто ошибся профессией, потому что, чтобы не понять такое

   open S, "gcc/Makefile.mgwbk";
   
   foreach(<S>) {
    ....
   }

или


die "Usage: mingw-gccwa.pl <GCC TARGET DIRECTORY>" if $ARGV[0] eq '';

надо быть либо прогарммистом на VB либо долбо*бом (хинт - операции типа while(<>) {} - в любом введении в перл на первых страниах описаны)

OxiD ★★★ ()
Ответ на: комментарий от OxiD

надо быть либо прогарммистом на VB либо долбо*бом

а это разве не одно и тоже?

wlan ★★ ()
Ответ на: комментарий от OxiD

Спорить бесполезно. Почитай что-нибудь про когнетику вначале. У Джефа Раскина в интерефейсах к примеру. Он там затрагивает тему языков.

ЗЫ. что делает этот код я понимаю, в т.ч. регулярки. З.З.Ы. Перл таки говно.

dizza ★★★★★ ()
Ответ на: комментарий от dizza

Не умеешь писать в нормальном стиле пиши на Java, в перл есть возможность писать в С-подобном сттиле и PerlCritic (я намекаю что $_ итд никто не заставляет юзать).

Раскин и когнетика тут вообще ни при чем. ТО что из глины можно все что угодно вылепить это плюс глины, то что у большинства говно получается, это не ее минус. Так понятней?

OxiD ★★★ ()
Ответ на: комментарий от dizza

Для начала посмотри сколько коммерческих проектов написано на этом самом перл, например CPanel - лидирующая панель управления для хостинга. И подумай почему. Если будет возможность заодно загляни в ее сорцы, сильно удивишься.

OxiD ★★★ ()
Ответ на: комментарий от OxiD

Таки разобрался. В скрипте ошибка в именах директорий, так как по тем путям, что в нем указаны, нужных Makefile нет. Буду править.

LongLiveUbuntu ★★★★★ ()
Ответ на: комментарий от LongLiveUbuntu

>Ладно... Вот это скажем, что означает?

ой насмешил. ты и седом никогда не пользовался?

annulen ★★★★★ ()
Ответ на: комментарий от OxiD

(я намекаю что $_ итд никто не заставляет юзать).

А если я не собираюсь писать в таком стиле, то зачем мне перл? Зачем мне эти возможности? Причем средний уровень программиста на любом языке довольно низкий, поэтому используя перл, я буду вынужден все время натыкаться на шедевры в стиле $_. В топку-топку. А еще перл любят админы. Они вообще писать не умеют. Перловые скрипты от админов - это вообще самое вырвиглазное что существует.

Но в одном я согласен - на любом языке можно писать хорошо, перл не исключение.

dizza ★★★★★ ()
Ответ на: комментарий от dizza

Затем что он быстрее того же питона и руби, в нем нет такого бардака как в пхп, в нем удобная работа с регэкспами, есть много готовых модулей, удобная лямбда, области видимости, сборка мусора.

(Да, у него есть и минусы).

Выход можно найти всегда, навскидку. - запрещать коммиты кода который не проходит тесты Critiс.

В любом случае критиковать этот язык повода нет. Критиковать надо тех кто не умеет/не может понятно писать на нем но все равно пишет.

OxiD ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.