LINUX.ORG.RU
ФорумTalks

Большой июльский ребус от saahriktu

 


1

1

Собственно, сабж:

program prg201907;
{$codepage UTF8}
uses cwstring, math;
var
	s1: UnicodeString = 'Як-строитель чудит набирая звонком от плейера юрко "WAVE FULL OF 8 RUSTY CHECKED MULTIPLEX IMAGES!", однако.';
	s2: UnicodeString = '';
	indx: Integer;

function getdata1(x: Integer): Integer;
begin
	case (x) of
	$0, $2f: getdata1 := Floor64(1.340425531914894 * x + 1);
	$1, $12, $14, $1c, $23, $25, $33, $38, $3e, $45, $47, $4d: getdata1 := $d;
	$2, $a, $1a, $1e, $20: getdata1 := $1e;
	$3..$4: getdata1 := $1d + x;
	$5, $9, $19: getdata1 := $14;
	$6, $8: getdata1 := Floor64($1d - $5 * x / $2);
	$7, $10: getdata1 := $19;
	$b, $d: getdata1 := $10 + x;
	$c, $f: getdata1 := Floor64(7 * x / $3 - $7);
	$e, $15, $51: getdata1 := $1a;
	$11, $21, $50: getdata1 := $b;
	$13, $1f: getdata1 := $4;
	$16, $17: getdata1 := $94 - $6 * x;
	$18, $1b: getdata1 := $c * x - $11a;
	$1d, $22, $27, $2c: if x < $27 then getdata1 := $9 * x - $103
	                    else getdata1 := $9 * x - $120;
	$24, $46: getdata1 := $8;
	$26, $5a: getdata1 := $4e;
	$28, $35, $59: getdata1 := $5c;
	$29, $31: getdata1 := $42;
	$2a, $30: getdata1 := $3;
	$2b, $4b, $58: getdata1 := $44;
	$2d, $5c: getdata1 := $45;
	$2e, $49, $5b: getdata1 := $47;
	$32, $37, $3d: getdata1 := $64;
	$34, $39: getdata1 := $1c9 - $7 * x;
	$36, $40, $43, $55, $56: getdata1 := $36;
	$3a, $3b: getdata1 := $ab - $2 * x;
	$3c, $4c: getdata1 := $52;
	$3f, $42: getdata1 := Floor64($168 - $d * x / $3);
	$41, $54: getdata1 := $46;
	$44, $48: getdata1 := Floor64($f * x / $2 - $1c2);
	$4a, $4e: getdata1 := Floor64($a17 / $2 - $41 * x / $4);
	$4f, $52: getdata1 := x - $40;
	$53, $57: getdata1 := Floor64($8fd / $4 - $17 * x / $4);
	else getdata1 := -1;
	end;
end;

function getdata2(x: Integer): Integer;
begin
	case (x) of
	$0..$7, $9..$a, $c..$1d, $1f..$20, $22..$33, $35..$5c: getdata2 := $1;
	$8, $34: getdata2 := $4;
	$b, $1e, $21: getdata2 := $2;
	else getdata2 := -1;
	end;
end;

begin
	for indx := $0 to $2c do s2 := s2 + copy(s1, getdata1(indx), getdata2(indx));
	s2 := s2 + chr($a);
	for indx := $2d to $53 do s2 := s2 + copy(s1, getdata1(indx), getdata2(indx));
	s2 := s2 + chr($a) + chr($a);
	for indx := $54 to $5c do s2 := s2 + copy(s1, getdata1(indx), getdata2(indx));
	writeln(s2);
end.
Эта программа на Free Pascal'е выводит текст в UTF-8.

Суть ребуса: какой конкретно текст в UTF-8 выводит эта программа?

★★★★★

Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Видимо тебя мама в детстве сильно била головой. В .spec файле мейнтейнер прописал PREFIX:

...
make DESTDIR=${pkg_path} PREFIX=/usr/local install
...

