Иван Денисов писал(а):
arisu писал(а):
к правке компилятора потихоньку подбираетесь. ;-)
правка компилятора под указания явной целевой архитектуры в названии модуля тем не менее лучше, чем глобальные состояния компилятора, поскольку исключает возможность собрать модуль, который для сборки таким состоянием не предназначен
я, честно говоря, перестал понимать, откуда у компилятора взялись глобальные состояния. но соглашусь с тем, что у меня открытый руками исходник от другой архитектуры можно попытаться скомпилировать. выйдет из этого, правда, ошибка компиляции, потому что архитектурно-зависимые модули неизбежно импортируют другие архитектурно-зависимые модули, которые компилятор не видит. и получается ошибка сразу в IMPORT. а если модуль таки собрался — то это знак, что он не архитектурно-зависимый, и его надо вытащить на уровнень выше. так что ошибка будет в обоих случаях, просто немного разная.
p.s.: единственный, пожалуй, случай, когда такой финт может получиться — это модуль импорта из .so/.dll. если он другие модули не импортирует, то соберётся, хоть оно и бессмысленно. надо бы защиту от этого прикрутить, спасибо за идею.
кстати, мне чтобы такую защиту прикрутить — надо сходить в DevCompiler, и вставить туда одну проверку. а парзер менять не надо. сразу стоило сделать, конечно, но я не подумал. виноват.
p.p.s.: ваш вариант с изменением парзера, правда, позволяет защититься от случая, когда исходники модулей лежат по произвольным путям. только я не очень понимаю, как в вашем случае компилятор будет проверять допустимость той или иной архитектуры. глядя в `Dialogs.platform`? так это ровно то же самое глобальное состояние. и вдобавок не позволяет кросс-компилировать. или я что-то не так понял?