Discussion:
manpath change for ports ?
Baptiste Daroussin
2017-03-06 23:56:10 UTC
Permalink
Hi all,

I would like to propose a change in the localbase hier for ports

I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.

The reason is:
- /usr/local/share/man seems more consistent to me with base which have:
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.

My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)

and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for those
two, what do you think?

For the same reason I would like to allow porters to stop patching (with pathfix
or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig

Which will also remove tons of hacks from the ports tree.

What do you think?

Best regards,
Bapt
Alfred Perlstein
2017-03-07 00:40:39 UTC
Permalink
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.
My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for those
two, what do you think?
For the same reason I would like to allow porters to stop patching (with pathfix
or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig
Which will also remove tons of hacks from the ports tree.
What do you think?
Best regards,
Bapt
Yes please. Reducing the required changes to port software to FreeBSD
is a good thing.

-Alfred
Jan Beich
2017-03-07 06:29:19 UTC
Permalink
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.
Can you also move /usr/local/info to /usr/local/share/info? texinfo is
gone since 11.0-RELEASE (or r276551) but hier(7) and BSD.usr.dist still
try to encroach on GNU defaults.
Baptiste Daroussin
2017-03-07 07:27:05 UTC
Permalink
Post by Jan Beich
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.
Can you also move /usr/local/info to /usr/local/share/info? texinfo is
gone since 11.0-RELEASE (or r276551) but hier(7) and BSD.usr.dist still
try to encroach on GNU defaults.
Yes would be a good one

Best regards,
Bapt
Diane Bruce
2017-03-07 15:24:00 UTC
Permalink
Post by Jan Beich
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.
Can you also move /usr/local/info to /usr/local/share/info? texinfo is
gone since 11.0-RELEASE (or r276551) but hier(7) and BSD.usr.dist still
try to encroach on GNU defaults.
A big yes from me for both of these proposals.
--
- ***@FreeBSD.org ***@db.net http://www.db.net/~db
Renato Botelho
2017-03-07 18:26:59 UTC
Permalink
Post by Diane Bruce
Post by Jan Beich
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.
Can you also move /usr/local/info to /usr/local/share/info? texinfo is
gone since 11.0-RELEASE (or r276551) but hier(7) and BSD.usr.dist still
try to encroach on GNU defaults.
A big yes from me for both of these proposals.
+1
--
Renato Botelho
Eric van Gyzen
2017-03-07 15:51:14 UTC
Permalink
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
[...]
Post by Baptiste Daroussin
Which will also remove tons of hacks from the ports tree.
What do you think?
This sounds good to me.

I seem to recall that most(?) Linux distros used /usr/man many years
ago, but they switched to /usr/share/man, I think in the early 2000s.
If that's correct, then I consider our /usr/local/man path a historical
curiosity that should finally be changed to /usr/local/share/man.

Eric
Tijl Coosemans
2017-03-07 17:04:04 UTC
Permalink
Post by Eric van Gyzen
Post by Baptiste Daroussin
I would like to propose a change in the localbase hier for ports
[...]
Post by Baptiste Daroussin
Which will also remove tons of hacks from the ports tree.
What do you think?
This sounds good to me.
I seem to recall that most(?) Linux distros used /usr/man many years
ago, but they switched to /usr/share/man, I think in the early 2000s.
If that's correct, then I consider our /usr/local/man path a historical
curiosity that should finally be changed to /usr/local/share/man.
Yes, we used PREFIX/man because that's what software developed for
Linux used at the time.
Chris H
2017-03-07 16:52:02 UTC
Permalink
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to
patch upstream build system to install in a non usual path.
My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for
those two, what do you think?
For the same reason I would like to allow porters to stop patching (with
pathfix or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig
Which will also remove tons of hacks from the ports tree.
What do you think?
+1 please do.
I can't think of any (good) reason not to.

Thanks!

--Chris
Post by Baptiste Daroussin
Best regards,
Bapt
Dag-Erling Smørgrav
2017-03-08 15:39:50 UTC
Permalink
Post by Baptiste Daroussin
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with
at first and maybe instead of in long term.
2) plus info -> share/info as suggested by jbeich

3) plus libdata/pkgconfig -> lib/pkgconfig

These three items will ensure that "./configure --prefix=/usr/local &&
make install" will do the right thing out of the box - by changing our
definition of "the right thing" to match what the GNU autotools have
been doing for at least 15 years.

4) Remove the hardcoded library path in lang/gcc*

This makes it possible to work on software that includes both libraries
and programs while an earlier copy of the same software is already
installed. With the current state of gcc, the programs you are working
on will be linked against the version of the library that's already
installed instead of the version you just compiled, and there is nothing
you can do to prevent it. You won't notice anything if all you ever do
is "make && make install", because the new library will replace the old,
but if you try to run your program directly from the build tree, it will
use the wrong library. This can be incredibly frustrating if you're not
aware of it - imagine you're trying to fix a bug in that library and no
matter what you do, your regression test keeps failing...

DES
--
Dag-Erling Smørgrav - ***@des.no
Julian Elischer
2017-03-08 16:19:38 UTC
Permalink
Post by Dag-Erling Smørgrav
Post by Baptiste Daroussin
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with
at first and maybe instead of in long term.
2) plus info -> share/info as suggested by jbeich
3) plus libdata/pkgconfig -> lib/pkgconfig
These three items will ensure that "./configure --prefix=/usr/local &&
make install" will do the right thing out of the box - by changing our
definition of "the right thing" to match what the GNU autotools have
been doing for at least 15 years.
4) Remove the hardcoded library path in lang/gcc*
This makes it possible to work on software that includes both libraries
and programs while an earlier copy of the same software is already
installed. With the current state of gcc, the programs you are working
on will be linked against the version of the library that's already
installed instead of the version you just compiled, and there is nothing
unless you use --sysroot=...
Post by Dag-Erling Smørgrav
you can do to prevent it. You won't notice anything if all you ever do
is "make && make install", because the new library will replace the old,
but if you try to run your program directly from the build tree, it will
use the wrong library. This can be incredibly frustrating if you're not
aware of it - imagine you're trying to fix a bug in that library and no
matter what you do, your regression test keeps failing...
DES
Dag-Erling Smørgrav
2017-03-08 16:41:19 UTC
Permalink
Post by Julian Elischer
Post by Dag-Erling Smørgrav
This makes it possible to work on software that includes both
libraries and programs while an earlier copy of the same software is
already installed. With the current state of gcc, the programs you
are working on will be linked against the version of the library
that's already installed instead of the version you just compiled,
and there is nothing
unless you use --sysroot=...
Sure, if you have a copy of every single library your project depends on
in your build tree.

Is it really unreasonable to expect this to work out of the box?

