* Portability of fts() functions
@ 2014-08-09 9:54 Paul Onyschuk
0 siblings, 0 replies; 9+ messages in thread
From: Paul Onyschuk @ 2014-08-09 9:54 UTC (permalink / raw)
To: discuss
mandocdb.c in v1.13.x introduced dependency on fts() family of
functions. This will bite on non-BSD systems.
Musl libc doesn't provide it at all, neither does systems of Solaris
origin I guess, but then glibc does something even worse [1], relevant
fts.h header [2]. AFAIK uClibc replicated behavior of glibc.
[1] https://sourceware.org/bugzilla/show_bug.cgi?id=15838
[2] https://sourceware.org/git/?p=glibc.git;a=blob;f=io/fts.h
--
Paul Onyschuk
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Portability of fts() functions
2014-08-10 10:53 ` Paul Onyschuk
@ 2014-08-11 3:28 ` Ingo Schwarze
0 siblings, 0 replies; 9+ messages in thread
From: Ingo Schwarze @ 2014-08-11 3:28 UTC (permalink / raw)
To: Paul Onyschuk; +Cc: discuss
Hi Paul,
Paul Onyschuk wrote on Sun, Aug 10, 2014 at 12:53:40PM +0200:
> On Sat, 9 Aug 2014 17:49:28 +0200 Ingo Schwarze wrote:
>> I guess what is needed is a compat_fts.h/compat_fts.c just like
>> for ohash(3). I fear that won't be something that can be done
>> in a hurry, though.
> This may be helpful in future. Libnbcompat from pkgsrc is providing
> portable fts(3) implementation under reasonable conditions (3-clause
> BSD license).
>
> http://cvsweb.netbsd.org/bsdweb.cgi/ \
> pkgsrc/pkgtools/libnbcompat/files/nbcompat/
Thanks for the pointer!
While i didn't use the NetBSD implementation itself - it seems to
lack some bugfixes that the OpenBSD implementation has - the
libnbcompat file was quite helpful for inspiration how to work around
the lack of d_namlen and ALIGN/ALIGNBYTES on Linux.
Anyway, the mdocml.bsd.lv repo now contains a fallback for fts(3)
that works for me on OpenBSD and Linux. It will be contained in
the future mandoc 1.13.2 release.
Yours,
Ingo
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Portability of fts() functions
2014-08-09 15:49 ` Ingo Schwarze
2014-08-09 17:09 ` Paul Onyschuk
@ 2014-08-10 10:53 ` Paul Onyschuk
2014-08-11 3:28 ` Ingo Schwarze
1 sibling, 1 reply; 9+ messages in thread
From: Paul Onyschuk @ 2014-08-10 10:53 UTC (permalink / raw)
To: Ingo Schwarze; +Cc: discuss
On Sat, 9 Aug 2014 17:49:28 +0200
Ingo Schwarze wrote:
> I guess what is needed is a compat_fts.h/compat_fts.c just like
> for ohash(3). I fear that won't be something that can be done
> in a hurry, though.
This may be helpful in future. Libnbcompat from pkgsrc is providing
portable fts(3) implementation under reasonable conditions (3-clause
BSD license).
http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/pkgtools/libnbcompat/files/nbcompat/
--
Paul Onyschuk
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Portability of fts() functions
2014-08-09 23:26 ` Paul Onyschuk
@ 2014-08-10 2:46 ` Ingo Schwarze
0 siblings, 0 replies; 9+ messages in thread
From: Ingo Schwarze @ 2014-08-10 2:46 UTC (permalink / raw)
To: Paul Onyschuk; +Cc: discuss
Hi Paul,
Paul Onyschuk wrote on Sun, Aug 10, 2014 at 01:26:53AM +0200:
> On Sat, 9 Aug 2014 23:59:19 +0200 Ingo Schwarze wrote:
>> Oh you mean if mandoc is compiled on a 32bit glibc platform with 32bit
>> off_t but more than 2 billion files in one file system or files larger
>> than 2 GB inside a manual tree, mandoc will compile all right,
>> but i may crash at runtime due to the broken fts(3) implementation
>> contained in glibc? Did i get that right?
> I think you got it right.
>> I'm not sure what i could do about that - both in the long term
>> and as a quick fix for this release. What would you suggest?
> There isn't much you to do about for time now I guess. Explanation in
> readme and that "BUILD_TARGETS += db-build" won't compile on systems
> without fts(3) would do.
I've added a comment to the relevant place in the Makefile.
>> Indeed, that sounds bad.
>>
>> I guess i won't change that for this release, though. I worry that
>> if we are very unlucky, whatever guard i put in there might break
>> on another system that was already tested and may not be tested
>> again.
>>
>> For the next release, i have to keep this in mind.
>> I might do some more cleanup related to configure, anyway.
> What about something like that before 'set -e':
>
> echo "/* RUNNING ./CONFIGURE - SHOULD BE USED ONLY VIA MAKE, READ INSTALL */"
>
> Maybe that would be enough?
Sounds reasonable for now and certainly not dangerous; done.
Thanks,
Ingo
Index: Makefile
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/Makefile,v
retrieving revision 1.434
diff -u -p -r1.434 Makefile
--- Makefile 8 Aug 2014 23:47:21 -0000 1.434
+++ Makefile 10 Aug 2014 02:42:13 -0000
@@ -52,9 +52,10 @@ INSTALL_MAN = $(INSTALL_DATA)
# --- user settings related to database support ------------------------
-# If you want to build without database support, for example to avoid
-# the dependency on SQLite3, comment the following line.
-# However, you won't get apropos(1) and makewhatis(8) in that case.
+# Building apropos(1) and makewhatis(8) requires both SQLite3 and fts(3).
+# To avoid those dependencies, comment the following line.
+# Be careful: the fts(3) implementation in glibc is broken on 32bit
+# machines, see: https://sourceware.org/bugzilla/show_bug.cgi?id=15838
#
BUILD_TARGETS += db-build
Index: configure
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/configure,v
retrieving revision 1.7
diff -u -p -r1.7 configure
--- configure 8 Aug 2014 23:47:21 -0000 1.7
+++ configure 10 Aug 2014 02:42:13 -0000
@@ -14,6 +14,8 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+echo "/* RUNNING ./CONFIGURE - SHOULD BE USED ONLY VIA MAKE, READ INSTALL */"
+
set -e
exec > config.h 2> config.log
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Portability of fts() functions
2014-08-09 21:59 ` Ingo Schwarze
@ 2014-08-09 23:26 ` Paul Onyschuk
2014-08-10 2:46 ` Ingo Schwarze
0 siblings, 1 reply; 9+ messages in thread
From: Paul Onyschuk @ 2014-08-09 23:26 UTC (permalink / raw)
To: Ingo Schwarze; +Cc: discuss
On Sat, 9 Aug 2014 23:59:19 +0200
Ingo Schwarze wrote:
> Oh you mean if mandoc is compiled on a 32bit glibc platform with 32bit
> off_t but more than 2 billion files in one file system or files larger
> than 2 GB inside a manual tree, mandoc will compile all right,
> but i may crash at runtime due to the broken fts(3) implementation
> contained in glibc? Did i get that right?
I think you got it right.
> I'm not sure what i could do about that - both in the long term
> and as a quick fix for this release. What would you suggest?
There isn't much you to do about for time now I guess. Explanation in
readme and that "BUILD_TARGETS += db-build" won't compile on systems
without fts(3) would do.
> Indeed, that sounds bad.
>
> I guess i won't change that for this release, though. I worry that
> if we are very unlucky, whatever guard i put in there might break
> on another system that was already tested and may not be tested
> again.
>
> For the next release, i have to keep this in mind.
> I might do some more cleanup related to configure, anyway.
What about something like that before 'set -e':
echo "/* RUNNING ./CONFIGURE - SHOULD BE USED ONLY VIA MAKE, READ INSTALL */"
Maybe that would be enough?
--
Paul Onyschuk
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Portability of fts() functions
2014-08-09 17:09 ` Paul Onyschuk
@ 2014-08-09 21:59 ` Ingo Schwarze
2014-08-09 23:26 ` Paul Onyschuk
0 siblings, 1 reply; 9+ messages in thread
From: Ingo Schwarze @ 2014-08-09 21:59 UTC (permalink / raw)
To: Paul Onyschuk; +Cc: discuss
Hi Paul,
Paul Onyschuk wrote on Sat, Aug 09, 2014 at 07:09:23PM +0200:
> Ingo Schwarze wrote:
>> I guess what is needed is a compat_fts.h/compat_fts.c just like
>> for ohash(3). I fear that won't be something that can be done
>> in a hurry, though.
>>
>> So it looks like for the 1.13.1 release, it's probably to late
>> to fix the fts(3) issue, and systems not having it will have the
>> choice of either running 1.13.1 with "BUILD_TARGETS += db-build"
>> disabled (that is, without apropos/makewhatis)
>> or stay with 1.12.4 until 1.13.2 comes out.
>>
>> Do you think that would be tolerable?
> For systems missing fts(3) I would say yes. I would worry more about
> glibc scenario, especially if mdocml is packaged e.g. clean build on
> x86_64 system used by packager, where it could break otherwise, wasting
> someone's time.
Oh you mean if mandoc is compiled on a 32bit glibc platform with 32bit
off_t but more than 2 billion files in one file system or files larger
than 2 GB inside a manual tree, mandoc will compile all right,
but i may crash at runtime due to the broken fts(3) implementation
contained in glibc? Did i get that right?
I'm not sure what i could do about that - both in the long term
and as a quick fix for this release. What would you suggest?
> Using occasion:
>
> In file included from mansearch_const.c:20:0:
> manpath.h:36:1: error: unknown type name '__END_DECLS'
>
> mansearch_const.c is not including config.h before manpath.h, patch:
>
> XXX
> --- mansearch_const.c.orig
> +++ mansearch_const.c
> @@ -14,6 +14,10 @@
> * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> */
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
> #include <sys/types.h>
> #include <stdint.h>
>
> XXX
Yes, Thomas Klausner reported that one, too, and i fixed it with
exactly that patch in rc3.
> I think configure script should be guarded against standalone
> execution. Right now you can do "./configure && make" expecting usual
> behavior (if you forget about looking at INSTALL). Since in this case
> ${CC} won't be defined, script will try running commands starting with
> "-Wno-unused -Werror". All tests will fail, enabling all compat
> functions.
Indeed, that sounds bad.
I guess i won't change that for this release, though. I worry that
if we are very unlucky, whatever guard i put in there might break
on another system that was already tested and may not be tested
again.
For the next release, i have to keep this in mind.
I might do some more cleanup related to configure, anyway.
> I also have additional question. Are there any plans for providing
> man(1) command also? This would make mdocml a possible, standalone
> replacement for groff and man-db combination (typical in Linux
> distributions).
I will address that separately.
Yours,
Ingo
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Portability of fts() functions
2014-08-09 15:49 ` Ingo Schwarze
@ 2014-08-09 17:09 ` Paul Onyschuk
2014-08-09 21:59 ` Ingo Schwarze
2014-08-10 10:53 ` Paul Onyschuk
1 sibling, 1 reply; 9+ messages in thread
From: Paul Onyschuk @ 2014-08-09 17:09 UTC (permalink / raw)
To: Ingo Schwarze; +Cc: discuss
On Sat, 9 Aug 2014 17:49:28 +0200
Ingo Schwarze wrote:
> I guess what is needed is a compat_fts.h/compat_fts.c just like
> for ohash(3). I fear that won't be something that can be done
> in a hurry, though.
>
> So it looks like for the 1.13.1 release, it's probably to late
> to fix the fts(3) issue, and systems not having it will have the
> choice of either running 1.13.1 with "BUILD_TARGETS += db-build"
> disabled (that is, without apropos/makewhatis)
> or stay with 1.12.4 until 1.13.2 comes out.
>
> Do you think that would be tolerable?
For systems missing fts(3) I would say yes. I would worry more about
glibc scenario, especially if mdocml is packaged e.g. clean build on
x86_64 system used by packager, where it could break otherwise, wasting
someone's time.
Using occasion:
In file included from mansearch_const.c:20:0:
manpath.h:36:1: error: unknown type name '__END_DECLS'
mansearch_const.c is not including config.h before manpath.h, patch:
XXX
--- mansearch_const.c.orig
+++ mansearch_const.c
@@ -14,6 +14,10 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <sys/types.h>
#include <stdint.h>
XXX
I think configure script should be guarded against standalone
execution. Right now you can do "./configure && make" expecting usual
behavior (if you forget about looking at INSTALL). Since in this case
${CC} won't be defined, script will try running commands starting with
"-Wno-unused -Werror". All tests will fail, enabling all compat
functions.
I also have additional question. Are there any plans for providing
man(1) command also? This would make mdocml a possible, standalone
replacement for groff and man-db combination (typical in Linux
distributions).
--
Paul Onyschuk
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Portability of fts() functions
2014-08-09 10:38 Paul Onyschuk
@ 2014-08-09 15:49 ` Ingo Schwarze
2014-08-09 17:09 ` Paul Onyschuk
2014-08-10 10:53 ` Paul Onyschuk
0 siblings, 2 replies; 9+ messages in thread
From: Ingo Schwarze @ 2014-08-09 15:49 UTC (permalink / raw)
To: Paul Onyschuk; +Cc: discuss
Hi Paul,
Paul Onyschuk wrote on Sat, Aug 09, 2014 at 12:38:27PM +0200:
> mandocdb.c in v1.13.x introduced dependency on fts() family of
> functions. This will bite on non-BSD systems.
Ouch. I dimly remember that was mentioned before, but then
it seems i forgot about it. :-(
> Musl libc doesn't provide it at all, neither does systems of Solaris
> origin I guess, but then glibc does something even worse [1], relevant
> fts.h header [2]. AFAIK uClibc replicated behavior of glibc.
>
> [1] https://sourceware.org/bugzilla/show_bug.cgi?id=15838
> [2] https://sourceware.org/git/?p=glibc.git;a=blob;f=io/fts.h
Uh-oh. Not pretty at all.
I guess what is needed is a compat_fts.h/compat_fts.c just like
for ohash(3). I fear that won't be something that can be done
in a hurry, though.
So it looks like for the 1.13.1 release, it's probably to late
to fix the fts(3) issue, and systems not having it will have the
choice of either running 1.13.1 with "BUILD_TARGETS += db-build"
disabled (that is, without apropos/makewhatis)
or stay with 1.12.4 until 1.13.2 comes out.
Do you think that would be tolerable?
Yours,
Ingo
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Portability of fts() functions
@ 2014-08-09 10:38 Paul Onyschuk
2014-08-09 15:49 ` Ingo Schwarze
0 siblings, 1 reply; 9+ messages in thread
From: Paul Onyschuk @ 2014-08-09 10:38 UTC (permalink / raw)
To: discuss
mandocdb.c in v1.13.x introduced dependency on fts() family of
functions. This will bite on non-BSD systems.
Musl libc doesn't provide it at all, neither does systems of Solaris
origin I guess, but then glibc does something even worse [1], relevant
fts.h header [2]. AFAIK uClibc replicated behavior of glibc.
[1] https://sourceware.org/bugzilla/show_bug.cgi?id=15838
[2] https://sourceware.org/git/?p=glibc.git;a=blob;f=io/fts.h
--
Paul Onyschuk
--
To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-08-11 3:29 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-09 9:54 Portability of fts() functions Paul Onyschuk
2014-08-09 10:38 Paul Onyschuk
2014-08-09 15:49 ` Ingo Schwarze
2014-08-09 17:09 ` Paul Onyschuk
2014-08-09 21:59 ` Ingo Schwarze
2014-08-09 23:26 ` Paul Onyschuk
2014-08-10 2:46 ` Ingo Schwarze
2014-08-10 10:53 ` Paul Onyschuk
2014-08-11 3:28 ` Ingo Schwarze
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).