С последней сборкой make-3.81beta2-alt7 перстал собираться gcl. Вот makefile (это не основной makefile, он предназначен для сборки доп. модулей), вызывающий проблемы: ========================================================================== -include ../makedefs COMPILE_FILE=./saved_clcs_gcl ./ -system-p -c-file -data-file \ -o-file nil -h-file -compile FILES:=$(shell ls -1 clcs_*.lisp | sed 's,\.lisp,,1') all: $(addsuffix .c,$(FILES)) $(addsuffix .o,$(FILES)) saved_clcs_gcl: ../unixport/saved_pcl_gcl echo '(load "package.lisp")(load "myload.lisp")(si::save-system "$@")' | $< $(<D)/ %.h %.data %.c : %.lisp saved_clcs_gcl cp ../h/cmpinclude.h . $(COMPILE_FILE) $< %.o: %.c %.h %.data $(CC) $(CFLAGS) -c $< -o $@ ../xbin/append $*.data $@ %.fn: ../cmpnew/gcl_collectfn.o %.lisp ./saved_clcs_gcl echo '(load "$<")(compiler::emit-fn t)(compile-file "$*.lisp")' |./saved_clcs_gcl sys-proclaim.lisp: $(addsuffix .fn,$(FILES)) echo '(in-package "CONDITIONS")' \ '(load "../cmpnew/gcl_collectfn")'\ '(compiler::make-all-proclaims "*.fn")' | ../xbin/gcl compile: ${LISP} echo '(load "package.lisp")(load "loading.lisp")(jamie-load-clcs :compile)' | ${LISP} saved_full_gcl: ${LISP} echo '(load "package.lisp")(load "loading.lisp")(jamie-load-clcs :compiled)(system::save-system "saved_full_gcl")' | ${LISP} clean: rm -f *.o *.fn saved_full_gcl$(EXE) saved_full_gcl cmpinclude.h *.c *.h *.data saved_clcs_gcl #.INTERMEDIATE: saved_clcs_gcl ======================================================================================= Вот diff лога сборки с make alt2 vs alt7 ======================================================================================= -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c clcs_condition_definitions.c -o clcs_condition_definitions.o -../xbin/append clcs_condition_definitions.data clcs_condition_definitions.o -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/tes t1/gcl/o -c clcs_conditions.c -o clcs_conditions.o -../xbin/append clcs_conditions.data clcs_conditions.o -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c clcs_debugger.c -o clcs_debugger.o -../xbin/append clcs_debugger.data clcs_debugger.o -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c clcs_handler.c -o clcs_handler.o -../xbin/append clcs_handler.data clcs_handler.o -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c clcs_install.c -o clcs_install.o -../xbin/append clcs_install.data clcs_install.o -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c clcs_kcl_cond.c -o clcs_kcl_cond.o -../xbin/append clcs_kcl_cond.data clcs_kcl_cond.o -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c clcs_macros.c -o clcs_macros.o -../xbin/append clcs_macros.data clcs_macros.o -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c clcs_precom.c -o clcs_precom.o -../xbin/append clcs_precom.data clcs_precom.o -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c clcs_restart.c -o clcs_restart.o -../xbin/append clcs_restart.data clcs_restart.o -gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c clcs_top_patches.c -o clcs_top_patches.o -../xbin/append clcs_top_patches.data clcs_top_patches.o -rm clcs_conditions.c clcs_install.c clcs_restart.h clcs_conditions.h clcs_top_patches.c clcs_precom.data clcs_debugger.c clcs_restart.data clcs_macros.c clcs_precom.h clcs_conditions.data clcs_top_patches.h clcs_kcl_cond.c clcs_debugger.h clcs_macros.h clcs_top_patches.data clcs_handler.c clcs_kcl_cond.h clcs_debugger.data clcs_macros.data clcs_condition_definitions.c clcs_kcl_cond.data clcs_handler.h clcs_condition_definitions.h clcs_install.data clcs_handler.data clcs_install.h clcs_condition_definitions.data clcs_precom.c clcs_restart.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_condition_definitions.o clcs_condition_definitions.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_conditions.o clcs_conditions.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_debugger.o clcs_debugger.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_handler.o clcs_handler.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_install.o clcs_install.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_kcl_cond.o clcs_kcl_cond.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_macros.o clcs_macros.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_precom.o clcs_precom.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_restart.o clcs_restart.c +gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl/o -c -o clcs_top_patches.o clcs_top_patches.c ========================================================================================= Похоже, что с alt7 правило %.o: %.c %.h %.data $(CC) $(CFLAGS) -c $< -o $@ ../xbin/append $*.data $@ просто игнорируется. Ниже преведен вывовд make -d для сборки одного модуля при работе alt2 и alt7 соответственно. ========================================================================================= Removing child 0x080bbfd8 PID 3839 from chain. Целевой файл `clcs_kcl_cond.o' успешно пересоздан. Обработка целевого файла `clcs_macros.o'. Файл `clcs_macros.o' не существует. Поиск неявного правила для `clcs_macros.o'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.c'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.c'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.cc'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.C'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.cpp'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.p'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.f'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.F'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.r'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.s'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.S'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.mod'. Попытка применения правила с образцом, основа `clcs_macros.o'. Попытка применения неявной зависимости `clcs_macros.o,v'. Попытка применения правила с образцом, основа `clcs_macros.o'. Попытка применения неявной зависимости `RCS/clcs_macros.o,v'. Попытка применения правила с образцом, основа `clcs_macros.o'. Попытка применения неявной зависимости `RCS/clcs_macros.o'. Попытка применения правила с образцом, основа `clcs_macros.o'. Попытка применения неявной зависимости `s.clcs_macros.o'. Попытка применения правила с образцом, основа `clcs_macros.o'. Попытка применения неявной зависимости `SCCS/s.clcs_macros.o'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.c'. Поиск правила с промежуточным файлом `clcs_macros.c'. Избежание рекурсивного вызова неявного правила. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.lisp'. Попытка применения правила зависимости `saved_clcs_gcl'. Попытка применения неявной зависимости `clcs_macros.h'. Поиск правила с промежуточным файлом `clcs_macros.h'. Избежание рекурсивного вызова неявного правила. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.lisp'. Попытка применения правила зависимости `saved_clcs_gcl'. Попытка применения неявной зависимости `clcs_macros.data'. Поиск правила с промежуточным файлом `clcs_macros.data'. Избежание рекурсивного вызова неявного правила. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.lisp'. Попытка применения правила зависимости `saved_clcs_gcl'. Найдено неявное правило для `clcs_macros.o'. Обрезается файл `clcs_macros.c'. Обработка целевого файла `clcs_macros.h'. Файл `clcs_macros.h' уже был обработан. Обработка целевого файла `clcs_macros.data'. Файл `clcs_macros.data' уже был обработан. Обновление целей, от которых зависит целевой файл `clcs_macros.o', завершено. Необходимо пересобрать цель `clcs_macros.o'. gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl-a2/o -c clcs_macros.c -o clcs_macros.o Помещение потомка 0x080bf6e0 (clcs_macros.o) PID 3841 в цепочку активных потомков. Незавершенный потомок 0x080bf6e0 (clcs_macros.o) PID 3841 Подбираю удачно завершившегося потомка 0x080bf6e0 PID 3841 ../xbin/append clcs_macros.data clcs_macros.o Незавершенный потомок 0x080bf6e0 (clcs_macros.o) PID 3845 Подбираю удачно завершившегося потомка 0x080bf6e0 PID 3845 =========================================================================================== =========================================================================================== Removing child 0x080b5380 PID 21847 from chain. Целевой файл `clcs_kcl_cond.o' успешно пересоздан. Обработка целевого файла `clcs_macros.o'. Файл `clcs_macros.o' не существует. Поиск неявного правила для `clcs_macros.o'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.c'. Попытка применения неявной зависимости `clcs_macros.h'. Попытка применения правила с образцом, основа `clcs_macros'. Попытка применения неявной зависимости `clcs_macros.c'. Найдено неявное правило для `clcs_macros.o'. Обрезается файл `clcs_macros.c'. Обновление целей, от которых зависит целевой файл `clcs_macros.o', завершено. Необходимо пересобрать цель `clcs_macros.o'. gcc -Wall -DVOL=volatile -fsigned-char -pipe -O3 -fomit-frame-pointer -I/home/vadim/test1/gcl-a7/o -c -o clcs_macros.o clcs_macros.c Помещение потомка 0x080b5380 (clcs_macros.o) PID 21851 в цепочку активных потомков. Незавершенный потомок 0x080b5380 (clcs_macros.o) PID 21851 Подбираю удачно завершившегося потомка 0x080b5380 PID 21851 ============================================================================================
У меня не воспроизводится на gcl-2.6.6-alt2 с тестируемым сейчас make-3.81beta3-alt1.
А можно получить этот make-3.81beta3-alt на приватное тестирование? Скажем на /pub/people/ldv... Просто я не описал, чтобы не затуманивать и так длинный баг репорт, симптомы "неперисобираемости". На самом деле формально сборка gcl успешно завершается, вот только результат кривой. Но и эту кривость тоже сразу не видно. Впрочем, если в логах make видно, что для всех clcs_foo.o отработало правило %.o: %.c %.h %.data $(CC) $(CFLAGS) -c $< -o $@ ../xbin/append $*.data $@ то всё должно быть хорошо.
Мне удалось упростить тест до минимума, необходимого для того, чтобы отрепортить проблему разработчикам.
С другой стороны, новый make правильнее работает, если заменить all: $(addsuffix .c,$(FILES)) $(addsuffix .o,$(FILES)) на all: $(addsuffix .o,$(FILES)) Тем более что эти .c-файлы всё равно временные.
Подтверждаю. С таким изменением сборка проходит успешно. И, возможно, такой makefile действительно более правильный. Но всё же я не вижу причины по которой правило для .o не срабатывает с оригинальным варинтом makefile.
По ошибке оно не срабатывает, очевидно.
Разработчики пишут, что это неприятный баг: http://savannah.gnu.org/bugs/?func=detailitem&item_id=13022
Upstream утверждает, что в make-3.81 это исправлено. Просьба проверить make-3.81-alt1
Проверил на сборке gcl. Работает нормально. Баг можно закрывать.