DES
--
Dag-Erling Smørgrav - ***@des.no
Tijl Coosemans
2017-03-08 17:21:24 UTC
Permalink
Post by Dag-Erling Smørgrav
4) Remove the hardcoded library path in lang/gcc*
This makes it possible to work on software that includes both libraries
and programs while an earlier copy of the same software is already
installed. With the current state of gcc, the programs you are working
on will be linked against the version of the library that's already
installed instead of the version you just compiled, and there is nothing
you can do to prevent it. You won't notice anything if all you ever do
is "make && make install", because the new library will replace the old,
but if you try to run your program directly from the build tree, it will
use the wrong library. This can be incredibly frustrating if you're not
aware of it - imagine you're trying to fix a bug in that library and no
matter what you do, your regression test keeps failing...
Are you talking about gcc implicitly searching /usr/local/include and
/usr/local/lib?
Warner Losh
2017-03-08 17:31:32 UTC
Permalink
Post by Tijl Coosemans
Post by Dag-Erling Smørgrav
4) Remove the hardcoded library path in lang/gcc*
This makes it possible to work on software that includes both libraries
and programs while an earlier copy of the same software is already
installed. With the current state of gcc, the programs you are working
on will be linked against the version of the library that's already
installed instead of the version you just compiled, and there is nothing
you can do to prevent it. You won't notice anything if all you ever do
is "make && make install", because the new library will replace the old,
but if you try to run your program directly from the build tree, it will
use the wrong library. This can be incredibly frustrating if you're not
aware of it - imagine you're trying to fix a bug in that library and no
matter what you do, your regression test keeps failing...
Are you talking about gcc implicitly searching /usr/local/include and
/usr/local/lib?
That's currently inconsistent between base gcc, clang, binutils and
ports versions. I forget which ones do and which ones don't search
automatically. IMHO, they all should.

Warner
Tijl Coosemans
2017-03-08 19:49:12 UTC
Permalink
Post by Warner Losh
Post by Tijl Coosemans
Are you talking about gcc implicitly searching /usr/local/include and
/usr/local/lib?
That's currently inconsistent between base gcc, clang, binutils and
ports versions. I forget which ones do and which ones don't search
automatically.
It's only ports binutils and ports gcc that search /usr/local.
Post by Warner Losh
IMHO, they all should.
I used to think this too, but now I think it should be possible to use
any compiler to compile something from base or something that should only
depend on things from base, for testing purposes or perhaps because it
needs to be deployed on some other machine. Compilers shouldn't search
/usr/local implicitly then. It's easy enough to add -I and -L flags
(perhaps using pkg-config) but it's not easy to remove built-in -I and
-L flags.
Tijl Coosemans
2017-03-08 19:41:26 UTC
Permalink
Post by Dag-Erling Smørgrav
4) Remove the hardcoded library path in lang/gcc*
This makes it possible to work on software that includes both libraries
and programs while an earlier copy of the same software is already
installed. With the current state of gcc, the programs you are working
on will be linked against the version of the library that's already
installed instead of the version you just compiled, and there is nothing
you can do to prevent it. You won't notice anything if all you ever do
is "make && make install", because the new library will replace the old,
but if you try to run your program directly from the build tree, it will
use the wrong library. This can be incredibly frustrating if you're not
aware of it - imagine you're trying to fix a bug in that library and no
matter what you do, your regression test keeps failing...
If you want to run a program from its build directory and the program
links to a library also in the build directory then you have to run the
program with LD_LIBRARY_PATH environment variable set to the build
directory. Or, you could link the program with -rpath <builddir>, but
then you should relink it before installation. It's one of the things
libtool takes care of automatically.

If this is the problem you have then it has nothing to do with gcc. If
you're not using libtool then your program probably does not have any
rpath or runpath so it falls back on rtld/ldconfig which may find it in
/usr/local/lib.
Dag-Erling Smørgrav
2017-03-09 08:29:42 UTC
Permalink
Post by Tijl Coosemans
If you want to run a program from its build directory and the program
links to a library also in the build directory then you have to run the
program with LD_LIBRARY_PATH environment variable set to the build
directory. Or, you could link the program with -rpath <builddir>, but
then you should relink it before installation. It's one of the things
libtool takes care of automatically.
If this is the problem you have then it has nothing to do with gcc. If
you're not using libtool then your program probably does not have any
rpath or runpath so it falls back on rtld/ldconfig which may find it in
/usr/local/lib.
You are correct in theory, but I am using libtool and it doesn't work.

Here's a series of emails I wrote to the maintainer a little over six
months ago explaining the problem:

1)

| I discovered that lang/gcc48 (and presumably the other gcc ports as
| well) not only have /usr/local/include in their default include path,
| but actually place it ahead of /usr/include. This is causing me no end
| of grief with software that uses iconv, because GNU libiconv's <iconv.h>
| f*s up your namespace so the build fails unless you explicitly link with
| GNU libiconv instead of using the libc version. [...]

2)

| [...] I realized over the weekend that the
| situation is even worse than I initially thought. Basically, ports gcc
| is unusable for any other purpose than to build ports which don't
| support clang. Let me explain with a hypothetical scenario:
|
| You are developing a library which is important enough that you need to
| have the stable version installed on your development system. It is
| installed in /usr/local as usual. You've been working on fixing a bug,
| and have written a unit test which exercises the relevant code and
| verified that it can deterministically trigger the bug. You fix the bug
| and 'make check' again, all green. Then you clean out your working
| copy, re-run configure with CC=gcc and 'make check' again. Your tests
| fail.
|
| What happened is that when you built your code with gcc, the tests were
| linked and run with the stable version of the library, where the bug is
| not fixed. You can build with LDFLAGS=-L$(top_builddir)/lib, you can
| even specify the full path to the library in LDADD for each individual
| test, it doesn't matter. It will *always* pick the installed version
| first. The only way to get your tests to pass is to not have the
| library installed.
|
| Real-world example - a 10.3 system with upstream OpenPAM installed
| because it uses OpenPAM's OATH implementation:
|
| with base clang:
|
| ***@desk ~/src/openpam/trunk% libtool exec ldd ./t/t_openpam_dispatch
| /home/des/src/openpam/trunk/t/.libs/t_openpam_dispatch:
| libpam.so.2 => /home/des/src/openpam/trunk/lib/libpam/.libs/libpam.so.2 (0x800822000)
| liboath.so.2 => /home/des/src/openpam/trunk/lib/liboath/.libs/liboath.so.2 (0x800a34000)
| libcrypto.so.7 => /lib/libcrypto.so.7 (0x800c39000)
| libc.so.7 => /lib/libc.so.7 (0x80102f000)
|
| with lang/gcc:
|
| ***@desk ~/src/openpam/trunk% pkg which =gcc
| /usr/local/bin/gcc was installed by package gcc-4.8.5_2
| ***@desk ~/src/openpam/trunk% libtool exec ldd ./t/t_openpam_dispatch
| /home/des/src/openpam/trunk/t/.libs/t_openpam_dispatch:
| libpam.so.2 => /usr/local/lib/libpam.so.2 (0x800822000)
| liboath.so.2 => /usr/local/lib/liboath.so.2 (0x800a34000)
| libcrypto.so.7 => /lib/libcrypto.so.7 (0x800c39000)
| libc.so.7 => /lib/libc.so.7 (0x80102f000)
| libcrypto.so.8 => /usr/local/lib/libcrypto.so.8 (0x8013dc000)
| libthr.so.3 => /lib/libthr.so.3 (0x8017e9000)
|
| (and don't ask me why the gcc version is linked with two different
| versions of libcrypto!)

