Bug 6777 - проблемы с отработкой правил в make-3.81beta2-alt7
Summary: проблемы с отработкой правил в make-3.81beta2-alt7
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: make (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Alexey Gladkov
QA Contact: qa-sisyphus
URL: https://savannah.gnu.org/bugs/index.p...
Keywords:
Depends on:
Blocks:
 
Reported: 2005-05-04 07:06 MSD by Vadim V. Zhytnikov
Modified: 2007-04-28 19:35 MSD (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vadim V. Zhytnikov 2005-05-04 07:06:14 MSD
С последней сборкой 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 
============================================================================================
Comment 1 Dmitry V. Levin 2005-05-08 04:52:52 MSD
У меня не воспроизводится на gcl-2.6.6-alt2 с тестируемым сейчас
make-3.81beta3-alt1.
Comment 2 Vadim V. Zhytnikov 2005-05-08 09:38:05 MSD
А можно получить этот make-3.81beta3-alt на приватное тестирование?  Скажем на
/pub/people/ldv...  Просто я не описал, чтобы не затуманивать и так длинный баг
репорт, симптомы "неперисобираемости".  На самом деле формально сборка gcl
успешно завершается, вот только результат кривой. Но и эту кривость тоже сразу
не видно.  Впрочем, если в логах make видно, что для всех clcs_foo.o отработало
правило

%.o: %.c %.h %.data
	$(CC) $(CFLAGS) -c $< -o $@
	../xbin/append $*.data $@

то всё должно быть хорошо.
Comment 3 Dmitry V. Levin 2005-05-08 15:13:18 MSD
Мне удалось упростить тест до минимума, необходимого для того, чтобы отрепортить
проблему разработчикам.
Comment 4 Dmitry V. Levin 2005-05-08 17:15:18 MSD
С другой стороны, новый make правильнее работает, если заменить
all: $(addsuffix .c,$(FILES)) $(addsuffix .o,$(FILES))
на
all: $(addsuffix .o,$(FILES))

Тем более что эти .c-файлы всё равно временные.
Comment 5 Vadim V. Zhytnikov 2005-05-08 18:36:51 MSD
Подтверждаю.  С таким изменением сборка проходит успешно.  
И, возможно, такой makefile действительно более правильный.
Но всё же я не вижу причины по которой правило для .o
не срабатывает с оригинальным варинтом makefile.
Comment 6 Dmitry V. Levin 2005-05-08 18:40:43 MSD
По ошибке оно не срабатывает, очевидно.
Comment 7 Dmitry V. Levin 2005-05-09 21:18:26 MSD
Разработчики пишут, что это неприятный баг:
http://savannah.gnu.org/bugs/?func=detailitem&item_id=13022
Comment 8 Dmitry V. Levin 2007-04-13 00:44:31 MSD
Upstream утверждает, что в make-3.81 это исправлено.
Просьба проверить make-3.81-alt1
Comment 9 Vadim V. Zhytnikov 2007-04-28 18:58:34 MSD
Проверил на сборке gcl.  Работает нормально.  Баг можно закрывать.