NatronGitHub / Natron

Open-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.
http://NatronGitHub.github.io
GNU General Public License v2.0
4.54k stars 332 forks source link

Fix pthread related build busters in glog code. #866

Closed acolwell closed 1 year ago

acolwell commented 1 year ago

Thanks for submitting a pull request! Please provide enough information so that others can review your pull request. Additionally, make sure you've done all of these things:

PR Description

What type of PR is this? (Check one of the boxes below)

What does this pull request do?

Fixes port.h to more closely match upstream glog code which also fixes build issues related to pthreads on MSYS2 builds.

The build issues are ultimately caused by different headers in the glog code including different config.h files. Some headers like libs/glog/src/windows/port.h include the config.h that are in the same directory, but files like libs/glog/src/base/mutex.h do not have a config.h in the same directory. This causes the compiler to fallback to searching the include paths. When this happens, the gflags directories are scanned before the glog directories because glog depends on gflags. This results in the gflags config.h being used sometimes. The gflag config.h defines HAVE_PTHREADS which in turn causes glogs' mutex.h to include pthread.h. The inclusion of pthread.h then causes issues with the thread related function declarations in port.h.

Without this change the build fails because we get "multiple definition" errors for the thread related definitions in port.h. This change fixes this issue by allowing the code to just use the pthread header if HAVE_PTHREADS is defined and fallback on the alternate definitions if it is not. It also causes the code to be a closer match to upstream glog which could facilitate unforking glog if that ever becomes desirable in the future.

Have you tested your changes (if applicable)? If so, how?

Yes. The glog code builds fine on a fresh MSYS2 install with this change.