3)

| I honestly thought this was a recent change, but I realize now that the
| recent change is that I switched from developing on systems that still
| had gcc in base (without /usr/local in the search path) to systems that
| don't, and therefore use gcc from ports.
|
| The correct solution, in my opinion, is to remove /usr/local from all
| search paths. There is no need for it, even for ports, because most
| ports add /usr/local to CPPFLAGS and LDFLAGS, either explicitly or
| implicitly (by passing --prefix=${LOCALBASE} to the configure script).
| If there are gcc-only ports which *don't* do it, they can easily be
| fixed.
|
| I initially thought that merely changing the library search order would
| be sufficient, but apparently gcc somehow forces /usr/local/lib to take
| precedence even over ${LD_LIBRARY_PATH}, which is what causes my unit
| tests to fail. Here is an example from another project where I modified
| the libtool wrapper to show its environment and run ldd before executing
| the binary:
|
| ***@desk ~/src/cryb-to% ./t/t_core
| PATH=/home/des/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
| LD_LIBRARY_PATH=/home/des/src/cryb-to/lib/test/.libs:/home/des/src/cryb-to/lib/core/.libs
| /home/des/src/cryb-to/t/.libs/t_core:
| libcryb-test.so.0 => /usr/local/lib/libcryb-test.so.0 (0x80081f000)
| libcryb-core.so.0 => /usr/local/lib/libcryb-core.so.0 (0x800a26000)
| libc.so.7 => /lib/libc.so.7 (0x800c2a000)
| 1..2
| not ok 1 - version
| ok 2 - no memory leaked
|
| This is a skeleton test which only verifies that the library it's linked
| with has the same version as the one it was compiled with. Here's the
| same test, with the same modifications, built with clang:
|
| ***@desk ~/src/cryb-to% ./t/t_core
| PATH=/home/des/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
| LD_LIBRARY_PATH=/home/des/src/cryb-to/lib/test/.libs:/home/des/src/cryb-to/lib/core/.libs
| /home/des/src/cryb-to/t/.libs/t_core:
| libcryb-test.so.0 => /home/des/src/cryb-to/lib/test/.libs/libcryb-test.so.0 (0x80081f000)
| libcryb-core.so.0 => /home/des/src/cryb-to/lib/core/.libs/libcryb-core.so.0 (0x800a27000)
| libc.so.7 => /lib/libc.so.7 (0x800c2c000)
| 1..2
| ok 1 - version
| ok 2 - no memory leaked
|
| Please understand that the *only* way I can think of to work around this
| is to set --nostdinc and --nostdlib and explicitly pass the correct
| search path and list of libraries (-lgcc -lc) to gcc, and even then I'm
| not sure it would work. I don't find that reasonable at all.
|
| Note that I am not sure whether this problem is limited to gcc or if ld
| is also involved. The iconv problem which I originally reported is
| caused by gcc picking up iconv.h from /usr/local/include instead of over
| /usr/include, but I'm not sure whether the linking problem is caused by
| gcc passing its search path on to ld, or to ld having its own incorrect
| search path. I tried explicitly setting LD=/usr/bin/ld, but that
| doesn't make any difference since libtool uses gcc as a linker instead
| of calling ${LD} directly.

DES
--
Dag-Erling Smørgrav - ***@des.no
Tijl Coosemans
2017-03-09 11:35:32 UTC
Permalink
Post by Dag-Erling Smørgrav
Post by Tijl Coosemans
If you want to run a program from its build directory and the program
links to a library also in the build directory then you have to run the
program with LD_LIBRARY_PATH environment variable set to the build
directory. Or, you could link the program with -rpath <builddir>, but
then you should relink it before installation. It's one of the things
libtool takes care of automatically.
If this is the problem you have then it has nothing to do with gcc. If
you're not using libtool then your program probably does not have any
rpath or runpath so it falls back on rtld/ldconfig which may find it in
/usr/local/lib.
You are correct in theory, but I am using libtool and it doesn't work.
Here's a series of emails I wrote to the maintainer a little over six
1)
| I discovered that lang/gcc48 (and presumably the other gcc ports as
| well) not only have /usr/local/include in their default include path,
| but actually place it ahead of /usr/include. This is causing me no end
| of grief with software that uses iconv, because GNU libiconv's <iconv.h>
| f*s up your namespace so the build fails unless you explicitly link with
| GNU libiconv instead of using the libc version. [...]
Right, to use libc iconv(3) with -I/usr/local/include and GNU libiconv
installed you have to compile with -DLIBICONV_PLUG.
Post by Dag-Erling Smørgrav
2)
| [...] I realized over the weekend that the
| situation is even worse than I initially thought. Basically, ports gcc
| is unusable for any other purpose than to build ports which don't
|
| You are developing a library which is important enough that you need to
| have the stable version installed on your development system. It is
| installed in /usr/local as usual. You've been working on fixing a bug,
| and have written a unit test which exercises the relevant code and
| verified that it can deterministically trigger the bug. You fix the bug
| and 'make check' again, all green. Then you clean out your working
| copy, re-run configure with CC=gcc and 'make check' again. Your tests
| fail.
|
| What happened is that when you built your code with gcc, the tests were
| linked and run with the stable version of the library, where the bug is
| not fixed. You can build with LDFLAGS=-L$(top_builddir)/lib, you can
| even specify the full path to the library in LDADD for each individual
| test, it doesn't matter. It will *always* pick the installed version
| first. The only way to get your tests to pass is to not have the
| library installed.
|
| Real-world example - a 10.3 system with upstream OpenPAM installed
|
|
| libpam.so.2 => /home/des/src/openpam/trunk/lib/libpam/.libs/libpam.so.2 (0x800822000)
| liboath.so.2 => /home/des/src/openpam/trunk/lib/liboath/.libs/liboath.so.2 (0x800a34000)
| libcrypto.so.7 => /lib/libcrypto.so.7 (0x800c39000)
| libc.so.7 => /lib/libc.so.7 (0x80102f000)
|
|
| /usr/local/bin/gcc was installed by package gcc-4.8.5_2
| libpam.so.2 => /usr/local/lib/libpam.so.2 (0x800822000)
| liboath.so.2 => /usr/local/lib/liboath.so.2 (0x800a34000)
| libcrypto.so.7 => /lib/libcrypto.so.7 (0x800c39000)
| libc.so.7 => /lib/libc.so.7 (0x80102f000)
| libcrypto.so.8 => /usr/local/lib/libcrypto.so.8 (0x8013dc000)
| libthr.so.3 => /lib/libthr.so.3 (0x8017e9000)
|
| (and don't ask me why the gcc version is linked with two different
| versions of libcrypto!)
Here you can probably get things working by adding -Wl,--enable-new-dtags
to LDFLAGS in the configure script (or to AM_LDFLAGS in Makefile.am).
Clang runs ld(1) with this flag by default, gcc does not. With clang the
program has DT_RUNPATH /usr/local/lib, which rtld(1) checks after
LD_LIBRARY_PATH, and with gcc the program has DT_RPATH /usr/local/lib which
rtld checks *before* LD_LIBRARY_PATH.

