[Ffmpeg-devel] [PATCH] Build Darwin dynamic/shared libraries
Dan Villiom Podlaski Christiansen
danchr
Thu Jul 14 12:27:32 CEST 2005
Michael Niedermayer wrote:
> Hi
>
> On Wednesday 13 July 2005 14:06, Dan Villiom Podlaski Christiansen wrote:
> [...]
>
>> 3) initialise 3 common variables in libavcodec/msmpeg4.c, to not make
>> ld(1) complain about common storage. I discussed this with a GCC hacker
>> on IRC, and there was a reason why this was necessary, but I didn't
>> quite understand what it was ;)
>>
>
> thats a bit unprecisse, is it needed by gcc? a specific version? the c
> standard? is it a warning or an error?
> if its needed by the c standard its ok obviously, if its not and just a
> warning its rejected, ...
>
It was about the semantics of Mach-O binaries. If the variables weren't
initialised, they would be put in a section of the binary which couldn't
be referenced by other modules in the library. There were two possible
solutions to this: Either the library could be built as a single module,
which IIRC he said was a bit risky, or the variables could be
initialised. Initialising the variables struck me as the cleanest
solution as it's merely stating explicitly what would happen anyway.
>> 4) make the vhooks Mach-O bundles rather than libraries.
>> 5) add support for a ${DESTDIR} environment variable to force
>> installation into another path than the root. I found it quite useful.
>>
>
> we have bindir, libdir, mandir and prefix isnt that enough?
>
I'm afraid not, since $libdir gets hard-coded into the libraries. The
specific need for this was in DarwinPorts where the installation happens
into another path than $prefix, for later actual installation. Other
ports management systems might find this useful as well.
When building libraries, you can't specify the other path as $prefix, so
the need for $DESTDIR arises. Also, I found it useful for ensuring that
the proper files where built and installed without touching /usr/local.
> iam also not too happy about all the ifeq ($(CONFIG_DARWIN),) in the
> makefiles, this should be in configure IMHO
>
For many of these, there is no other simple solution. The Mach-O linker
is very different from the ELF linker, and the library naming
conventions also differ. Some of the statements could perhaps be moved
to configure, but I mainly tried to follow the convention used in the
libpostproc Makefile where e.g. soname/install_name is specified in the
Makefile, and where the ELF conventions are followed rather strictly.
>> @@ -5,6 +5,7 @@
>> #
>> #set -x
>> # Even in the 21st century some diffs are not supporting -u.
>> +
>> diff -u "$0" "$0" > /dev/null 2>&1
>> if [ $? -eq 0 ]; then
>> diff_cmd="diff -u"
>>
>
> cosmetical change
That one wasn't intentional.
- Dan Christiansen
More information about the ffmpeg-devel
mailing list