История про то, как академики изобрели USE-флаги.
Я только что увидел самое больное дерьмо, что когда-либо выдавали кудахтерные инженеры.
Есть пакетный менеджер opam для языка программирования OCaml. Входит во множество так называемых «велосипедных пакетных менеджеров».
Кроме установки пакетов-библиотек он занимается еще и установкой самого компилятора нужной версии.
Вообще в этом главная проблема opam — у его создателей очень хуево с реляционным мышлением, и они очень плохо понимают, что именно они делают. У них просто есть какие-то проблемы, и они хуярят в свою поделку что-то, чтобы они решились. Вот и все проектирование.
Ближе к делу. Если набрать opam switch list, то тебе выдадут все доступные версии комплятора OCaml. Но каждой версии будет две: одна подписана как ocaml-base-compiler, другая как ocaml-variants. В чем разница — понять очень сложно, так как гуглить по запросам "ocaml variants" и "ocaml options" одно удовольствие (выдаст все что угодно, кроме нужного). Покопавшись в исходниках, начинаешь понимать, что вскрывать эту тему не стоило.
Итак, у компилятора OCaml есть свой ./configure, где можно включить всякие опции. Есть разработчик opam’а. Он хочет, чтобы по команде opam switch create можно было устанавливать компилятор с нужным набором опций. Как он это делает?
Он засовывает в репозитарий пакетов (библиотек) пакет ocaml-variants. Туда он срет СОТНИ (на текущий момент 566) версий объявления пакетов. Вот вам для примера: https://github.com/ocaml/opam-repository/blob/master/packages/ocaml-variants/ocaml-variants.4.14.1%2Boptions/opam
Обратите внимание на секцию build.
Теперь, чтобы пользователь мог поставить OCaml, допустим, с опциями bytecode-only и musl, он дожен сделать opam switch create 4.14.1 --packages ocaml-option-bytecode-only,ocaml-option-musl
Вообще-то опция --packages нужна была для того, чтобы сразу ставить нужные пользователю пакеты. Но тут при помощи какой-то ебаной магии эти пакеты — которые тоже реально существуют, посмотрите в репе! — считаются установленными, на них триггерятся флаги в opam-файле, и делается нужное ./configure
Занавес, блять.
Справедливости ради хочу отметить, что эта поебень делалась не совсем академиками. Кроме академиков, есть еще и полтора бизнеса, которые пользуются окамлом. Так вот, они выдают код в три раза хуже, чем у академиков. Вот это вот мастерили люди из бизнеса.
Пожалейте меня, пожалуйста. Я серьезно. Я в шоке, у меня руки трясутся, у меня потеряна вера в человечество и я хочу мой 2022 год назад.