(The gold(1) linker also enables this flag by default.)

The reason it links to libcrypto twice is because liboath.so.2 pulls in
libcrypto.so.7 while gcc has linked libpam with libcrypto.so.8 because of
the implicit -L/usr/local/lib.
Post by Dag-Erling Smørgrav
3)
| I honestly thought this was a recent change, but I realize now that the
| recent change is that I switched from developing on systems that still
| had gcc in base (without /usr/local in the search path) to systems that
| don't, and therefore use gcc from ports.
|
| The correct solution, in my opinion, is to remove /usr/local from all
| search paths. There is no need for it, even for ports, because most
| ports add /usr/local to CPPFLAGS and LDFLAGS, either explicitly or
| implicitly (by passing --prefix=${LOCALBASE} to the configure script).
| If there are gcc-only ports which *don't* do it, they can easily be
| fixed.
I agree.
Post by Dag-Erling Smørgrav
| I initially thought that merely changing the library search order would
| be sufficient, but apparently gcc somehow forces /usr/local/lib to take
| precedence even over ${LD_LIBRARY_PATH}, which is what causes my unit
| tests to fail. Here is an example from another project where I modified
| the libtool wrapper to show its environment and run ldd before executing
|
| PATH=/home/des/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
| LD_LIBRARY_PATH=/home/des/src/cryb-to/lib/test/.libs:/home/des/src/cryb-to/lib/core/.libs
| libcryb-test.so.0 => /usr/local/lib/libcryb-test.so.0 (0x80081f000)
| libcryb-core.so.0 => /usr/local/lib/libcryb-core.so.0 (0x800a26000)
| libc.so.7 => /lib/libc.so.7 (0x800c2a000)
| 1..2
| not ok 1 - version
| ok 2 - no memory leaked
|
| This is a skeleton test which only verifies that the library it's linked
| with has the same version as the one it was compiled with. Here's the
|
| PATH=/home/des/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
| LD_LIBRARY_PATH=/home/des/src/cryb-to/lib/test/.libs:/home/des/src/cryb-to/lib/core/.libs
| libcryb-test.so.0 => /home/des/src/cryb-to/lib/test/.libs/libcryb-test.so.0 (0x80081f000)
| libcryb-core.so.0 => /home/des/src/cryb-to/lib/core/.libs/libcryb-core.so.0 (0x800a27000)
| libc.so.7 => /lib/libc.so.7 (0x800c2c000)
| 1..2
| ok 1 - version
| ok 2 - no memory leaked
|
| Please understand that the *only* way I can think of to work around this
| is to set --nostdinc and --nostdlib and explicitly pass the correct
| search path and list of libraries (-lgcc -lc) to gcc, and even then I'm
| not sure it would work. I don't find that reasonable at all.
|
| Note that I am not sure whether this problem is limited to gcc or if ld
| is also involved. The iconv problem which I originally reported is
| caused by gcc picking up iconv.h from /usr/local/include instead of over
| /usr/include, but I'm not sure whether the linking problem is caused by
| gcc passing its search path on to ld, or to ld having its own incorrect
| search path. I tried explicitly setting LD=/usr/bin/ld, but that
| doesn't make any difference since libtool uses gcc as a linker instead
| of calling ${LD} directly.
Note that -rpath /usr/local/lib isn't added by gcc but by libtool
because it assumes rtld will not search that directory automatically.
If you run './configure CC=gcc --prefix=/usr && make check' the tests
should succeed (without --enable-new-dtags) because -rpath isn't used
then.

You can examine rpath differences with 'objdump -p program | grep PATH'.
Dag-Erling Smørgrav
2017-03-09 11:55:20 UTC
Permalink
Post by Tijl Coosemans
Right, to use libc iconv(3) with -I/usr/local/include and GNU libiconv
installed you have to compile with -DLIBICONV_PLUG.
I didn't have -I/usr/local/include, gcc forced it on me.

DES
--
Dag-Erling Smørgrav - ***@des.no
Benjamin Kaduk
2017-03-10 01:43:05 UTC
Permalink
Post by Tijl Coosemans
Note that -rpath /usr/local/lib isn't added by gcc but by libtool
because it assumes rtld will not search that directory automatically.
If you run './configure CC=gcc --prefix=/usr && make check' the tests
should succeed (without --enable-new-dtags) because -rpath isn't used
then.
Sounds like a bug in the libtool packaging, then?

-Ben
Tijl Coosemans
2017-03-10 11:38:47 UTC
Permalink
Post by Benjamin Kaduk
Post by Tijl Coosemans
Note that -rpath /usr/local/lib isn't added by gcc but by libtool
because it assumes rtld will not search that directory automatically.
If you run './configure CC=gcc --prefix=/usr && make check' the tests
should succeed (without --enable-new-dtags) because -rpath isn't used
then.
Sounds like a bug in the libtool packaging, then?
Rtld only searches /lib and /usr/lib. It also searches the ldconfig
hints file and /usr/local/lib is there by default (ldconfig_paths in
/etc/defaults/rc.conf), but users are allowed to change that, for
instance when they install ports in another location than /usr/local.

