When generating a new version of the header, that includes the
actual git hash, don't overwrite the file that is tracked by git.
Instead create a new file, and include this only if the build system
indicates that it exists (by setting a define). This allows the
untouched source tree to be built from within an IDE even if make
has not been run.
This reduces the hassle with a file that needs to be ignored in the
git configuration.
The downside is that the generated file isn't used if building
from within an IDE, if the header has been updated by calling make
before (since the IDE configuration doesn't know whether the user
actually has run make). Since users of the IDE might not build via
make in the command line at all (in the same source checkout at least),
this should not be an issue in practice. The previous way things worked,
the version hash (generated by make) when used in an IDE could actually
be outdated and misleading.
This is similar to how it is done in release mode already.
The fact that this behaviour differed between release and debug
can be traced back to commit cf92e8d6.
If only a static library is installed, the user of the library may
not know that only a static version of this particular library is
available (and doesn't know that --static should be added to the
pkg-config call). Therefore, one common practice is to include private
dependencies in the public Libs line if a static-only library is
installed.
This makes sure both "make libopenh264.so" and "make libopenh264.so.0"
work as intended.
Use the versionless name as dependency for the install rule,
to make sure both (if possible) are created.
This feels more straightforward - some file systems/environments
(such as MSys) implement symlinks as plain file copies, where
distinguishing whether a file is a link might be hard.
Prior to 3f69873c99, there already was a mechanism for installing
the import library, used for the MSVC builds. Use that for mingw
as well, instead of adding more hardcoded rules.
The codec seems to work without executable stack memory, and in general
executable stacks should be avoided if possible, but the assembler used
for the .asm source files requests it. This commit adds a linker option
to override that.
Previously the makefile didn't know that there was any dependency between
compiling welsDecoderExt.o and welsEncoderExt.o and the regeneration
of the version.h header. This meant that in parallel builds (make -jX),
make could try to regenerate version.h while compiling welsDecoderExt.o
and welsEncoderExt.o, which would lead to errors about version.h not
existing.
Also add some spacing around the makefile rules.
This fixes parallel make building in certain cases.
This allows building two versions for different architectures at
the same time, without the built files clobbering each other.
This is very helpful when trying to track down differences between
two build configurations.
To build outside of the source tree, create the other directory to
use for building (either outside of the openh264 directory, or as
a subdirectory), enter that directory, and do
"make -f path/to/openh264/Makefile".