Skip to contentSkip to conversation

xfs-cmds: fix parallel installs in include/ dirs

PATCH In review Eric Sandeen 3 participants 7 messages Dec 29, 2008 – Dec 30, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 xfs-cmds: fix parallel installs in include/ dirs

This is for http://oss.sgi.com/bugzilla/show_bug.cgi?id=759
"fix parallel issue with include/ symlinks"

Doing something like "make -j2 install install-dev" would lead to a race of removing & creating symlinks in include/

Thanks to Mike for reporting & suggesting the fix.

---

acl/include/Makefile +5 -4
Index: xfs-cmds/acl/include/Makefile
===================================================================
@@ -9,10 +9,10 @@ HFILES = acl.h libacl.h acl_ea.h misc.h 
 LSRCFILES = builddefs.in buildmacros buildrules config.h.in
 LDIRT = sys acl
 
-default:
-	rm -f sys acl
-	$(LN_S) . sys
-	$(LN_S) . acl
+sys acl:
+	$(LN_S) . $@
+
+default: sys acl
 
 include $(BUILDRULES)
 
@@ -22,4 +22,5 @@ install-dev: default
 	$(INSTALL) -m 644 acl.h $(PKG_INC_DIR)/sys/acl.h
 	$(INSTALL) -m 755 -d $(PKG_INC_DIR)/acl
 	$(INSTALL) -m 644 libacl.h $(PKG_INC_DIR)/acl/libacl.h
+
 install install-lib:
attr/include/Makefile +5 -3
Index: xfs-cmds/attr/include/Makefile
===================================================================
@@ -11,13 +11,15 @@ HFILES = $(INST_HFILES) misc.h walk_tree
 LSRCFILES = builddefs.in buildmacros buildrules config.h.in
 LDIRT = $(INCDIR)
 
-default:
-	rm -f $(INCDIR)
-	$(LN_S) . $(INCDIR)
+$(INCDIR):
+	$(LN_S) . $@
+
+default: $(INCDIR)
 
 include $(BUILDRULES)
 
 install-dev: default
 	$(INSTALL) -m 755 -d $(PKG_INC_DIR)
 	$(INSTALL) -m 644 $(INST_HFILES) $(PKG_INC_DIR)
+
 install install-lib:
dmapi/include/Makefile +4 -3
Index: xfs-cmds/dmapi/include/Makefile
===================================================================
@@ -9,9 +9,10 @@ HFILES = dmapi.h
 LSRCFILES = builddefs.in buildmacros buildrules dmapi_kern.h
 LDIRT = xfs
 
-default install :
-	rm -f xfs
-	$(LN_S) . xfs
+xfs:
+	$(LN_S) . $@
+
+default install: xfs
 
 include $(BUILDRULES)
 
nfs4acl/include/Makefile +5 -3
Index: xfs-cmds/nfs4acl/include/Makefile
===================================================================
@@ -9,9 +9,10 @@ HFILES = nfs4acl.h nfs4acl-internal.h nf
 LSRCFILES = builddefs.in buildmacros buildrules config.h.in
 LDIRT = sys
 
-default:
-	rm -f sys
-	$(LN_S) . sys
+sys:
+	$(LN_S) . $@
+
+default: sys
 
 include $(BUILDRULES)
 
@@ -19,4 +20,5 @@ install-dev: default
 	$(INSTALL) -m 755 -d $(PKG_INC_DIR)
 	$(INSTALL) -m 755 -d $(PKG_INC_DIR)/sys
 	$(INSTALL) -m 644 nfs4acl.h $(PKG_INC_DIR)/sys/nfs4acl.h
+
 install install-lib:
xfsprogs/include/Makefile +4 -4
Index: xfs-cmds/xfsprogs/include/Makefile
===================================================================
@@ -40,10 +40,10 @@ LSRCFILES += platform_defs.h.in builddef
 LSRCFILES += command.h input.h path.h project.h
 LDIRT = xfs disk
 
-default install :
-	rm -f xfs disk
-	$(LN_S) . xfs
-	$(LN_S) . disk
+xfs disk:
+	$(LN_S) . $@
+
+default install: xfs disk
 
 include $(BUILDRULES)
 

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#1 lore raw
Quoted 7 lines · Eric Sandeen

This is for http://oss.sgi.com/bugzilla/show_bug.cgi?id=759
"fix parallel issue with include/ symlinks"

Doing something like "make -j2 install install-dev" would lead to a race of removing & creating symlinks in include/

Thanks to Mike for reporting & suggesting the fix.

Looks good and I've put in in my queue. Any chance I could motivate you to look over Mike's other build system changes in bugzilla?

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#2 lore raw
Quoted 10 lines · Christoph Hellwig
Quoted 7 lines · Eric Sandeen

This is for http://oss.sgi.com/bugzilla/show_bug.cgi?id=759
"fix parallel issue with include/ symlinks"

Doing something like "make -j2 install install-dev" would lead to a race of removing & creating symlinks in include/

Thanks to Mike for reporting & suggesting the fix.

Looks good and I've put in in my queue.

Actually spoken too soon. This breaks the acl build for me with:

