Opened 12 years ago

Closed 12 years ago

Last modified 12 years ago

#1384 closed bug (invalid)

jam is not respect fully Jamfile changes.

Reported by: kaoutsis Owned by: bonefish
Priority: normal Milestone: R1
Component: Build System Version: R1/pre-alpha1
Keywords: Cc:
Blocked By: Blocking:
Has a Patch: no Platform: All

Description

As an example i will use the src/system/libroot/posix/locale/Jamfile, the original form is:

SubDir HAIKU_TOP src system libroot posix locale ;

MergeObject posix_locale.o :
	#ctype.c
	localeconv.c
	setlocale.c
;

Now comment the localeconv.c so the Jamfile will became:

SubDir HAIKU_TOP src system libroot posix locale ;

MergeObject posix_locale.o :
	#ctype.c
	#localeconv.c
	setlocale.c
;

Run jam -q to the src/system/libroot/posix/locale You expect to get a new posix_locale.o without the localeconv.c What you get is :

$ jam -q
...found 31 target(s)...
$  

the target is not rebuild, you have to remove it manually to build it with the new change.

Change History (2)

comment:1 by bonefish, 12 years ago

Resolution: invalid
Status: newclosed

Your analysis is correct, but that's just how jam works. We could probably make targets depend on all build system files involved, but then we'd probably end up having to rebuild virtually the whole tree every time we touch a build system file.

IMHO the status quo is only a minor inconvenience. Usually, when you remove a source file for a target, you also edit other files, so that your target is rebuild anyway. And for the even rarer cases when you don't, you just have to keep in mind to touch another dependency or remove the target.

in reply to:  1 comment:2 by kaoutsis, 12 years ago

Replying to bonefish:

Your analysis is correct, but that's just how jam works. We could probably make targets depend on all build system files involved, but then we'd probably end up having to rebuild virtually the whole tree every time we touch a build system file.

IMHO the status quo is only a minor inconvenience. Usually, when you remove a source file for a target, you also edit other files, so that your target is rebuild anyway. And for the even rarer cases when you don't, you just have to keep in mind to touch another dependency or remove the target.

Ok, thanks for the feedback. I will try to remember this issue.

Note: See TracTickets for help on using tickets.