Raspberry Pi - WiringPi Library Package
A message that is not in the archive (sent off-list or not yet received): CAPeEpDpMY2sRjGdd+TgPz5S--Pws+5hUNrV8jpiznxBqFZ7zDg@mail.gmail.com
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
@@ -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
@@ -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
@@ -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
@@ -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
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
@@ -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
@@ -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
@@ -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
@@ -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
PATCH 1/1 Raspberry Pi - WiringPi Library Package
Hi Guillermo,
Quoted 5 lines · Guillermo A. Amaral
From: "Guillermo A. Amaral" <[email protected]>
Signed-off-by Guillermo A. Amaral <[email protected]>---
[...]
Quoted 18 lines
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +11
-0@@ -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 -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]>
Signed-off-by Guillermo A. Amaral <[email protected]>---
[...]
Quoted 18 lines
package/wiringpi/wiringpi-CLOEXEC-undefined.patch new file +11
-0@@ -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 0Are you sure? I see
Quoted 4 lines
#define
O_CLOEXEC02000000in
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
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]>
Signed-off-by Guillermo A. Amaral <[email protected]>---
[...]
Quoted 16 lines
Quoted 9 lines
Quoted 2 lines
++#ifndef
O_CLOEXEC
++#defineO_CLOEXEC0Are you sure? I see
#define
O_CLOEXEC02000000in
include/uapi/asm-generic/fcntl.h.Hi baruch,
Usage of
O_CLOEXECin 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 -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]>
Signed-off-by Guillermo A. Amaral <[email protected]>---
[...]
Quoted 16 lines
Quoted 9 lines
Quoted 2 lines
++#ifndef
O_CLOEXEC
++#defineO_CLOEXEC0Are you sure? I see
#define
O_CLOEXEC02000000in
include/uapi/asm-generic/fcntl.h.Hi baruch,
Usage of
O_CLOEXECin 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_CLOEXECto 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
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_SETFDoperations to set theFD_CLOEXECflag. Additionally, use of this flag is essential in some multithreaded programs since using a separate fcntl(2)F_SETFDoperation to set theFD_CLOEXECflag 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
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_CLOEXECvariable 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_SETFDoperations to set theFD_CLOEXECflag. Additionally, use of this flag is essential in some multithreaded programs since using a separate fcntl(2)F_SETFDoperation to set theFD_CLOEXECflag 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_CLOEXECto whatever you want, the kernel doesn't know this. And in the
opposite you can't defined it to some different then already defined forO_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)
#endifThe 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
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_CLOEXECwas 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 -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_CLOEXECa 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_CLOEXECwas not defined with the default uclibc and older versions of glibc.The
O_CLOEXECdefine 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
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_CLOEXECa 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_CLOEXECwas not defined with the default uclibc and older versions of glibc.
Quoted 6 lines
Quoted 2 lines
The
O_CLOEXECdefine 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_GNUand/or__USE_XOPEN2K8don't get defined at some pointO_CLOEXECis 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 -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_CLOEXECa 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_CLOEXECwas not defined with the default uclibc and older versions of glibc.Quoted 6 lines
Quoted 2 lines
The
O_CLOEXECdefine 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_GNUand/or__USE_XOPEN2K8don't get defined at some pointO_CLOEXECis 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
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_CLOEXECa 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_CLOEXECwas not defined with the default uclibc and older versions of glibc.Quoted 6 lines
Quoted 2 lines
The
O_CLOEXECdefine 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_GNUand/or__USE_XOPEN2K8don't get defined at some pointO_CLOEXECis 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 -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
@@ -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
@@ -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
@@ -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
@@ -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