Arguably, because our default compiler links with --enable-new-dtags,
gcc should as well, but because of the different run-time semantics of
DT_RPATH and DT_RUNPATH this is a potential minefield. Upstream
binutils changed the default in ld once and this was quickly reverted.
Dimitry Andric
2017-03-09 12:29:26 UTC
Permalink
On 9 Mar 2017, at 09:29, Dag-Erling SmÞrgrav <***@des.no> wrote:
...
Post by Dag-Erling Smørgrav
1)
| I discovered that lang/gcc48 (and presumably the other gcc ports as
| well) not only have /usr/local/include in their default include path,
| but actually place it ahead of /usr/include. This is causing me no end
| of grief with software that uses iconv, because GNU libiconv's <iconv.h>
| f*s up your namespace so the build fails unless you explicitly link with
| GNU libiconv instead of using the libc version. [...]
2)
| [...] I realized over the weekend that the
| situation is even worse than I initially thought. Basically, ports gcc
| is unusable for any other purpose than to build ports which don't
|
| You are developing a library which is important enough that you need to
| have the stable version installed on your development system. It is
| installed in /usr/local as usual. You've been working on fixing a bug,
| and have written a unit test which exercises the relevant code and
| verified that it can deterministically trigger the bug. You fix the bug
| and 'make check' again, all green. Then you clean out your working
| copy, re-run configure with CC=gcc and 'make check' again. Your tests
| fail.
|
| What happened is that when you built your code with gcc, the tests were
| linked and run with the stable version of the library, where the bug is
| not fixed. You can build with LDFLAGS=-L$(top_builddir)/lib, you can
| even specify the full path to the library in LDADD for each individual
| test, it doesn't matter. It will *always* pick the installed version
| first. The only way to get your tests to pass is to not have the
| library installed.
Please pin this email for re-use the next time a discussion is started
about adding /usr/local to the default include and library paths for the
base system compiler... It's been more than a year now, so I expect
it to be regurgitated any time soon. :)

-Dimitry
John Baldwin
2017-03-09 18:20:48 UTC
Permalink
Post by Dag-Erling Smørgrav
Post by Baptiste Daroussin
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with
at first and maybe instead of in long term.
2) plus info -> share/info as suggested by jbeich
3) plus libdata/pkgconfig -> lib/pkgconfig
These three items will ensure that "./configure --prefix=/usr/local &&
make install" will do the right thing out of the box - by changing our
definition of "the right thing" to match what the GNU autotools have
been doing for at least 15 years.
4) Remove the hardcoded library path in lang/gcc*
This makes it possible to work on software that includes both libraries
and programs while an earlier copy of the same software is already
installed. With the current state of gcc, the programs you are working
on will be linked against the version of the library that's already
installed instead of the version you just compiled, and there is nothing
you can do to prevent it. You won't notice anything if all you ever do
is "make && make install", because the new library will replace the old,
but if you try to run your program directly from the build tree, it will
use the wrong library. This can be incredibly frustrating if you're not
aware of it - imagine you're trying to fix a bug in that library and no
matter what you do, your regression test keeps failing...
+1 on all these. I think that ports compilers should not have
/usr/local/include or /usr/local/lib as implicit paths either as others
have stated.

I wouldn't even mind if we had both /usr/local/man and /usr/local/share/man
so long as our default MANPATH included both if that means applying fewer
patches to ports.
--
John Baldwin
Dag-Erling Smørgrav
2017-03-10 09:50:39 UTC
Permalink
Post by John Baldwin
I wouldn't even mind if we had both /usr/local/man and /usr/local/share/man
so long as our default MANPATH included both if that means applying fewer
patches to ports.
The default MANPATH is constructed dynamically from PATH:

1. From each component of the user's PATH for the first of:
- pathname/man
- pathname/MAN
- If pathname ends with /bin: pathname/../man
Note: Special logic exists to make /bin and /usr/bin look in
/usr/share/man for manual files.

If we change this to:

1. From each component of the user's PATH for the first of:
- pathname/man
- pathname/MAN
- If pathname ends with /bin or /sbin: pathname/../man and
pathname/../share/man

we wouldn't need any "special logic", but I really don't like the idea
of having different ports installing man pages in different locations.

DES
--
Dag-Erling Smørgrav - ***@des.no
Tijl Coosemans
2017-03-10 16:03:08 UTC
Permalink
Post by Dag-Erling Smørgrav
Post by John Baldwin
I wouldn't even mind if we had both /usr/local/man and /usr/local/share/man
so long as our default MANPATH included both if that means applying fewer
patches to ports.
- pathname/man
- pathname/MAN
- If pathname ends with /bin: pathname/../man
Note: Special logic exists to make /bin and /usr/bin look in
/usr/share/man for manual files.
- pathname/man
- pathname/MAN
- If pathname ends with /bin or /sbin: pathname/../man and
pathname/../share/man
we wouldn't need any "special logic", but I really don't like the idea
of having different ports installing man pages in different locations.
I grepped the ports tree and found nearly 5700 ports. That's a lot to
change all at once but it may be doable. It depends on how much fallout
there is in the exp-run.

Ports are installed into a staging area now where files can be moved to
another location. So a post-install make target could be added that
moves the man pages to share/man if necessary (and prints a warning to
maintainers in that case). Then all pkg-plist and PLIST_FILES need to
be modified (with sed) and PORTREVISION needs to be bumped (also
scripted).

The same could be done to move info and pkgconfig files.
Steve Kargl
2017-03-10 16:38:30 UTC
Permalink
Post by Tijl Coosemans
Post by Dag-Erling Smørgrav
Post by John Baldwin
I wouldn't even mind if we had both /usr/local/man and /usr/local/share/man
so long as our default MANPATH included both if that means applying fewer
patches to ports.
- pathname/man
- pathname/MAN
- If pathname ends with /bin: pathname/../man
Note: Special logic exists to make /bin and /usr/bin look in
/usr/share/man for manual files.
- pathname/man
- pathname/MAN
- If pathname ends with /bin or /sbin: pathname/../man and
pathname/../share/man
we wouldn't need any "special logic", but I really don't like the idea
of having different ports installing man pages in different locations.
I grepped the ports tree and found nearly 5700 ports. That's a lot to
change all at once but it may be doable. It depends on how much fallout
there is in the exp-run.
ln -s /usr/local/share/man /usr/local/man

should cause the manpages to land where you want. Then port
maintainers can sweep ports/ to allow for the removal of symlink.

On a side note, it is unfortunate that one cannot set the
environmental variable MANPATH as documented without either
a mysterious vanishing of man pages or an idiotic warning
appear with each invocation of man, apropos, ...
--
Steve
20161221