gcc -g -O2 -DNDEBUG -funsigned-char -fno-strict-aliasing -Wall -DVERSION=\"2.2.47\" -DLOCALEDIR=\"/usr/share/locale\" -DPACKAGE=\"acl\" -I../include -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -include perm_copy.h -c acl_get_fd.c -fPIC -DPIC -o .libs/acl_get_fd.o acl_get_fd.c:27:24: error: acl/libacl.h: No such file or directory acl_get_fd.c: In function 'acl_get_fd':
acl_get_fd.c:62: warning: implicit declaration of function 'acl_from_mode'
acl_get_fd.c:62: warning: return makes pointer from integer without a cast

It looks like the acl link in include/ doesn't get created properly with this patch.

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#3 lore raw
Quoted 25 lines · On Tuesday 30 December 2008 07:49:36 Christoph Hellwig wrote:
Quoted 10 lines · Christoph Hellwig
Quoted 7 lines · Eric Sandeen

This is for http://oss.sgi.com/bugzilla/show_bug.cgi?id=759
"fix parallel issue with include/ symlinks"

Doing something like "make -j2 install install-dev" would lead to a race of removing & creating symlinks in include/

Thanks to Mike for reporting & suggesting the fix.

Looks good and I've put in in my queue.

Actually spoken too soon. This breaks the acl build for me with:

gcc -g -O2 -DNDEBUG -funsigned-char -fno-strict-aliasing -Wall -DVERSION=\"2.2.47\" -DLOCALEDIR=\"/usr/share/locale\" -DPACKAGE=\"acl\" -I../include -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -include perm_copy.h -c acl_get_fd.c -fPIC -DPIC -o .libs/acl_get_fd.o acl_get_fd.c:27:24: error: acl/libacl.h: No such file or directory acl_get_fd.c: In function 'acl_get_fd':
acl_get_fd.c:62: warning: implicit declaration of function 'acl_from_mode'
acl_get_fd.c:62: warning: return makes pointer from integer without a cast

Quoted 2 lines

It looks like the acl link in include/ doesn't get created properly with this patch.

acl-2.2.47 built fine for me with ./configure && make and this patch ...

that said, if the only purpose of this is to make sure there are symlinks in include/, why not do it at the tail end of configure ? then there will be no weird parallel magic to worry about, and everything will always be available once configure has finished.
-mike

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#4 lore raw
Quoted 1 line · Mike Frysinger

acl-2.2.47 built fine for me with ./configure && make and this patch ...

Works now after a make distclean for me.

Quoted 4 lines

that said, if the only purpose of this is to make sure there are symlinks in include/, why not do it at the tail end of configure ? then there will be no weird parallel magic to worry about, and everything will always be available once configure has finished.

I'll leave that to Eric or anyone else who wants to play a build system expert on TV :)

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#5 lore raw
Quoted 6 lines · On Tuesday 30 December 2008 12:18:25 Christoph Hellwig wrote:
Quoted 2 lines · Mike Frysinger

acl-2.2.47 built fine for me with ./configure && make and this patch
...

Works now after a make distclean for me.

Quoted 7 lines
Quoted 4 lines

that said, if the only purpose of this is to make sure there are symlinks in include/, why not do it at the tail end of configure ? then there will be no weird parallel magic to worry about, and everything will always be available once configure has finished.

I'll leave that to Eric or anyone else who wants to play a build system expert on TV :)

it's easy to do, i just dont know how people feel about the idea in general

configure.in +8 -1
index 3c46c49..d227630 100644
@@ -27,4 +27,11 @@ AC_MANUAL_FORMAT
 
 AC_FUNC_GCC_VISIBILITY
 
-AC_OUTPUT(include/builddefs)
+AC_CONFIG_FILES(include/builddefs)
+AC_CONFIG_COMMANDS([include-symlinks], [
+	rm -f include/acl include/sys
+	ln -s . include/acl
+	ln -s . include/sys
+])
+AC_OUTPUT
+
include/Makefile +0 -0
index f2eca14..d606fa2 100644
@@ -10,13 +10,10 @@ LSRCFILES = builddefs.in buildmacros buildrules 

config.h.in
LDIRT = sys acl

default:
- rm -f sys acl
- $(LN_S) . sys
- $(LN_S) . acl

include $(BUILDRULES)

-install-dev: default
+install-dev:
$(INSTALL) -m 755 -d $(PKG_INC_DIR) $(INSTALL) -m 755 -d $(PKG_INC_DIR)/sys $(INSTALL) -m 644 acl.h $(PKG_INC_DIR)/sys/acl.h
-mike

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#6 lore raw
Quoted 6 lines · Mike Frysinger
Quoted 5 lines · On Tuesday 30 December 2008 12:18:25 Christoph Hellwig wrote:
Quoted 2 lines · Mike Frysinger

acl-2.2.47 built fine for me with ./configure && make and this patch
...

Works now after a make distclean for me.

Quoted 8 lines
Quoted 6 lines
Quoted 4 lines

that said, if the only purpose of this is to make sure there are symlinks in include/, why not do it at the tail end of configure ? then there will be no weird parallel magic to worry about, and everything will always be available once configure has finished.

I'll leave that to Eric or anyone else who wants to play a build system expert on TV :)

it's easy to do, i just dont know how people feel about the idea in general

Doesn't much matter to me; not sure what is customary. Both ways work fine, I think.

-Eric

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs