Skip to contentSkip to conversation

Raspberry Pi - WiringPi Library Package

PATCH New Guillermo A. Amaral 3 participants 14 messages Jul 11, 2013 – Jul 12, 2013 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): CAPeEpDpMY2sRjGdd+TgPz5S--Pws+5hUNrV8jpiznxBqFZ7zDg@mail.gmail.com

#1 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

From: "Guillermo A. Amaral" <[email protected]>

---
 package/Config.in                                 |   1 +
 package/wiringpi/Config.in                        |   8 ++
 package/wiringpi/wiringpi-CLOEXEC-undefined.patch |  28 +++++
 package/wiringpi/wiringpi-cmake-support.patch     | 122 ++++++++++++++++++++++
 package/wiringpi/wiringpi.mk                      |  14 +++
 5 files changed, 173 insertions(+)
 create mode 100644 package/wiringpi/Config.in
 create mode 100644 package/wiringpi/wiringpi-CLOEXEC-undefined.patch
 create mode 100644 package/wiringpi/wiringpi-cmake-support.patch
 create mode 100644 package/wiringpi/wiringpi.mk
package/Config.in +1 -0
index 3186bb7..2824904 100644
@@ -303,6 +303,7 @@ source "package/usb_modeswitch_data/Config.in"
 source "package/usbmount/Config.in"
 source "package/usbutils/Config.in"
 source "package/wipe/Config.in"
+source "package/wiringpi/Config.in"
 source "package/w_scan/Config.in"
 endmenu
 
package/wiringpi/Config.in new file +8 -0
new file mode 100644
index 0000000..f368bf7
@@ -0,0 +1,8 @@
+config BR2_PACKAGE_WIRINGPI
+	bool "wiringpi"
+	depends on BR2_arm
+	help
+	  GPIO Interface library for the Raspberry Pi.
+
+	  http://wiringpi.com/
+
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +28 -0
new file mode 100644
index 0000000..e023d15
@@ -0,0 +1,28 @@
+From 728b2634cbf661e5303b1e8cb791b909ad4e907c Mon Sep 17 00:00:00 2001
+From: "Guillermo A. Amaral" <[email protected]>
+Date: Wed, 10 Jul 2013 22:05:12 -0700
+Subject: [PATCH] Declare O_CLOEXEC on systems with an older kernel and/or
+ glibc.
+
+---
+ wiringPi/wiringPi.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/wiringPi/wiringPi.c b/wiringPi/wiringPi.c
+index ba61d9f..2ee23b9 100644
+--- a/wiringPi/wiringPi.c
++++ b/wiringPi/wiringPi.c
+@@ -77,6 +77,10 @@
+ #define	FALSE	(1==2)
+ #endif
+ 
++#ifndef O_CLOEXEC
++#define O_CLOEXEC 0
++#endif
++
+ // Environment Variables
+ 
+ #define	ENV_DEBUG	"WIRINGPI_DEBUG"
+-- 
+1.8.1.5
+
package/wiringpi/wiringpi-cmake-support.patch new file +122 -0

122 lines not on this page · raw message

package/wiringpi/wiringpi.mk new file +14 -0
new file mode 100644
index 0000000..4341f49
@@ -0,0 +1,14 @@
+#############################################################
+#
+# wiringpi
+#
+#############################################################
+
+WIRINGPI_VERSION = 02a3bd8d8f2ae5c873e63875a8faef5b627f9db6
+WIRINGPI_SITE = git://git.drogon.net/wiringPi
+WIRINGPI_LICENSE = LGPLv3+
+WIRINGPI_LICENSE_FILES = COPYING.LESSER
+WIRINGPI_INSTALL_STAGING = YES
+WIRINGPI_CONF_OPT = -DCMAKE_BUILD_TYPE=Release
+
+$(eval $(cmake-package))
Signature · 1 line
1.8.1.5
#2 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

From: "Guillermo A. Amaral" <[email protected]>

---
 package/Config.in                                 |   1 +
 package/wiringpi/Config.in                        |   8 ++
 package/wiringpi/wiringpi-CLOEXEC-undefined.patch |  29 +++++
 package/wiringpi/wiringpi-cmake-support.patch     | 122 ++++++++++++++++++++++
 package/wiringpi/wiringpi.mk                      |  14 +++
 5 files changed, 174 insertions(+)
 create mode 100644 package/wiringpi/Config.in
 create mode 100644 package/wiringpi/wiringpi-CLOEXEC-undefined.patch
 create mode 100644 package/wiringpi/wiringpi-cmake-support.patch
 create mode 100644 package/wiringpi/wiringpi.mk
package/Config.in +1 -0
index 3186bb7..2824904 100644
@@ -303,6 +303,7 @@ source "package/usb_modeswitch_data/Config.in"
 source "package/usbmount/Config.in"
 source "package/usbutils/Config.in"
 source "package/wipe/Config.in"
+source "package/wiringpi/Config.in"
 source "package/w_scan/Config.in"
 endmenu
 
package/wiringpi/Config.in new file +8 -0
new file mode 100644
index 0000000..f368bf7
@@ -0,0 +1,8 @@
+config BR2_PACKAGE_WIRINGPI
+	bool "wiringpi"
+	depends on BR2_arm
+	help
+	  GPIO Interface library for the Raspberry Pi.
+
+	  http://wiringpi.com/
+
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +29 -0
new file mode 100644
index 0000000..ca0ed99
@@ -0,0 +1,29 @@
+From 728b2634cbf661e5303b1e8cb791b909ad4e907c Mon Sep 17 00:00:00 2001
+From: "Guillermo A. Amaral" <[email protected]>
+Date: Wed, 10 Jul 2013 22:05:12 -0700
+Subject: [PATCH] Declare O_CLOEXEC on systems with an older kernel and/or
+ glibc.
+
+Signed-off-by: Guillermo A. Amaral <[email protected]>
+---
+ wiringPi/wiringPi.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/wiringPi/wiringPi.c b/wiringPi/wiringPi.c
+index ba61d9f..2ee23b9 100644
+--- a/wiringPi/wiringPi.c
++++ b/wiringPi/wiringPi.c
+@@ -77,6 +77,10 @@
+ #define	FALSE	(1==2)
+ #endif
+ 
++#ifndef O_CLOEXEC
++#define O_CLOEXEC 0
++#endif
++
+ // Environment Variables
+ 
+ #define	ENV_DEBUG	"WIRINGPI_DEBUG"
+-- 
+1.8.1.5
+
package/wiringpi/wiringpi-cmake-support.patch new file +122 -0

122 lines not on this page · raw message

package/wiringpi/wiringpi.mk new file +14 -0
new file mode 100644
index 0000000..4341f49
@@ -0,0 +1,14 @@
+#############################################################
+#
+# wiringpi
+#
+#############################################################
+
+WIRINGPI_VERSION = 02a3bd8d8f2ae5c873e63875a8faef5b627f9db6
+WIRINGPI_SITE = git://git.drogon.net/wiringPi
+WIRINGPI_LICENSE = LGPLv3+
+WIRINGPI_LICENSE_FILES = COPYING.LESSER
+WIRINGPI_INSTALL_STAGING = YES
+WIRINGPI_CONF_OPT = -DCMAKE_BUILD_TYPE=Release
+
+$(eval $(cmake-package))
Signature · 1 line
1.8.1.5
#3 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Hi Guillermo,

Quoted 5 lines · Guillermo A. Amaral

From: "Guillermo A. Amaral" <[email protected]>

---

[...]

Quoted 18 lines
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +11 -0
new file mode 100644
index 0000000..ca0ed99
@@ -0,0 +1,29 @@
+From 728b2634cbf661e5303b1e8cb791b909ad4e907c Mon Sep 17 00:00:00 2001
+From: "Guillermo A. Amaral" <[email protected]>
+Date: Wed, 10 Jul 2013 22:05:12 -0700
+Subject: [PATCH] Declare O_CLOEXEC on systems with an older kernel and/or
+ glibc.
+
+Signed-off-by: Guillermo A. Amaral <[email protected]>
+---
+ wiringPi/wiringPi.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+

package/wiringpi/wiringpi-CLOEXEC-undefined.patch line 21

Quoted 10 lines
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +10 -0
+diff --git a/wiringPi/wiringPi.c b/wiringPi/wiringPi.c
+index ba61d9f..2ee23b9 100644
+--- a/wiringPi/wiringPi.c
++++ b/wiringPi/wiringPi.c
+@@ -77,6 +77,10 @@
+ #define	FALSE	(1==2)
+ #endif
+ 
++#ifndef O_CLOEXEC
++#define O_CLOEXEC 0

Are you sure? I see

#define O_CLOEXEC 02000000

in include/uapi/asm-generic/fcntl.h.

baruch

Quoted 6 lines
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +6 -0
++#endif
++
+ // Environment Variables
+ 
+ #define	ENV_DEBUG	"WIRINGPI_DEBUG"
+-- 
Signature · 3 lines
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
#4 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Quoted 42 lines · Baruch Siach

Hi Guillermo,

Quoted 5 lines · Guillermo A. Amaral

From: "Guillermo A. Amaral" <[email protected]>

---

[...]

Quoted 18 lines
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +11 -0
new file mode 100644
index 0000000..ca0ed99
@@ -0,0 +1,29 @@
+From 728b2634cbf661e5303b1e8cb791b909ad4e907c Mon Sep 17 00:00:00 2001
+From: "Guillermo A. Amaral" <[email protected]>
+Date: Wed, 10 Jul 2013 22:05:12 -0700
+Subject: [PATCH] Declare O_CLOEXEC on systems with an older kernel and/or
+ glibc.
+
+Signed-off-by: Guillermo A. Amaral <[email protected]>
+---
+ wiringPi/wiringPi.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+

package/wiringpi/wiringpi-CLOEXEC-undefined.patch line 21

Quoted 10 lines
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +10 -0
+diff --git a/wiringPi/wiringPi.c b/wiringPi/wiringPi.c
+index ba61d9f..2ee23b9 100644
+--- a/wiringPi/wiringPi.c
++++ b/wiringPi/wiringPi.c
+@@ -77,6 +77,10 @@
+ #define	FALSE	(1==2)
+ #endif
+ 
++#ifndef O_CLOEXEC
++#define O_CLOEXEC 0

Are you sure? I see

Quoted 4 lines

#define O_CLOEXEC 02000000

in include/uapi/asm-generic/fcntl.h.

Hi baruch,

Usage of O_CLOEXEC in wiringPi was added very recently, it started failing after that. I hear it still works if you're using glibc though (I haven't tested it).

Here's the output if you remove the patch:

	/development/test/build/wiringpi-02a3bd8d8f2ae5c873e63875a8faef5b627f9db6/wiringPi/wiringPi.c: In function ?wiringPiSetup?:
	/development/test/build/wiringpi-02a3bd8d8f2ae5c873e63875a8faef5b627f9db6/wiringPi/wiringPi.c:1544:49: error: ?O_CLOEXEC? undeclared (first use in this function)
	/development/test/build/wiringpi-02a3bd8d8f2ae5c873e63875a8faef5b627f9db6/wiringPi/wiringPi.c:1544:49: note: each undeclared identifier is reported only once for each function it appears in
	make[2]: *** [wiringPi/CMakeFiles/wiringPi.dir/wiringPi.c.o] Error 1
	make[1]: *** [wiringPi/CMakeFiles/wiringPi.dir/all] Error 2
	make: *** [all] Error 2

Cheers,
G

Signature · 1 line
gamaral http://about.me/gamaral
#5 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Hi Guillermo,

Quoted 7 lines · Guillermo A. Amaral
Quoted 6 lines · Baruch Siach
Quoted 5 lines · Guillermo A. Amaral

From: "Guillermo A. Amaral" <[email protected]>

---

[...]

Quoted 16 lines
Quoted 9 lines
Quoted 2 lines

++#ifndef O_CLOEXEC
++#define O_CLOEXEC 0

Are you sure? I see

#define O_CLOEXEC 02000000

in include/uapi/asm-generic/fcntl.h.

Hi baruch,

Usage of O_CLOEXEC in wiringPi was added very recently, it started failing after that. I hear it still works if you're using glibc though (I haven't tested it).

Quoted 8 lines

Here's the output if you remove the patch:

	/development/test/build/wiringpi-02a3bd8d8f2ae5c873e63875a8faef5b627f9db6/wiringPi/wiringPi.c: In function ?wiringPiSetup?:
	/development/test/build/wiringpi-02a3bd8d8f2ae5c873e63875a8faef5b627f9db6/wiringPi/wiringPi.c:1544:49: error: ?O_CLOEXEC? undeclared (first use in this function)
	/development/test/build/wiringpi-02a3bd8d8f2ae5c873e63875a8faef5b627f9db6/wiringPi/wiringPi.c:1544:49: note: each undeclared identifier is reported only once for each function it appears in
	make[2]: *** [wiringPi/CMakeFiles/wiringPi.dir/wiringPi.c.o] Error 1
	make[1]: *** [wiringPi/CMakeFiles/wiringPi.dir/all] Error 2
	make: *** [all] Error 2

I didn't say you should remove this patch, just use the correct value. Setting O_CLOEXEC to 0 makes it effectively a no-op. Is this intended?

baruch

Signature · 3 lines
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
#6 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Quoted 38 lines · Baruch Siach

Hi Guillermo,

Quoted 7 lines · Guillermo A. Amaral
Quoted 6 lines · Baruch Siach
Quoted 5 lines · Guillermo A. Amaral

From: "Guillermo A. Amaral" <[email protected]>

---

[...]

Quoted 16 lines
Quoted 9 lines
Quoted 2 lines

++#ifndef O_CLOEXEC
++#define O_CLOEXEC 0

Are you sure? I see

#define O_CLOEXEC 02000000

in include/uapi/asm-generic/fcntl.h.

Hi baruch,

Usage of O_CLOEXEC in wiringPi was added very recently, it started failing after that. I hear it still works if you're using glibc though (I haven't tested it).

Quoted 8 lines

Here's the output if you remove the patch:

	/development/test/build/wiringpi-02a3bd8d8f2ae5c873e63875a8faef5b627f9db6/wiringPi/wiringPi.c: In function ?wiringPiSetup?:
	/development/test/build/wiringpi-02a3bd8d8f2ae5c873e63875a8faef5b627f9db6/wiringPi/wiringPi.c:1544:49: error: ?O_CLOEXEC? undeclared (first use in this function)
	/development/test/build/wiringpi-02a3bd8d8f2ae5c873e63875a8faef5b627f9db6/wiringPi/wiringPi.c:1544:49: note: each undeclared identifier is reported only once for each function it appears in
	make[2]: *** [wiringPi/CMakeFiles/wiringPi.dir/wiringPi.c.o] Error 1
	make[1]: *** [wiringPi/CMakeFiles/wiringPi.dir/all] Error 2
	make: *** [all] Error 2
Quoted 2 lines

I didn't say you should remove this patch, just use the correct value. Setting O_CLOEXEC to 0 makes it effectively a no-op. Is this intended?

Sorry baruch,

I thought you where asking it if was required. -.-'

I searched around for alternative ways around the issue when I first encountered it, it seemed no-oping it would be most portable/safest approach.

Since, if it's not defined, it might be for a reason, the outcome of setting it to 02000000 would also be unknown.

G

Signature · 1 line
gamaral http://about.me/gamaral
#7 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Hello Guillermo,

Am 11.07.2013 08:38, schrieb Guillermo A. Amaral:

Quoted 2 lines

I searched around for alternative ways around the issue when I first encountered it, it seemed no-oping it would be most portable/safest approach.

The O_CLOEXEC variable was introduced in 2.6.23.

Quoted 9 lines

O_CLOEXEC (Since Linux 2.6.23)
Enable the close-on-exec flag for the new file descriptor. Specifying this flag permits a program to avoid additional fcntl(2) F_SETFD operations to set the FD_CLOEXEC flag. Additionally, use of this flag is essential in some multithreaded programs since using a separate fcntl(2) F_SETFD operation to set the FD_CLOEXEC flag does not suffice to avoid race conditions where one thread opens a file descriptor at the same time as another thread does a fork(2) plus execve(2).

So if you use a kernel less then 2.6.23 it make no sense to define O_CLOEXEC to whatever you want, the kernel doesn't know this. And in the opposite you can't defined it to some different then already defined for O_CLOEXEC.

The function 'open' can also used without the 3rd parameter.

So I think you have to check which kernel version is used and build a patch which does something like

#ifdef KERNEL_VER < 2_6_23
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC) ) < 0)
#else
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
#endif

The guys from linux-wireless do a lot of this to get the wireless package working om different kernel versions.

Regards
Carsten

#8 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Howdy Carsten,

Quoted 28 lines · Carsten Schoenert

Hello Guillermo,

Am 11.07.2013 08:38, schrieb Guillermo A. Amaral:

Quoted 2 lines

I searched around for alternative ways around the issue when I first encountered it, it seemed no-oping it would be most portable/safest approach.

The O_CLOEXEC variable was introduced in 2.6.23.

Quoted 9 lines

O_CLOEXEC (Since Linux 2.6.23)
Enable the close-on-exec flag for the new file descriptor. Specifying this flag permits a program to avoid additional fcntl(2) F_SETFD operations to set the FD_CLOEXEC flag. Additionally, use of this flag is essential in some multithreaded programs since using a separate fcntl(2) F_SETFD operation to set the FD_CLOEXEC flag does not suffice to avoid race conditions where one thread opens a file descriptor at the same time as another thread does a fork(2) plus execve(2).

So if you use a kernel less then 2.6.23 it make no sense to definess then 2.6.23 it make no sense to define O_CLOEXEC to whatever you want, the kernel doesn't know this. And in the
opposite you can't defined it to some different then already defined for
O_CLOEXEC.

The function 'open' can also used without the 3rd parameter.

So I think you have to check which kernel version is used and build a patch which does something like

Quoted 8 lines

#ifdef KERNEL_VER < 2_6_23
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC) ) < 0)
#else
if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0)
#endif

The guys from linux-wireless do a lot of this to get the wireless package working om dif

The Raspberry Pi doesn't go down to 2.6.y, the oldest supported version is 3.2.27. :)

So there should be no need to do the kernel check, since the package is RPi specific.

The problem here was that O_CLOEXEC was not defined with the default uclibc and older versions of glibc.

Cheers,
G

Signature · 1 line
gamaral http://about.me/gamaral
#9 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Hi Guillermo,

Quoted 2 lines · Guillermo Amaral

The Raspberry Pi doesn't go down to 2.6.y, the oldest supported version is 3.2.27. :)

If this is the case, then there is no reason to make O_CLOEXEC a no-op.

Quoted 5 lines

So there should be no need to do the kernel check, since the package is RPi specific.

The problem here was that O_CLOEXEC was not defined with the default uclibc and older versions of glibc.

The O_CLOEXEC define comes with the kernel headers used to build the toolchain, not from the C library.

baruch

Signature · 3 lines
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
#10 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Hey Baruch,

Quoted 8 lines · Baruch Siach

Hi Guillermo,

Quoted 2 lines · Guillermo Amaral

The Raspberry Pi doesn't go down to 2.6.y, the oldest supported version is 3.2.27. :)

If this is the case, then there is no reason to make O_CLOEXEC a no-op.

Quoted 9 lines
Quoted 5 lines

So there should be no need to do the kernel check, since the package is RPi specific.

The problem here was that O_CLOEXEC was not defined with the default uclibc and older versions of glibc.

The O_CLOEXEC define comes with the kernel headers used to build the toolchain, not from the C library.

I didn't say it didn't. I'll clarify, if __USE_GNU and/or __USE_XOPEN2K8 don't get defined at some point O_CLOEXEC is not getting defined. My guess is that they get defined by *libc, feel free to correct me if I'm wrong.

G

Signature · 1 line
gamaral http://about.me/gamaral
#11 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Hi Guillermo,

Quoted 13 lines · Guillermo Amaral
Quoted 12 lines · Baruch Siach
Quoted 2 lines · Guillermo Amaral

The Raspberry Pi doesn't go down to 2.6.y, the oldest supported version is 3.2.27. :)

If this is the case, then there is no reason to make O_CLOEXEC a no-op.

Quoted 5 lines

So there should be no need to do the kernel check, since the package is RPi specific.

The problem here was that O_CLOEXEC was not defined with the default uclibc and older versions of glibc.

Quoted 6 lines
Quoted 2 lines

The O_CLOEXEC define comes with the kernel headers used to build the toolchain, not from the C library.

I didn't say it didn't. I'll clarify, if __USE_GNU and/or __USE_XOPEN2K8 don't get defined at some point O_CLOEXEC is not getting defined. My guess is that they get defined by *libc, feel free to correct me if I'm wrong.

The code below builds just fine on my machine:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void func(void) { open("f", O_RDWR | O_CLOEXEC); }

baruch

Signature · 3 lines
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
#12 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Howdy Baruch,

Quoted 23 lines · Baruch Siach

Hi Guillermo,

Quoted 13 lines · Guillermo Amaral
Quoted 12 lines · Baruch Siach
Quoted 2 lines · Guillermo Amaral

The Raspberry Pi doesn't go down to 2.6.y, the oldest supported version is 3.2.27. :)

If this is the case, then there is no reason to make O_CLOEXEC a no-op.

Quoted 5 lines

So there should be no need to do the kernel check, since the package is RPi specific.

The problem here was that O_CLOEXEC was not defined with the default uclibc and older versions of glibc.

Quoted 6 lines
Quoted 2 lines

The O_CLOEXEC define comes with the kernel headers used to build the toolchain, not from the C library.

I didn't say it didn't. I'll clarify, if __USE_GNU and/or __USE_XOPEN2K8 don't get defined at some point O_CLOEXEC is not getting defined. My guess is that they get defined by *libc, feel free to correct me if I'm wrong.

Quoted 7 lines

The code below builds just fine on my machine:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void func(void) { open("f", O_RDWR | O_CLOEXEC); }

Congratulations, I'm very proud. Have a beer on me! (B)

G

P.S.

$ host/usr/bin/arm-linux-gcc -c x.c
x.c: In function ?func?:
x.c:5:38: error: ?O_CLOEXEC? undeclared (first use in this function)
x.c:5:38: note: each undeclared identifier is reported only once for each
function it appears in
$ cat x.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void func(void) { open("f", O_RDWR | O_CLOEXEC); }

Signature · 1 line
gamaral http://about.me/gamaral
#13 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

Hi Guillermo,

Quoted 42 lines · Guillermo Amaral
Quoted 21 lines · Baruch Siach
Quoted 13 lines · Guillermo Amaral
Quoted 12 lines · Baruch Siach
Quoted 2 lines · Guillermo Amaral

The Raspberry Pi doesn't go down to 2.6.y, the oldest supported version is 3.2.27. :)

If this is the case, then there is no reason to make O_CLOEXEC a no-op.

Quoted 5 lines

So there should be no need to do the kernel check, since the package is RPi specific.

The problem here was that O_CLOEXEC was not defined with the default uclibc and older versions of glibc.

Quoted 6 lines
Quoted 2 lines

The O_CLOEXEC define comes with the kernel headers used to build the toolchain, not from the C library.

I didn't say it didn't. I'll clarify, if __USE_GNU and/or __USE_XOPEN2K8 don't get defined at some point O_CLOEXEC is not getting defined. My guess is that they get defined by *libc, feel free to correct me if I'm wrong.

Quoted 7 lines

The code below builds just fine on my machine:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void func(void) { open("f", O_RDWR | O_CLOEXEC); }

Congratulations, I'm very proud. Have a beer on me! (B)

G

P.S.

$ host/usr/bin/arm-linux-gcc -c x.c
x.c: In function ?func?:
x.c:5:38: error: ?O_CLOEXEC? undeclared (first use in this function)
x.c:5:38: note: each undeclared identifier is reported only once for each
function it appears in
Quoted 6 lines
$ cat x.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void func(void) { open("f", O_RDWR | O_CLOEXEC); }

And does defining __USE_GNU and/or __USE_XOPEN2K8 improves the situation?

My point is that the existence of O_CLOEXEC at build time is determined by the version of the kernel headers in the toolchain. At run time, O_CLOEXEC is effective when the running kernel supports it. The toolchain you are using is based on on old kernel headers, so you need to define O_CLOEXEC yourself, which is fine. The kernel running on a Raspberry Pi should always be recent enough to support O_CLOEXEC. So the right solution, in my opinion, is to define O_CLOEXEC to its real value.

baruch

Signature · 3 lines
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
#14 lore raw

PATCH 1/1 Raspberry Pi - WiringPi Library Package

From: "Guillermo A. Amaral" <[email protected]>

---
 package/Config.in                                 |   1 +
 package/wiringpi/Config.in                        |   8 ++
 package/wiringpi/wiringpi-CLOEXEC-undefined.patch |  29 +++++
 package/wiringpi/wiringpi-cmake-support.patch     | 122 ++++++++++++++++++++++
 package/wiringpi/wiringpi.mk                      |  14 +++
 5 files changed, 174 insertions(+)
 create mode 100644 package/wiringpi/Config.in
 create mode 100644 package/wiringpi/wiringpi-CLOEXEC-undefined.patch
 create mode 100644 package/wiringpi/wiringpi-cmake-support.patch
 create mode 100644 package/wiringpi/wiringpi.mk
package/Config.in +1 -0
index b588a0c..e4051da 100644
@@ -303,6 +303,7 @@ source "package/usb_modeswitch_data/Config.in"
 source "package/usbmount/Config.in"
 source "package/usbutils/Config.in"
 source "package/wipe/Config.in"
+source "package/wiringpi/Config.in"
 source "package/w_scan/Config.in"
 endmenu
 
package/wiringpi/Config.in new file +8 -0
new file mode 100644
index 0000000..f368bf7
@@ -0,0 +1,8 @@
+config BR2_PACKAGE_WIRINGPI
+	bool "wiringpi"
+	depends on BR2_arm
+	help
+	  GPIO Interface library for the Raspberry Pi.
+
+	  http://wiringpi.com/
+
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +29 -0
new file mode 100644
index 0000000..fa16636
@@ -0,0 +1,29 @@
+From 728b2634cbf661e5303b1e8cb791b909ad4e907c Mon Sep 17 00:00:00 2001
+From: "Guillermo A. Amaral" <[email protected]>
+Date: Wed, 10 Jul 2013 22:05:12 -0700
+Subject: [PATCH] Declare O_CLOEXEC on systems with an older kernel and/or
+ glibc.
+
+Signed-off-by: Guillermo A. Amaral <[email protected]>
+---
+ wiringPi/wiringPi.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/wiringPi/wiringPi.c b/wiringPi/wiringPi.c
+index ba61d9f..2ee23b9 100644
+--- a/wiringPi/wiringPi.c
++++ b/wiringPi/wiringPi.c
+@@ -77,6 +77,10 @@
+ #define	FALSE	(1==2)
+ #endif
+ 
++#ifndef O_CLOEXEC
++#define O_CLOEXEC 02000000
++#endif
++
+ // Environment Variables
+ 
+ #define	ENV_DEBUG	"WIRINGPI_DEBUG"
+-- 
+1.8.1.5
+
package/wiringpi/wiringpi-cmake-support.patch new file +122 -0

122 lines not on this page · raw message

package/wiringpi/wiringpi.mk new file +14 -0
new file mode 100644
index 0000000..4341f49
@@ -0,0 +1,14 @@
+#############################################################
+#
+# wiringpi
+#
+#############################################################
+
+WIRINGPI_VERSION = 02a3bd8d8f2ae5c873e63875a8faef5b627f9db6
+WIRINGPI_SITE = git://git.drogon.net/wiringPi
+WIRINGPI_LICENSE = LGPLv3+
+WIRINGPI_LICENSE_FILES = COPYING.LESSER
+WIRINGPI_INSTALL_STAGING = YES
+WIRINGPI_CONF_OPT = -DCMAKE_BUILD_TYPE=Release
+
+$(eval $(cmake-package))
Signature · 1 line
1.8.1.5