Но твой Makefile не использует ни одну, ни вторую переменную. Каким образом произойдет ожидаемое мейтейнером действие?

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

сисадмин компилирует и устанавливает

Зачем? Чтобы тестировать?

Для этого вообще не надо ничего устанавливать.

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

Нет, маинтейнер делает не так. Маинтейнер делает так:

Name:           brutal-squirrel
Version:        0.5
Release:        %mkrel 1
Summary:        This is converter to hex digits (plain text) and back.
License:        GPLv3
Source0:        brtlsqrrl-%{version}.tar.lzma

%define debug_package %{nil}

%description
This is converter to hex digits (plain text) and back.

%prep

%setup -q -n brtlsqrrl-%{version}

%build
%make_build

%install
%__mkdir_p %{buildroot}/%{_bindir}
install -m755 brtlsqrrl %{buildroot}/%{_bindir}

%files
%{_bindir}/brtlsqrrl

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

Нет, мейнтейнер говорит «господи, что это за школоподелка и зачем она нужна» и не включает твой софт в дистрибутив.

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

Нет, мейнтейнер говорит «господи, что это за школоподелка и зачем она нужна»

Нет, мейнтейнер при виде Makefile'а, в котором цель install вроде бы и есть, но такая, что лучше бы и не было, выражается гораздо крепче.

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

Почему

%build
%make_build
вместо казбеческого
%build
%__make %_smp_mflags
, но
%install
%__mkdir_p %{buildroot}/%{_bindir}
install -m755 brtlsqrrl %{buildroot}/%{_bindir}
вместо человеческого
%install
%make_install
? Не потому ли, что Makefile написан гребаным казбеком, не захотевшим сделать по-людски?

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

А зачем вообще надеяться на дефолтные пути? У разных разработчиков могут быть разные представления о том, какие они должны быть. А так сразу берёшь и прописываешь нужный.

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

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

Не могут: если разработчик не прочел man 7 hier, то пусть прочтет и не порет отсебятину. Если прочел, но порет отсебятину на ровном месте, то он не разработчик, а гребаный казбек, которому следовало бы сдохнуть в муках сменить род деятельности.

А зачем вообще надеяться на дефолтные пути?

Встречный вопрос: зачем делать по-казбечески то, что можно и должно делать по-людски?

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

Не могут

Могут. Потому как «make install» это не опакечивание, а просто локальная установка. А локальной установке может много что соответствовать. От /usr/local/bin до /opt/myprog. А кто-то может считать, что и в этом случае «make install» должен устанавливать в /usr/bin.

по-людски

У разных людей разные представления о том, что это такое.

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

Могут.

Нет, не могут.

локальной установке может много что соответствовать

Почему тогда у тебя в Makefile жестко прописан один-единственный вариант, да еще и нестандартный?

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

А зачем вообще надеяться на дефолтные пути? У разных разработчиков могут быть разные представления о том, какие они должны быть. А так сразу берёшь и прописываешь нужный.

Кхе-кхе *PREFIX*, кхе-кхе *DESTDIR*. Блин, ты же вроде так аутично топишь за юниксвей, хотя сам его нихрена не осилил.

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

$DESTDIR задаёт новый корень, а не директорию для установки бинарника. $PREFIX ближе, но его всё равно нужно прописывать:

rpm -E "%make_install"
/usr/bin/make install DESTDIR=/home/saahriktu/rpmbuild/BUILDROOT/%{NAME}-%{VERSION}-%{RELEASE}.x86_64 INSTALL="/usr/bin/install -p"
Определённо, предполагается, что $PREFIX нужно задавать на этапе ./configure. А если нет ./configure? Тогда остаётся при отсутствии ./configure не пользоваться «make install» для опакечивания вообще.

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

$DESTDIR задаёт новый корень, а не директорию для установки бинарника

Ты настолько некомпетентен, что не знаешь, что эта переменная последние лет 20 используется для указания временного рута установки?

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

Я так и написал. Но вопрос же не в новом корне, а именно в директории для установки бинарника. Полный путь и при использовании $DESTDIR всё равно будет $DESTDIR/$PREFIX/bin. Так что, значение $DESTDIR в этом вопросе ни разу не актуально.

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

Потому, что тут каждый разработчик выбирает свой вариант.

Вот я и спрашиваю, чем ты руководствовался, когда выбрал тот вариант, который ты выбрал? Какими соображениями высшего порядка? И зачем жестко прописывать этот вариант, каким бы он ни был? Почему не завести переменную?

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

Я так и написал. Но вопрос же не в новом корне, а именно в директории для установки бинарника. Полный путь и при использовании $DESTDIR всё равно будет $DESTDIR/$PREFIX/bin. Так что, значение $DESTDIR в этом вопросе ни разу не актуально.

Слова школьника, не мужа.

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

/usr/bin - вполне стандартный вариант. В бинарных дистрибутивах обычно опакечивают именно так.

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

/usr/bin - вполне стандартный вариант. В бинарных дистрибутивах обычно опакечивают именно так.

А в openbsd в /usr/local/bin. Но туда твой софт не возьмут.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Прочти наконец hier(7)!

/usr/bin - вполне стандартный вариант. В бинарных дистрибутивах обычно опакечивают именно так.

То-то и оно, что опакечивают. У меня создалось было впечатление, что ты понимаешь разницу между опакечиванием и `make install`, но ты успешно его развеял.

dexpl ★★★★★
()
Ответ на: Прочти наконец hier(7)! от dexpl

Так в бинарных дистрибутивах «make install» именно для локальной установки обычно и не используют как и саму локальную установку не через пакеты. При создании же пакета можно просто взять готовый бинарник и положить его куда нужно без «make install'ов». А для source-based систем наподобие LFS'а это самый тот вариант для дефолта «make install'а».

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

При создании же пакета можно просто взять готовый бинарник и положить его куда нужно без «make install'ов». А для source-based систем наподобие LFS'а это самый тот вариант для дефолта «make install'а».

Только ты забываешь, что нормальный софт (не твой), устанавливает конфиги, манпейджи, хелперы, ресурсы и всякие тами хидеры. Поэтому все делают make install как миленькие. Один ты глупый никак не можешь этого понять.

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

Софт бывает разной жирности.

Кто-то привык мыслить исключительно в рамках модульных проектов.

Разные PREFIX'ы важны сложным проектам, где на этапе компиляции хардкодятся пути к разным $PREFIX/lib и $PREFIX/share. А в относительно простых проектах всё это ни разу не актуально.

Там, где только один бинарник, остаётся указать его месторасположение именно для пакета.

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

А для source-based систем наподобие LFS'а это самый тот вариант для дефолта «make install'а».

Не знаю, как делается в source based, и сомневаюсь, что там разводят бардак, но ладно, поверю тебе на слово. А теперь убеди меня в том, что разработчик, написавший в Makefile правило для цели install, не применимое в общем случае — это разработчик, а не гребаная казбечина, которую следовало бы изгнать из разработки прямо в гроб. Особенно с учетом того, что применимость в общем случае обеспечивается одной несчастной строкой, и наш т. н. «разработчик» об этом прекрасно осведомлен.

// Представь себе ситуацию: я захотел опакетить твою утилиту, увидел то, что увидел вместо Makefile'а, прислал тебе патч, от которого мне стало бы лучше, а тебе — как минимум не хуже, а ты начал мне рассказывать, что я могу «просто взять готовый бинарник», причем даже не объясняя, чем вызвано твое неприятие патча. Взять готовый бинарник я, конечно, могу, но вертел я колесом взаимодействовать с таким упоротым апстримом (а взаимодействие с апстримом — неотъемлемая часть сопровоодения пакета).

dexpl ★★★★★
()
Последнее исправление: dexpl (всего исправлений: 1)
Ответ на: комментарий от dexpl

Знаешь, даже у dmenu нормальный Makefile. Хотя там тоже только один или два бинарника.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от saahriktu

При создании же пакета можно просто взять готовый бинарник и положить его куда нужно без «make install'ов»

Это правда, всегда можно в спеке вместо %make_install сделать

%__mkdir_p %{buildroot}/%{_bindir}
install -m755 hernya %{buildroot}/%{_bindir}
Точно также можно заменить %make на gcc -o hernya -llib1 hernya.c

Только остаются два вопроса — а нахрена ты вообще делал makefile и за что ты так ненавидишь потенциальных пользователей своих программ? Впрочем, можешь не отвечать, в одном из твоих мейкфалqов в секции install было cp hren /usr/bin/, это однозначно говорит о том, что ты и сам прекрасно понимаешь, что никто этим пользоваться не будет, да и сам этим совершенно не пользуешься.

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

а нахрена ты вообще делал makefile

У разных секций разное назначение. Сборочная секция универсальна, и обычный «make» всегда соберёт мой софт. А вот секция install в этих мэйкфайлах для юзеров разных LFS'ов.

да и сам этим совершенно не пользуешься

«make install'ом» в LFS'е я мог бы пользоваться, но я там предпочитал выполнять «cp myprog /usr/bin» руками.

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

«make install'ом» в LFS'е я мог бы пользоваться

Нет, не мог бы. Тебя бы задрал вопрос о перезаписи файла.

но я там предпочитал выполнять «cp myprog /usr/bin» руками

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

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

вопрос о перезаписи файла

А тут нет вопросов. Пусть перезаписываются. Я так всю систему обновлял больше десяти лет. Перезапишешь старые файлы новыми, а потом прочёсываешь ФС в поисках старых файлов, которые больше неактуальны и потому не перезаписались.

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

Перезапишешь старые файлы новыми, а потом прочёсываешь ФС в поисках старых файлов, которые больше неактуальны и потому не перезаписались.

Шел 2019 год...

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

А вот секция install в этих мэйкфайлах для юзеров разных LFS'ов

Нет.
Это контракт между разработчиком софта, который знает, какие файлы нужно устанавливать, и пользователем исходников, который ожидает предсказуемого поведения в соответствии с контрактом и общепринятыми обычаями.
А уж кто этот пользователь — ставящий из исходников сразу в систему, обслуживающий свою LFS, сопровождающий пакета в дистрибутиве — это уже не суть важно.
Суть в разделении обязанностей и ответственности между разработчиком исходного кода и его пользователем.

bormant ★★★★★
()
10 октября 2019 г.
askinfra@INFRA:~/dev/0001$ ./prg201907
Я окончательно завязал с ядерной консолью и KOI8-R.
UTF-8, MAGEIA, FVWM, PASCAL и XTERM рулят!

SAAHRIKTU
Infra_HDC ★★★★★
()

Прочитал тред. Понял, что ТС не в зуб ногой, зачем нужен make install.

И вот это пользователи линукса. Пойду забухаю.

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

Чтобы копировать файлы в систему. Но ситуации бывают разные.

Однако, эта часть темы устарела уже очень давно. Это обсуждение подтолкнуло меня к написанию Thundermaker'а: Вышли Turbo Creator 0.4, Blazing Creator 0.4 и Thundermaker 0.9 .

Та тема тоже уже устарела в том моменте, что она в т.ч. описывает выход Blazing Creator'а 0.4, но уже вышел Blazing Creator 0.6: http://saahriktu.org/bludit/blazing-creator-0-6 .

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu
ifeq ($(prefix),)
        prefix=/usr/local
endif

[...]

install:
        if [ ! -d "$(DESTDIR)$(prefix)/bin" ]; then mkdir -p $(DESTDIR)$(prefix)/bin; fi
        install -m755 blazingcreator $(DESTDIR)$(prefix)/bin

Лады, не буду бухать.

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