Tijl Coosemans
2017-03-10 17:32:29 UTC
Permalink
Post by Steve Kargl
Post by Tijl Coosemans
Post by Dag-Erling Smørgrav
Post by John Baldwin
I wouldn't even mind if we had both /usr/local/man and /usr/local/share/man
so long as our default MANPATH included both if that means applying fewer
patches to ports.
- pathname/man
- pathname/MAN
- If pathname ends with /bin: pathname/../man
Note: Special logic exists to make /bin and /usr/bin look in
/usr/share/man for manual files.
- pathname/man
- pathname/MAN
- If pathname ends with /bin or /sbin: pathname/../man and
pathname/../share/man
we wouldn't need any "special logic", but I really don't like the idea
of having different ports installing man pages in different locations.
I grepped the ports tree and found nearly 5700 ports. That's a lot to
change all at once but it may be doable. It depends on how much fallout
there is in the exp-run.
ln -s /usr/local/share/man /usr/local/man
should cause the manpages to land where you want. Then port
maintainers can sweep ports/ to allow for the removal of symlink.
Yeah, I had to deal with installing through symlinks in the Linux ports
because bin, lib and sbin have become symlinks there now. There are
complications with that. FreeBSD releases have a bug in libarchive that
causes problems when extracting hardlinks through symlinks. Recent
versions of pkg have workarounds for that but not everybody runs it yet.
Before you can create the symlink you have to move the existing
directory, but what if the new directory already exists? Will you
overwrite files? Commands like pkg-which and pkg-delete only work
through the symlink because the new paths are not in the pkg database.
Packages that don't know about the symlink may try to create it as a
directory or remove it as a directory on uninstall. I ended up avoiding
it at all costs in the Linux ports by moving files around in the staging
area if necessary.
Baptiste Daroussin
2017-03-11 07:13:05 UTC
Permalink
Post by Dag-Erling Smørgrav
Post by John Baldwin
I wouldn't even mind if we had both /usr/local/man and /usr/local/share/man
so long as our default MANPATH included both if that means applying fewer
patches to ports.
- pathname/man
- pathname/MAN
- If pathname ends with /bin: pathname/../man
Note: Special logic exists to make /bin and /usr/bin look in
/usr/share/man for manual files.
- pathname/man
- pathname/MAN
- If pathname ends with /bin or /sbin: pathname/../man and
pathname/../share/man
Which I have just done :)

Bapt
Jan Beich
2017-03-08 19:03:51 UTC
Permalink
Post by Dag-Erling Smørgrav
Post by Baptiste Daroussin
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with
at first and maybe instead of in long term.
2) plus info -> share/info as suggested by jbeich
3) plus libdata/pkgconfig -> lib/pkgconfig
These three items will ensure that "./configure --prefix=/usr/local &&
make install" will do the right thing out of the box - by changing our
definition of "the right thing" to match what the GNU autotools have
been doing for at least 15 years.
/usr/local is *the* default location according to GNU[1] and reinforced
by FHS[2] which want it "safe from being overwritten when the system
software is updated". Not on FreeBSD where site-local stuff like your
example above and ports/packages trample on each other. NetBSD avoided
the issue by moving /usr/local to /usr/pkg.

[1] https://www.gnu.org/prep/standards/html_node/Directory-Variables.html
[2] http://www.pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Dag-Erling Smørgrav
2017-03-09 08:32:36 UTC
Permalink
Post by Jan Beich
/usr/local is *the* default location according to GNU[1] and reinforced
by FHS[2] which want it "safe from being overwritten when the system
software is updated". Not on FreeBSD where site-local stuff like your
example above and ports/packages trample on each other. NetBSD avoided
the issue by moving /usr/local to /usr/pkg.
All correct, but I don't really see the relevance...

DE
--
Dag-Erling Smørgrav - ***@des.no
Anton Yuzhaninov
2017-03-09 16:46:35 UTC
Permalink
Post by Baptiste Daroussin
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.
1. During transition period having two trees for man pages -
/usr/local/share/man and /usr/share/man will be additional headache.

2. When /usr/local/man will be removed some ports should be patched to
use /usr/local/share/man instead /usr/local/man and we almost back to
square one (with fewer ports to patch).

3. Patching man path is trivial comparing other challenges during
porting software to FreeBSD. For me current situation with man path is
not a big issue.

4. Linux Filesystem Hierarchy Standard has

/usr/share/man
but
/usr/local/man

Given all above I don't think this change is worth benefits it will have.

Also when/if you will add /usr/local/share/man, please submit patch to
cmake:
https://gitlab.kitware.com/cmake/cmake/blob/master/Modules/GNUInstallDirs.cmake#L273
Currently cmake defines CMAKE_INSTALL_MANDIR to $PREFIX/man on FreeBSD.
Tijl Coosemans
2017-03-10 16:30:20 UTC
Permalink
Post by Baptiste Daroussin
My proposal is to add to the manpath /usr/local/share/man in default
man(1) command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that
for those two, what do you think?
I don't think we can expect users to install the latest errata or to
run the latest head or stable, so a port would be needed. Could the
pkg port be used for this?
Koop Mast
2017-04-20 21:18:14 UTC
Permalink
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
  /usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
  upstream build system to install in a non usual path.
