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:
[x] I've formatted my code according to Natron's code style
[x] I've searched the pull requests tracker to ensure that this PR is not a duplicate
PR Description
What type of PR is this? (Check one of the boxes below)
[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Improvement (non-breaking change which does not add functionality nor fixes a bug but improves Natron in some way)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] My change requires a change to the documentation
[ ] I have updated the documentation accordingly
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.
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.