On 23.9.2003, at 19:01, Tom Lane wrote:
> 1. Doesn't this break backward compatibility with Darwin 1.0-1.2?
> (If so, does anyone care anymore?)
No. The two-level namespace feature was added in 10.1, and the
-flat_namespace hack was included in pgsql to unbreak the compile
on 10.1 and later. This change hence doesn't have any effect on
10.0 / Darwin 1.x -- except for gcc warnings about unknown flags.
The other change we discussed, ie. using -no-cpp-precomp instead
of -traditional-cpp, will break Darwin 1.x support.
> 2. Why is the postgres executable added to LINK.shared? Doesn't this
> break building shlibs that are not intended to be linked into the
> backend (eg libpq)?
When linking a shared object, the Darwin linker wants to know that all
the symbols are accounted for -- it doesn't allow undefined symbols.
The bundle_loader flag gives the linker a hint: these symbols will be
provided by the application that loads us, so you don't need raise
an error about them being undefined.
In other words, the -bundle_loader /path/to/postgresql doesn't affect
the build results at all. In the case where there are no undefined
symbols
(like in libpq), the flag is ignored.
> 3. What's with the WITHOUT_DARWIN_BUNDLE_LOADER hack for ecpg?
The linker doesn't like symbols that are defined both in the shared
object
that's being linked and the bundle_loader binary. ecpg contains symbols
that are in the postgresql binary, too, leading to the link failing with
multiply-defined errors.
The easiest way for me to fix this -- I don't really know my way around
the
source base -- was to specify by hand that the -bundle-loader flag isn't
used on these occasions. Perhaps a more prudent way would be to
examine which shared objects actually have undefined symbols and
use the bundle-loader flag only when linking them, but I think it'd lead
to much more maintenance and bloated Makefiles.
cheers
mk
> Marko Karppinen <karppinen@pobox.com> writes:
>> While we're on a Mac-related note, I managed to compile PostgreSQL on
>> Mac OS X 10.2 Jaguar with two-level namespace support.
>> <http://developer.apple.com/documentation/ReleaseNotes/DeveloperTools/
>> TwoLevelNamespaces.html> This is quite useful, so I hope you can look
>> into incorporating the changes.
>
>> http://www.markokarppinen.com/pg-two-level-namespace.diff