[PATCH] Fix parallel jobs; sources need version.h
--- Makefile | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/Makefile b/Makefile index fcc3940..85108e5 100644 --- a/Makefile +++ b/Makefile @@ -81,6 +81,8 @@ endif version.h: sh $(SRC_PATH)/version.sh $(SRC_PATH) +$(SRCS) $(DVDREAD_SRCS): version.h + # General targets -- 1.5.3.2
On Monday 28 April 2008 23:53:38 Dan Nicholson wrote:
--- Makefile | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile index fcc3940..85108e5 100644 --- a/Makefile +++ b/Makefile @@ -81,6 +81,8 @@ endif version.h: sh $(SRC_PATH)/version.sh $(SRC_PATH)
+$(SRCS) $(DVDREAD_SRCS): version.h +
# General targets
can you explain, please? If I read the dependencies all .c files already depend on version.h
On Wed, Apr 30, 2008 at 12:57 AM, Nico Sabbi <Nicola.Sabbi@poste.it> wrote:
On Monday 28 April 2008 23:53:38 Dan Nicholson wrote:
--- Makefile | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile index fcc3940..85108e5 100644 --- a/Makefile +++ b/Makefile @@ -81,6 +81,8 @@ endif version.h: sh $(SRC_PATH)/version.sh $(SRC_PATH)
+$(SRCS) $(DVDREAD_SRCS): version.h +
# General targets
can you explain, please? If I read the dependencies all .c files already depend on version.h
They don't. The library $(SHLIB) depends on version.h. Since that's the first target, version.h gets built immediately. However, if you have multiple jobs (-j3 or whatever), make will also begin building the .c files without waiting for version.h to be built. This causes a race condition if any .c file including config.h or version.h is built before version.h is created. You can see if the .c files depend on version.h pretty easily. Run `make -d dvdnav.o' and redirect the log somewhere. It will show in detail the prerequisites for the target dvdnav.o. For me, version.h never comes up until after the patch above. If this is a clean checkout (i.e., you've only run configure2), `mkdir obj && make dvdnav.o' will bomb like this: cd obj && gcc -MD -g -O2 -march=i686 -pipe -Wall -funsigned-char -I/home/dan/scm/libdvdnav -I"/home/dan/scm/libdvdnav"/src -I"/home/dan/scm/libdvdnav"/src/vm -DDVDNAV_COMPILE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAVE_CONFIG_H -DHAVE_DLFCN_H -I"/home/dan/scm/libdvdnav"/src/dvdread -c -o dvdnav.o /home/dan/scm/libdvdnav/src/dvdnav.c In file included from /home/dan/scm/libdvdnav/src/dvdnav.c:25: /home/dan/scm/libdvdnav/config.h:2:21: error: version.h: No such file or directory With the patch, it properly generates version.h first, and this works. -- Dan
On Wednesday 30 April 2008 14:55:06 Dan Nicholson wrote:
On Wed, Apr 30, 2008 at 12:57 AM, Nico Sabbi <Nicola.Sabbi@poste.it> wrote:
On Monday 28 April 2008 23:53:38 Dan Nicholson wrote:
--- Makefile | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile index fcc3940..85108e5 100644 --- a/Makefile +++ b/Makefile @@ -81,6 +81,8 @@ endif version.h: sh $(SRC_PATH)/version.sh $(SRC_PATH)
+$(SRCS) $(DVDREAD_SRCS): version.h +
# General targets
can you explain, please? If I read the dependencies all .c files already depend on version.h
They don't. The library $(SHLIB) depends on version.h. Since that's the first target, version.h gets built immediately. However, if you have multiple jobs (-j3 or whatever), make will also begin building the .c files without waiting for version.h to be built. This causes a race condition if any .c file including config.h or version.h is built before version.h is created.
You can see if the .c files depend on version.h pretty easily. Run `make -d dvdnav.o' and redirect the log somewhere. It will show in detail the prerequisites for the target dvdnav.o. For me, version.h never comes up until after the patch above. If this is a clean checkout (i.e., you've only run configure2), `mkdir obj && make dvdnav.o' will bomb like this:
cd obj && gcc -MD -g -O2 -march=i686 -pipe -Wall -funsigned-char -I/home/dan/scm/libdvdnav -I"/home/dan/scm/libdvdnav"/src -I"/home/dan/scm/libdvdnav"/src/vm -DDVDNAV_COMPILE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAVE_CONFIG_H -DHAVE_DLFCN_H -I"/home/dan/scm/libdvdnav"/src/dvdread -c -o dvdnav.o /home/dan/scm/libdvdnav/src/dvdnav.c In file included from /home/dan/scm/libdvdnav/src/dvdnav.c:25: /home/dan/scm/libdvdnav/config.h:2:21: error: version.h: No such file or directory
With the patch, it properly generates version.h first, and this works.
ok and sorry for the delay: I've been busy all week. Today or tomorrow I'll commit your patch(es)
On Wed, Apr 30, 2008 at 9:01 AM, Nico Sabbi <Nicola.Sabbi@poste.it> wrote:
On Wednesday 30 April 2008 14:55:06 Dan Nicholson wrote:
On Wed, Apr 30, 2008 at 12:57 AM, Nico Sabbi <Nicola.Sabbi@poste.it> wrote:
On Monday 28 April 2008 23:53:38 Dan Nicholson wrote:
--- Makefile | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile index fcc3940..85108e5 100644 --- a/Makefile +++ b/Makefile @@ -81,6 +81,8 @@ endif version.h: sh $(SRC_PATH)/version.sh $(SRC_PATH)
+$(SRCS) $(DVDREAD_SRCS): version.h +
# General targets
can you explain, please? If I read the dependencies all .c files already depend on version.h
They don't. The library $(SHLIB) depends on version.h. Since that's the first target, version.h gets built immediately. However, if you have multiple jobs (-j3 or whatever), make will also begin building the .c files without waiting for version.h to be built. This causes a race condition if any .c file including config.h or version.h is built before version.h is created.
You can see if the .c files depend on version.h pretty easily. Run `make -d dvdnav.o' and redirect the log somewhere. It will show in detail the prerequisites for the target dvdnav.o. For me, version.h never comes up until after the patch above. If this is a clean checkout (i.e., you've only run configure2), `mkdir obj && make dvdnav.o' will bomb like this:
cd obj && gcc -MD -g -O2 -march=i686 -pipe -Wall -funsigned-char -I/home/dan/scm/libdvdnav -I"/home/dan/scm/libdvdnav"/src -I"/home/dan/scm/libdvdnav"/src/vm -DDVDNAV_COMPILE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAVE_CONFIG_H -DHAVE_DLFCN_H -I"/home/dan/scm/libdvdnav"/src/dvdread -c -o dvdnav.o /home/dan/scm/libdvdnav/src/dvdnav.c In file included from /home/dan/scm/libdvdnav/src/dvdnav.c:25: /home/dan/scm/libdvdnav/config.h:2:21: error: version.h: No such file or directory
With the patch, it properly generates version.h first, and this works.
ok and sorry for the delay: I've been busy all week. Today or tomorrow I'll commit your patch(es)
No problem. Sorry for not giving many details initially. -- Dan
Il Wednesday 30 April 2008 20:04:59 Dan Nicholson ha scritto:
On Wed, Apr 30, 2008 at 9:01 AM, Nico Sabbi <Nicola.Sabbi@poste.it> wrote:
On Wednesday 30 April 2008 14:55:06 Dan Nicholson wrote:
On Wed, Apr 30, 2008 at 12:57 AM, Nico Sabbi <Nicola.Sabbi@poste.it> wrote:
On Monday 28 April 2008 23:53:38 Dan Nicholson wrote:
--- Makefile | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile index fcc3940..85108e5 100644 --- a/Makefile +++ b/Makefile @@ -81,6 +81,8 @@ endif version.h: sh $(SRC_PATH)/version.sh $(SRC_PATH)
+$(SRCS) $(DVDREAD_SRCS): version.h +
# General targets
can you explain, please? If I read the dependencies all .c files already depend on version.h
They don't. The library $(SHLIB) depends on version.h. Since that's the first target, version.h gets built immediately. However, if you have multiple jobs (-j3 or whatever), make will also begin building the .c files without waiting for version.h to be built. This causes a race condition if any .c file including config.h or version.h is built before version.h is created.
You can see if the .c files depend on version.h pretty easily. Run `make -d dvdnav.o' and redirect the log somewhere. It will show in detail the prerequisites for the target dvdnav.o. For me, version.h never comes up until after the patch above. If this is a clean checkout (i.e., you've only run configure2), `mkdir obj && make dvdnav.o' will bomb like this:
cd obj && gcc -MD -g -O2 -march=i686 -pipe -Wall -funsigned-char -I/home/dan/scm/libdvdnav -I"/home/dan/scm/libdvdnav"/src -I"/home/dan/scm/libdvdnav"/src/vm -DDVDNAV_COMPILE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAVE_CONFIG_H -DHAVE_DLFCN_H -I"/home/dan/scm/libdvdnav"/src/dvdread -c -o dvdnav.o /home/dan/scm/libdvdnav/src/dvdnav.c In file included from /home/dan/scm/libdvdnav/src/dvdnav.c:25: /home/dan/scm/libdvdnav/config.h:2:21: error: version.h: No such file or directory
With the patch, it properly generates version.h first, and this works.
ok and sorry for the delay: I've been busy all week. Today or tomorrow I'll commit your patch(es)
No problem. Sorry for not giving many details initially.
--
applied, thanks
participants (2)
-
Dan Nicholson -
Nico Sabbi