[ 
https://issues.apache.org/jira/browse/THRIFT-4594?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Christopher Friedt updated THRIFT-4594:
---------------------------------------
    Description: 
It seems that the 0.11.0 lib/cpp/test suite is not building correctly when run 
inside of Alpine Linux 3.8 in a Docker container.

I've narrowed the culprits down to the non-portable (NP) class of Mutex 
initializers. The failure occurs in unpatched code (and obviously in my CI 
build recipe, attached).

Currently, I'm working on automating builds of thrift for Alpine Linux 3.8, and 
they will likely require "make check" to pass successfully in future versions. 
Might as well ensure it works now.

If you want to duplicate my build easily in Docker, you can use the attachment 
(e.g. tar xpvzf thrift-ci-build-20180627.tar.xz; cd thrift-20180627; docker 
build -t foo .)

{noformat}
make check
...
/bin/bash ../../../libtool  --tag=CXX   --mode=link 
x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os -fomit-frame-pointer 
-L/usr/lib -Wl,--no-undefined -o TPipedTransportTest TPipedTransportTest.o 
TPipeInterruptTest.o libtestgencpp.la ../../../lib/cpp/libthrift.la 
/usr/lib/libboost_unit_test_framework.a /usr/lib/libboost_system.a 
/usr/lib/libboost_thread-mt.a -lrt -lpthread 
concurrency/MutexTest.o: In function `MutexTest::happy_path::test_method()':
MutexTest.cpp:(.text+0x18): undefined reference to 
`apache::thrift::concurrency::Mutex::ERRORCHECK_INITIALIZER(void*)'
concurrency/MutexTest.o: In function 
`MutexTest::recursive_happy_path::test_method()':
MutexTest.cpp:(.text+0x580): undefined reference to 
`apache::thrift::concurrency::Mutex::RECURSIVE_INITIALIZER(void*)'
concurrency/MutexTest.o: In function `MutexTest::trylock::test_method()':
MutexTest.cpp:(.text+0x1573): undefined reference to 
`apache::thrift::concurrency::Mutex::ADAPTIVE_INITIALIZER(void*)'
concurrency/MutexTest.o: In function `LFAT::LFAT()':
MutexTest.cpp:(.text._ZN4LFATC2Ev[_ZN4LFATC5Ev]+0x17): undefined reference to 
`apache::thrift::concurrency::Mutex::ERRORCHECK_INITIALIZER(void*)'
collect2: error: ld returned 1 exit status
make[5]: *** [Makefile:1190: UnitTests] Error 1
make[5]: *** Waiting for unfinished jobs....
libtool: link: x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os 
-fomit-frame-pointer -Wl,--no-undefined -o .libs/TFDTransportTest 
TFDTransportTest.o  -L/usr/lib ../../../lib/cpp/.libs/libthrift.so -lssl 
-lcrypto /usr/lib/libboost_unit_test_framework.a -lrt -lpthread
libtool: link: x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os 
-fomit-frame-pointer -Wl,--no-undefined -o .libs/TPipedTransportTest 
TPipedTransportTest.o TPipeInterruptTest.o  -L/usr/lib ./.libs/libtestgencpp.a 
/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/.libs/libthrift.so 
../../../lib/cpp/.libs/libthrift.so -lssl -lcrypto 
/usr/lib/libboost_unit_test_framework.a /usr/lib/libboost_system.a 
/usr/lib/libboost_thread-mt.a -lrt -lpthread
make[5]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
make[4]: *** [Makefile:1507: check-am] Error 2
make[4]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
make[3]: *** [Makefile:1510: check] Error 2
make[3]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
make[2]: *** [Makefile:1661: check-recursive] Error 1
make[2]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp'
make[1]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib'
make[1]: *** [Makefile:576: check-recursive] Error 1
make: *** [Makefile:659: check-recursive] Error 1
>>> ERROR: thrift*: check failed
>>> ERROR: thrift: all failed
>>> thrift: Uninstalling dependencies..{noformat}

  was:
It seems that the lib/cpp/test suite is not passing when run inside of Alpine 
Linux 3.8 in a Docker container.in the 0.11.0 tarball release because this 
fails in an Alpine Linux 3.8 Docker container.

In any case, I've narrowed the culprits down to the non-portable (NP) class of 
Mutex initializers. The failure occurs in unpatched code (and obviously in my 
CI build recipe, attached).

Currently, I'm working on automating builds of thrift for Alpine Linux 3.8, and 
they will likely require "make check" to pass successfully in future versions. 
Might as well ensure it works now.

If you want to duplicate my build easily in Docker, you can use the attachment 
(e.g. tar xpvzf thrift-ci-build-20180627.tar.xz; cd thrift-20180627; docker 
build -t foo .)

{noformat}
make check
...
/bin/bash ../../../libtool  --tag=CXX   --mode=link 
x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os -fomit-frame-pointer 
-L/usr/lib -Wl,--no-undefined -o TPipedTransportTest TPipedTransportTest.o 
TPipeInterruptTest.o libtestgencpp.la ../../../lib/cpp/libthrift.la 
/usr/lib/libboost_unit_test_framework.a /usr/lib/libboost_system.a 
/usr/lib/libboost_thread-mt.a -lrt -lpthread 
concurrency/MutexTest.o: In function `MutexTest::happy_path::test_method()':
MutexTest.cpp:(.text+0x18): undefined reference to 
`apache::thrift::concurrency::Mutex::ERRORCHECK_INITIALIZER(void*)'
concurrency/MutexTest.o: In function 
`MutexTest::recursive_happy_path::test_method()':
MutexTest.cpp:(.text+0x580): undefined reference to 
`apache::thrift::concurrency::Mutex::RECURSIVE_INITIALIZER(void*)'
concurrency/MutexTest.o: In function `MutexTest::trylock::test_method()':
MutexTest.cpp:(.text+0x1573): undefined reference to 
`apache::thrift::concurrency::Mutex::ADAPTIVE_INITIALIZER(void*)'
concurrency/MutexTest.o: In function `LFAT::LFAT()':
MutexTest.cpp:(.text._ZN4LFATC2Ev[_ZN4LFATC5Ev]+0x17): undefined reference to 
`apache::thrift::concurrency::Mutex::ERRORCHECK_INITIALIZER(void*)'
collect2: error: ld returned 1 exit status
make[5]: *** [Makefile:1190: UnitTests] Error 1
make[5]: *** Waiting for unfinished jobs....
libtool: link: x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os 
-fomit-frame-pointer -Wl,--no-undefined -o .libs/TFDTransportTest 
TFDTransportTest.o  -L/usr/lib ../../../lib/cpp/.libs/libthrift.so -lssl 
-lcrypto /usr/lib/libboost_unit_test_framework.a -lrt -lpthread
libtool: link: x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os 
-fomit-frame-pointer -Wl,--no-undefined -o .libs/TPipedTransportTest 
TPipedTransportTest.o TPipeInterruptTest.o  -L/usr/lib ./.libs/libtestgencpp.a 
/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/.libs/libthrift.so 
../../../lib/cpp/.libs/libthrift.so -lssl -lcrypto 
/usr/lib/libboost_unit_test_framework.a /usr/lib/libboost_system.a 
/usr/lib/libboost_thread-mt.a -lrt -lpthread
make[5]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
make[4]: *** [Makefile:1507: check-am] Error 2
make[4]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
make[3]: *** [Makefile:1510: check] Error 2
make[3]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
make[2]: *** [Makefile:1661: check-recursive] Error 1
make[2]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp'
make[1]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib'
make[1]: *** [Makefile:576: check-recursive] Error 1
make: *** [Makefile:659: check-recursive] Error 1
>>> ERROR: thrift*: check failed
>>> ERROR: thrift: all failed
>>> thrift: Uninstalling dependencies..{noformat}


> Unable to Build Test Suite in Alpine Linux
> ------------------------------------------
>
>                 Key: THRIFT-4594
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4594
>             Project: Thrift
>          Issue Type: Bug
>          Components: Test Suite
>    Affects Versions: 0.11.0
>         Environment: Ubuntu Bionic (native)
> alpine:latest (docker)
>            Reporter: Christopher Friedt
>            Priority: Minor
>             Fix For: 0.12.0
>
>         Attachments: thrift-ci-build-20180627.tar.gz
>
>
> It seems that the 0.11.0 lib/cpp/test suite is not building correctly when 
> run inside of Alpine Linux 3.8 in a Docker container.
> I've narrowed the culprits down to the non-portable (NP) class of Mutex 
> initializers. The failure occurs in unpatched code (and obviously in my CI 
> build recipe, attached).
> Currently, I'm working on automating builds of thrift for Alpine Linux 3.8, 
> and they will likely require "make check" to pass successfully in future 
> versions. Might as well ensure it works now.
> If you want to duplicate my build easily in Docker, you can use the 
> attachment (e.g. tar xpvzf thrift-ci-build-20180627.tar.xz; cd 
> thrift-20180627; docker build -t foo .)
> {noformat}
> make check
> ...
> /bin/bash ../../../libtool  --tag=CXX   --mode=link 
> x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os -fomit-frame-pointer 
> -L/usr/lib -Wl,--no-undefined -o TPipedTransportTest TPipedTransportTest.o 
> TPipeInterruptTest.o libtestgencpp.la ../../../lib/cpp/libthrift.la 
> /usr/lib/libboost_unit_test_framework.a /usr/lib/libboost_system.a 
> /usr/lib/libboost_thread-mt.a -lrt -lpthread 
> concurrency/MutexTest.o: In function `MutexTest::happy_path::test_method()':
> MutexTest.cpp:(.text+0x18): undefined reference to 
> `apache::thrift::concurrency::Mutex::ERRORCHECK_INITIALIZER(void*)'
> concurrency/MutexTest.o: In function 
> `MutexTest::recursive_happy_path::test_method()':
> MutexTest.cpp:(.text+0x580): undefined reference to 
> `apache::thrift::concurrency::Mutex::RECURSIVE_INITIALIZER(void*)'
> concurrency/MutexTest.o: In function `MutexTest::trylock::test_method()':
> MutexTest.cpp:(.text+0x1573): undefined reference to 
> `apache::thrift::concurrency::Mutex::ADAPTIVE_INITIALIZER(void*)'
> concurrency/MutexTest.o: In function `LFAT::LFAT()':
> MutexTest.cpp:(.text._ZN4LFATC2Ev[_ZN4LFATC5Ev]+0x17): undefined reference to 
> `apache::thrift::concurrency::Mutex::ERRORCHECK_INITIALIZER(void*)'
> collect2: error: ld returned 1 exit status
> make[5]: *** [Makefile:1190: UnitTests] Error 1
> make[5]: *** Waiting for unfinished jobs....
> libtool: link: x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os 
> -fomit-frame-pointer -Wl,--no-undefined -o .libs/TFDTransportTest 
> TFDTransportTest.o  -L/usr/lib ../../../lib/cpp/.libs/libthrift.so -lssl 
> -lcrypto /usr/lib/libboost_unit_test_framework.a -lrt -lpthread
> libtool: link: x86_64-alpine-linux-musl-g++ -Wall -Wextra -pedantic -Os 
> -fomit-frame-pointer -Wl,--no-undefined -o .libs/TPipedTransportTest 
> TPipedTransportTest.o TPipeInterruptTest.o  -L/usr/lib 
> ./.libs/libtestgencpp.a 
> /home/alpine/thrift/src/thrift-0.11.0/lib/cpp/.libs/libthrift.so 
> ../../../lib/cpp/.libs/libthrift.so -lssl -lcrypto 
> /usr/lib/libboost_unit_test_framework.a /usr/lib/libboost_system.a 
> /usr/lib/libboost_thread-mt.a -lrt -lpthread
> make[5]: Leaving directory 
> '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
> make[4]: *** [Makefile:1507: check-am] Error 2
> make[4]: Leaving directory 
> '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
> make[3]: *** [Makefile:1510: check] Error 2
> make[3]: Leaving directory 
> '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp/test'
> make[2]: *** [Makefile:1661: check-recursive] Error 1
> make[2]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib/cpp'
> make[1]: Leaving directory '/home/alpine/thrift/src/thrift-0.11.0/lib'
> make[1]: *** [Makefile:576: check-recursive] Error 1
> make: *** [Makefile:659: check-recursive] Error 1
> >>> ERROR: thrift*: check failed
> >>> ERROR: thrift: all failed
> >>> thrift: Uninstalling dependencies..{noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to