My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for those
two, what do you think?
For the same reason I would like to allow porters to stop patching (with pathfix
or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig
Which will also remove tons of hacks from the ports tree.
What do you think?
Best regards,
Bapt
Hello,

I recently committed the USES for the meson build system to ports. This
USES configures the meson build system with some default variables
which includes the location of the man pages. This setting is just a
flag to the meson command so it easy to change.

Meson also handles the generation and installation of pkg-config files
that a port wants. The problem is that this is handled by the script
itself and there is no way to configure it, so we need to hack the
meson port to change it from lib/pkg-config to libdata/pkg-config like
we currently are using. (1) Or add a hack to meson.mk to move the pkg-
config to the right location (evil++ imho).

My point I want to make is that currently there is only 1 port build
via the meson system (graphics/graphene). Should we change man/pkg-
config file locations now, it very easy. If we want to change them
later we will need to mass bump every meson build port. It is important
to note that GStreamer and GNOME are moving over to using meson instead
of autotools and that Wayland, Xorg en Mesa are exploring want is
needed to make the switch. So I think it important that the decision
what to do is done now and that we stick with it.

Reading the rest of the thread it seems nobody is really against the
proposed change of man and pkg-config path's. So how does one submit a
policy change like this? I'm also not sure I'm the right person to push
this, I just got back from a break and I don't want to really deal with
something super high profile right away.

-Koop

(1) I would like to see lib/pkg-config back in the search path of
pkgconf since that means I don't have to do a crash course python
programming.
Baptiste Daroussin
2017-04-20 21:21:53 UTC
Permalink
Post by Koop Mast
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
  /usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
  upstream build system to install in a non usual path.
My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for those
two, what do you think?
For the same reason I would like to allow porters to stop patching (with pathfix
or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig
Which will also remove tons of hacks from the ports tree.
What do you think?
Best regards,
Bapt
Hello,
I recently committed the USES for the meson build system to ports. This
USES configures the meson build system with some default variables
which includes the location of the man pages. This setting is just a
flag to the meson command so it easy to change.
Meson also handles the generation and installation of pkg-config files
that a port wants. The problem is that this is handled by the script
itself and there is no way to configure it, so we need to hack the
meson port to change it from lib/pkg-config to libdata/pkg-config like
we currently are using. (1) Or add a hack to meson.mk to move the pkg-
config to the right location (evil++ imho).
My point I want to make is that currently there is only 1 port build
via the meson system (graphics/graphene). Should we change man/pkg-
config file locations now, it very easy. If we want to change them
later we will need to mass bump every meson build port. It is important
to note that GStreamer and GNOME are moving over to using meson instead
of autotools and that Wayland, Xorg en Mesa are exploring want is
needed to make the switch. So I think it important that the decision
what to do is done now and that we stick with it.
Reading the rest of the thread it seems nobody is really against the
proposed change of man and pkg-config path's. So how does one submit a
policy change like this? I'm also not sure I'm the right person to push
this, I just got back from a break and I don't want to really deal with
something super high profile right away.
-Koop
(1) I would like to see lib/pkg-config back in the search path of
pkgconf since that means I don't have to do a crash course python
programming.
Would be nice is portmgr can step on this, let's reduce this discussion for now
on pkgconf.

Best regards,
Bapt
Mathieu Arnold
2017-04-20 22:13:52 UTC
Permalink
Post by Baptiste Daroussin
Post by Koop Mast
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.
My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for those
two, what do you think?
For the same reason I would like to allow porters to stop patching (with pathfix
or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig
Which will also remove tons of hacks from the ports tree.
What do you think?
Best regards,
Bapt
Hello,
I recently committed the USES for the meson build system to ports. This
USES configures the meson build system with some default variables
which includes the location of the man pages. This setting is just a
flag to the meson command so it easy to change.
Meson also handles the generation and installation of pkg-config files
that a port wants. The problem is that this is handled by the script
itself and there is no way to configure it, so we need to hack the
meson port to change it from lib/pkg-config to libdata/pkg-config like
we currently are using. (1) Or add a hack to meson.mk to move the pkg-
config to the right location (evil++ imho).
My point I want to make is that currently there is only 1 port build
via the meson system (graphics/graphene). Should we change man/pkg-
config file locations now, it very easy. If we want to change them
later we will need to mass bump every meson build port. It is important
to note that GStreamer and GNOME are moving over to using meson instead
of autotools and that Wayland, Xorg en Mesa are exploring want is
needed to make the switch. So I think it important that the decision
what to do is done now and that we stick with it.
Reading the rest of the thread it seems nobody is really against the
proposed change of man and pkg-config path's. So how does one submit a
policy change like this? I'm also not sure I'm the right person to push
this, I just got back from a break and I don't want to really deal with
something super high profile right away.
-Koop
(1) I would like to see lib/pkg-config back in the search path of
pkgconf since that means I don't have to do a crash course python
programming.
Would be nice is portmgr can step on this, let's reduce this discussion for now
on pkgconf.
I am waiting on an exp-run to fix this once and for all.

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218067

When that is committed, anything can be added to the path pkgconfig
searches, ports will always install it in the right place.
--
Mathieu Arnold
Baptiste Daroussin
2017-04-20 22:16:31 UTC
Permalink
Post by Mathieu Arnold
Post by Baptiste Daroussin
Post by Koop Mast
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.
My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for those
two, what do you think?
For the same reason I would like to allow porters to stop patching (with pathfix
or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig
Which will also remove tons of hacks from the ports tree.
What do you think?
Best regards,
Bapt
Hello,
I recently committed the USES for the meson build system to ports. This
USES configures the meson build system with some default variables
which includes the location of the man pages. This setting is just a
flag to the meson command so it easy to change.
Meson also handles the generation and installation of pkg-config files
that a port wants. The problem is that this is handled by the script
itself and there is no way to configure it, so we need to hack the
meson port to change it from lib/pkg-config to libdata/pkg-config like
we currently are using. (1) Or add a hack to meson.mk to move the pkg-
config to the right location (evil++ imho).
My point I want to make is that currently there is only 1 port build
via the meson system (graphics/graphene). Should we change man/pkg-
config file locations now, it very easy. If we want to change them
later we will need to mass bump every meson build port. It is important
to note that GStreamer and GNOME are moving over to using meson instead
of autotools and that Wayland, Xorg en Mesa are exploring want is
needed to make the switch. So I think it important that the decision
what to do is done now and that we stick with it.
Reading the rest of the thread it seems nobody is really against the
proposed change of man and pkg-config path's. So how does one submit a
policy change like this? I'm also not sure I'm the right person to push
this, I just got back from a break and I don't want to really deal with
something super high profile right away.
-Koop
(1) I would like to see lib/pkg-config back in the search path of
pkgconf since that means I don't have to do a crash course python
programming.
Would be nice is portmgr can step on this, let's reduce this discussion for now
on pkgconf.
I am waiting on an exp-run to fix this once and for all.
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218067
When that is committed, anything can be added to the path pkgconfig
searches, ports will always install it in the right place.
Sorry but why? why not moving libdata/pkgconfig to lib/pkgconfig? what is the
rationale?

Bapt
Mathieu Arnold
2017-04-20 22:18:53 UTC
Permalink
Post by Baptiste Daroussin
Post by Mathieu Arnold
Post by Baptiste Daroussin
Post by Koop Mast
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we need to patch
upstream build system to install in a non usual path.
My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for those
two, what do you think?
For the same reason I would like to allow porters to stop patching (with pathfix
or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig
Which will also remove tons of hacks from the ports tree.
What do you think?
Best regards,
Bapt
Hello,
I recently committed the USES for the meson build system to ports. This
USES configures the meson build system with some default variables
which includes the location of the man pages. This setting is just a
flag to the meson command so it easy to change.
Meson also handles the generation and installation of pkg-config files
that a port wants. The problem is that this is handled by the script
itself and there is no way to configure it, so we need to hack the
meson port to change it from lib/pkg-config to libdata/pkg-config like
we currently are using. (1) Or add a hack to meson.mk to move the pkg-
config to the right location (evil++ imho).
My point I want to make is that currently there is only 1 port build
via the meson system (graphics/graphene). Should we change man/pkg-
config file locations now, it very easy. If we want to change them
later we will need to mass bump every meson build port. It is important
to note that GStreamer and GNOME are moving over to using meson instead
of autotools and that Wayland, Xorg en Mesa are exploring want is
needed to make the switch. So I think it important that the decision
what to do is done now and that we stick with it.
Reading the rest of the thread it seems nobody is really against the
proposed change of man and pkg-config path's. So how does one submit a
policy change like this? I'm also not sure I'm the right person to push
this, I just got back from a break and I don't want to really deal with
something super high profile right away.
-Koop
(1) I would like to see lib/pkg-config back in the search path of
pkgconf since that means I don't have to do a crash course python
programming.
Would be nice is portmgr can step on this, let's reduce this discussion for now
on pkgconf.
I am waiting on an exp-run to fix this once and for all.
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218067
When that is committed, anything can be added to the path pkgconfig
searches, ports will always install it in the right place.
Sorry but why? why not moving libdata/pkgconfig to lib/pkgconfig? what is the
rationale?
Because a lot of build software know that on FreeBSD, the .pc file go in
libdata/pkgconfig. If we move to some other place, we'll have a
USES=pathfixmore for the next 25 years until everyone understands we
moved it some place else.
--
Mathieu Arnold
Baptiste Daroussin
2017-04-20 22:21:54 UTC
Permalink
Post by Mathieu Arnold
Post by Baptiste Daroussin
Post by Mathieu Arnold
Post by Baptiste Daroussin
Post by Koop Mast
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we
need to patch
upstream build system to install in a non usual path.
My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for those
two, what do you think?
For the same reason I would like to allow porters to stop patching
(with pathfix
or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig
Which will also remove tons of hacks from the ports tree.
What do you think?
Best regards,
Bapt
Hello,
I recently committed the USES for the meson build system to ports. This
USES configures the meson build system with some default variables
which includes the location of the man pages. This setting is just a
flag to the meson command so it easy to change.
Meson also handles the generation and installation of pkg-config files
that a port wants. The problem is that this is handled by the script
itself and there is no way to configure it, so we need to hack the
meson port to change it from lib/pkg-config to libdata/pkg-config like
we currently are using. (1) Or add a hack to meson.mk to move the pkg-
config to the right location (evil++ imho).
My point I want to make is that currently there is only 1 port build
via the meson system (graphics/graphene). Should we change man/pkg-
config file locations now, it very easy. If we want to change them
later we will need to mass bump every meson build port. It is important
to note that GStreamer and GNOME are moving over to using meson instead
of autotools and that Wayland, Xorg en Mesa are exploring want is
needed to make the switch. So I think it important that the decision
what to do is done now and that we stick with it.
Reading the rest of the thread it seems nobody is really against the
proposed change of man and pkg-config path's. So how does one submit a
policy change like this? I'm also not sure I'm the right person to push
this, I just got back from a break and I don't want to really deal with
something super high profile right away.
-Koop
(1) I would like to see lib/pkg-config back in the search path of
pkgconf since that means I don't have to do a crash course python
programming.
Would be nice is portmgr can step on this, let's reduce this discussion for now
on pkgconf.
I am waiting on an exp-run to fix this once and for all.
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218067
When that is committed, anything can be added to the path pkgconfig
searches, ports will always install it in the right place.
Sorry but why? why not moving libdata/pkgconfig to lib/pkgconfig? what is the
rationale?
Because a lot of build software know that on FreeBSD, the .pc file go in
libdata/pkgconfig. If we move to some other place, we'll have a
USES=pathfixmore for the next 25 years until everyone understands we
moved it some place else.
ok a point for you there :)

Bapt
Mathieu Arnold
2017-04-20 22:29:15 UTC
Permalink
Post by Baptiste Daroussin
Post by Mathieu Arnold
Post by Baptiste Daroussin
Post by Mathieu Arnold
Post by Baptiste Daroussin
Post by Koop Mast
Post by Baptiste Daroussin
Hi all,
I would like to propose a change in the localbase hier for ports
I think we should add /usr/local/share/man in the manpath along with at first
and maybe instead of in long term.
/usr/share/man
- It will remove lots of patches from the ports tree where were we
need to patch
upstream build system to install in a non usual path.
My proposal is to add to the manpath /usr/local/share/man in default man(1)
command in FreeBSD 12 (MFCed to 11-STABLE)
and either provide an errata for 11.0/10.3 or a
/usr/local/etc/man.d/something.conf via a port or something like that for those
two, what do you think?
For the same reason I would like to allow porters to stop patching
(with pathfix
or anything else) the path for pkgconfig files and allow
/usr/local/lib/pkgconfig along with the current
/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig
Which will also remove tons of hacks from the ports tree.
What do you think?
Best regards,
Bapt
Hello,
I recently committed the USES for the meson build system to ports. This
USES configures the meson build system with some default variables
which includes the location of the man pages. This setting is just a
flag to the meson command so it easy to change.
Meson also handles the generation and installation of pkg-config files
that a port wants. The problem is that this is handled by the script
itself and there is no way to configure it, so we need to hack the
meson port to change it from lib/pkg-config to libdata/pkg-config like
we currently are using. (1) Or add a hack to meson.mk to move the pkg-
config to the right location (evil++ imho).
My point I want to make is that currently there is only 1 port build
via the meson system (graphics/graphene). Should we change man/pkg-
config file locations now, it very easy. If we want to change them
later we will need to mass bump every meson build port. It is important
to note that GStreamer and GNOME are moving over to using meson instead
of autotools and that Wayland, Xorg en Mesa are exploring want is
needed to make the switch. So I think it important that the decision
what to do is done now and that we stick with it.
Reading the rest of the thread it seems nobody is really against the
proposed change of man and pkg-config path's. So how does one submit a
policy change like this? I'm also not sure I'm the right person to push
this, I just got back from a break and I don't want to really deal with
something super high profile right away.
-Koop
(1) I would like to see lib/pkg-config back in the search path of
pkgconf since that means I don't have to do a crash course python
programming.
Would be nice is portmgr can step on this, let's reduce this discussion for now
on pkgconf.
I am waiting on an exp-run to fix this once and for all.
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218067
When that is committed, anything can be added to the path pkgconfig
searches, ports will always install it in the right place.
Sorry but why? why not moving libdata/pkgconfig to lib/pkgconfig? what is the
rationale?
Because a lot of build software know that on FreeBSD, the .pc file go in
libdata/pkgconfig. If we move to some other place, we'll have a
USES=pathfixmore for the next 25 years until everyone understands we
moved it some place else.
ok a point for you there :)
I have no problems having lib/pkgconfig added to the search path so that
people who build stuff manually have their .pc files in a place where
pkg-config can read them, but I really do not want the ports to install
them in more than one place.
My PR solves that problem, all the ports will forcibly end up in
libdata/pkgconfig, we could even drop USES=pathfix.
--
Mathieu Arnold
Tijl Coosemans
2017-04-21 14:05:48 UTC
Permalink
Post by Mathieu Arnold
Post by Baptiste Daroussin
Post by Mathieu Arnold
I am waiting on an exp-run to fix this once and for all.
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218067
When that is committed, anything can be added to the path pkgconfig
searches, ports will always install it in the right place.
Sorry but why? why not moving libdata/pkgconfig to lib/pkgconfig? what
is the rationale?
Because a lot of build software know that on FreeBSD, the .pc file go
in libdata/pkgconfig. If we move to some other place, we'll have a
USES=pathfixmore for the next 25 years until everyone understands we
moved it some place else.
1. It's not a lot. Certainly the amount of software that does not know
about libdata is way bigger.
2. You don't need USES=pathfixmore, you just change the fixup target
in your patch to move files in the other direction. This fixup can
then be removed in 25 years (less if you let it print a warning)
while your fixup will have to be kept forever.
3. Proper porting of emulators/wine to amd64 requires building 32 bit
versions of dependencies. Their pkgconfig files would go to
lib32/pkgconfig when configured with --libdir=${PREFIX}/lib32 while
something like libdata/pkgconfig32 would require yet more patches
and fixups.

Any difference from Linux makes porting work harder, so there should be
good reasons and there are none whatsoever to use libdata/pkgconfig over
lib/pkgconfig. I really don't get why portmgr keeps blocking this
change every time it comes up in the past few years.

Loading...