Closed markus2330 closed 2 months ago
@markus2330
Just pushed a few build system related fixes. But you need to fix some packages on your stable debian-stable machine as well:
cd /usr/lib/jvm/ && ln -s java-8-oracle default-java
echo -e "/usr/lib/jvm/java-8-oracle/jre/lib/amd64\n/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server" > /etc/ld.so.conf.d/java-8-oracle.conf && ldconfig
Looks good, thanks for fixing those issues.
I also did those steps on debian-stable agent.
For other machines installing qtdeclarative5-dev was not possible, because it conflicts with qdbus which is needed by kde4. So I restored the previous script configure-debian-wheezy as configure-debian-wheezy-local.
I also added the installation steps you mentioned as notes in the README.md because they might be of interest by others.
Thanks for upgrading the agents!
Stuff that is missing on stable
1.) latex (+ I think texlive-latex-recommended is needed, too) see http://build.libelektra.org:8080/job/elektra-doc/495/console
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.8")
CMake Warning at doc/CMakeLists.txt:46 (message):
Latex not found, PDF Manual can't be created.
-- Found Perl: /usr/bin/perl (found version "5.20.2")
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
BUILD_EXAMPLES
2.) Can you install clang (for elektra-clang, clang of wheezy won't work)? 3.) Can you install mingw+wine for elektra-gcc-configure-mingw?
apt install --no-install-recommends doxygen-latex
+ clang + mingw done
Why do you need wine?
Btw, you should change i586-mingw32msvc-X
to i686-w64-mingw32-X
in Toolchain-mingw32.cmake
. Right now this won't work on unstable.
Thank you for docu!
wine is needed to execute the cross-compiled windows binaries (e.g. exporterrors.exe)
I think you installed the mingw that builds for w64. In the mingw32 package, there is still a /usr/bin/i586-mingw32msvc-c++
.
A new toolchain file for w64 is nevertheless appreciated.
I installed gcc-mingw-w64-i686
which is the x64 build of mingw with i686 as target.
The package mingw32-binutils
is deprecated and not available on unstable any more.
Wine installed on both containers.
Actually, the mingw build is bound to stable, so that should not be an issue.
MinGW-w64 is a fork on mingw and is quite a different target. Nobody tested it up to now.
thanks for installing wine
Mingw-w64 looks superior. Maybe it's time to move on :-)
Contributions welcome ;) I do not have any machine to test it.
I am afraid you got the wrong wine, it should be apt-get install wine32
see also http://build.libelektra.org:8080/job/elektra-gcc-configure-mingw/218/console
Nope.
root@debian-stable:~# apt-get install wine32
....
E: Package 'wine32' has no installation candidate
ok, dpkg --add-architecture i386
will solve this. But can't you just pin the mingw/wine job to your build machine? The mingw setup is rather special.
Edit: I'll see if I can get elektra build with mingw-w64 so I don't need to install tons of i686 libs.
The problem is I do not have a spare jessie machine and wheezy's mingw does not know C++11.
I managed to get mingw-w64 working. However std::mutex is not available because there's no glibc on windows and std::mutex depends on pthreads. Any ideas?
Wow, thanks!
Does it lead to a compilation error? The std::mutex is not used for internal functionality, but only in a header file to be included by a user. It is used in test cases though.
One solution for compiliation problems is to provide a std::mutex in the mingw case throwing system errors on every attempt to lock/unlock. Actually, I would expect the mingw people to at least provide something like that (e.g. when some macro is set, similar to -D_GLIBCXX_USE_NANOSLEEP)
https://github.com/meganz/mingw-std-threads might be another way. But that is most likely only useful if all test cases except the ones involving std::mutex already run.
Basically, this is only one instance of C++11 not properly available.
mingw status right now:
Right now I'm building with -static-libgcc
+ -static-libstdc++
. Otherwise wine is unable to find the dlls. Additional mutex doesn't compile either. I tried mingw-std-threads. just got more compile errors :-)
If I switch from x86_64-w64-mingw32-X
to x86_64-w64-mingw32-X-posix
std::mutex compiles fine, because pthread stuff is defined. However I get an additional dependency to libwinpthread-1.dll, which wine is unable to find.
I think our best bet is using x86_64-w64-mingw32-X-posix
though.
Again, I am surprised that you even have this problem. Up to now we were happy when we got a libelektra.dll.
I cannot say anything about this x86_64-w64-mingw32-X-posix
decision, because I do not use it and do not know the implications. I am wondering that such a posix-lib even exists, I thought that the posix-layer approach is cygwin and not mingw.
Does this decision even has an effect on libelektra.dll? If its only for the test cases, no one will care (as long as the build server is able to run it). If the test cases run, it will be a huge benefit. (See #270 where the unit tests unveiled some strange bugs on Mac OS X)
It seems like that libwinpthread-1.dll
can be downloaded, I do not know if they work with wine though? Can you also add it as external project like done with dlfcn-win32 (so that all dlls are handled in the same way)? Otherwise, if you need to download 1 or 3 dlls for the tests might not really matter (again, I am no user, and do not understand the deployment concept, if there is any, of windows dlls).
@beku What do you think? Do you have time to test our latest 0.8.13 mingw-w64 build on Windows together with oyranos?
Are tests usually enabled for the mingw build job? Yesterday all of them were disabled.
Yes, they were disabled. But afaik examples/benchmarks like cpp11_benchmark_thread
were disabled, too. So I thought you changed it and compile more than it was done previously.
I compiled the whole repo with C++11 enabled. Nothing more.
But executables like bin/basename.exe built with -posix run fine as long as you copy the required dlls to the bin directory (thank you windows for not having RPATH). I haven't found a way to a) let cmake find the dll directory + b) point wine to the dll directory. I thought static linking would work but then the build fails with duplicate symbols during linking the elektra dll. Because the dll already has the symbols included.
@markus2330 I managed to get elektra to compile with mingw + running with wine without copying any dlls. The trick is to always enable static linking for both executable AND shared objects (CMAKE_SHARED_LINKER_FLAGS
/CMAKE_EXE_LINKER_FLAGS
=> "-static
").
To work around duplicated symbols I've added version-scripts for libelektra and libelektratools. This way only our symbols get exported.
This works really fine. e.g.
$ wine64 ./bin/kdb-static.exe
Usage: Z:\home\manuel\build\bin\kdb-static.exe <command> [args]
Z:\home\manuel\build\bin\kdb-static.exe is a program to manage elektra's key database.
Run a command with -H or --help as args to show a help text for
a specific command.
Known commands are:
check Do some basic checks on a plugin.
convert Convert configuration.
cp Copy keys within the key database.
export Export configuration from the key database.
file Prints the file where a key is located.
fstab Create a new fstab entry.
get Get the value of an individual key.
[...]
$ wine64 bin/cpp_example_iter.exe
user/key3/1
user/key3/2
user/key3/3
Even bin/cpp11_benchmark_thread.exe works.
Other things just crash:
$ wine64 ./bin/kdb-static.exe get
wine: Unhandled page fault on read access to 0x00000000 at address 0x7fd0e8b62c8a (thread 0009), starting debugger...
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
Unhandled exception: page fault on read access to 0x00000000 in 64-bit code (0x00007fd0e8b62c8a).
Register dump:
rip:00007fd0e8b62c8a rsp:000000000033f428 rbp:0000000000000000 eflags:00010293 ( R- -- I S -A- -C)
rax:0000000000000000 rbx:000000000033f700 rcx:0000000000000000 rdx:000000000033f5b0
rsi:0000000000000000 rdi:0000000000000000 r8:0000000000000000 r9:0000000000000072 r10:0000000000000000
r11:000000000003f615 r12:000000000033f5b0 r13:00000000000373b0 r14:0000000000000000 r15:000000000033f930
Stack dump:
0x000000000033f428: 00007fd0e748ea93 0000000000000000
0x000000000033f438: 0000000000000000 0000000000000000
0x000000000033f448: 0000000000000028 0000000000010020
0x000000000033f458: 8d98315017c96400 6f46746547485300
0x000000000033f468: 687461507265646c 0000000000000000
0x000000000033f478: 0000000000000000 0000000000000000
0x000000000033f488: 000000000003fab0 0000000000030000
0x000000000033f498: 8d98315017c96400 6f46746547485300
0x000000000033f4a8: 687461507265646c 0000000000000000
0x000000000033f4b8: 0000000000000000 0000000000000000
0x000000000033f4c8: 0000000000000000 0000000000000000
0x000000000033f4d8: 0000000000000000 0000000000000000
Backtrace:
=>0 0x00007fd0e8b62c8a strlen+0x2a() in libc.so.6 (0x0000000000000000)
1 0x00007fd0e748ea93 MSVCRT_stat64+0x92() in msvcrt (0x0000000000000000)
2 0x00000000004744af in kdb-static (+0x744ae) (0x000000000003f9d0)
3 0x000000000043bda5 in kdb-static (+0x3bda4) (0x000000000003f9d0)
4 0x0000000000431d76 in kdb-static (+0x31d75) (0x00000000000360a0)
[...]
Right now I've simply added the version-script stuff without thinking about other compilers. Shall I continue my work or not interested?
crashes in src/plugins/wresolver/wresolver.c because pk->filename is NULL
pk is of type resolverHandles.user
I tried to take a look at the plugin but I fail to understand the for-loop in elektraWresolverOpen
. The loop calls elektraWresolveFileName
--> elektraResolve{Spec,Dir,User,System}
which all malloc resolverHandle->filename
and therefor leak memory.
Thanks for pointing that out! The code is obviously broken since the introduction in c87ae8e87a716b02b2c7ed790ad56a89d95547a9 During looping only and always the system handle was initialized. This lead to crashes when another namespace was used.
I fixed it in edb4d50856bb5331749220de5a83fa2062624a9d
About continuing work: On the one hand, it would be nice if the compiled stuff also runs. On the other hand, the release should happen this weekend, so a pull request would be important soon (there should be at least a chance of a short feedback circle, e.g. what the version-scripts actually does)
But imho its enough if only one variant (the static compilation) works. Great to see the kdb-tool running!
Where can I find edb4d50856bb5331749220de5a83fa2062624a9d?
edb4d50856bb5331749220de5a83fa2062624a9d was pushed a bit later.
Which gcc versions are installed on debian-unstable-mm?
says there is no gcc-5.2
Can you install as much compilers as possible, please?
In some issue or PR I've said that I've removed all compilers except the latest. Edit: gcc 4.9 on stable, 4.9 + 5.x (default) on unstable
Please do these kind of tests (I find them highly unnecessary anyway) on your own containers. Mine won't stay forever anyway.
I have not read that. They have maybe 50MB each. Could you please install them again and answer the first question?
Maybe I told you in our meeting. But I've definitely told you.
debian-unstable:~ # gcc -v 2>&1 | tail -n 1
gcc version 5.2.1 20150903 (Debian 5.2.1-16)
The version specific binary is called gcc-5. No separate package for minor versions anymore. So your multiconfig-gcc with this level of detail is kind of obsolete. I recommend removing gcc 4.7 and replacing gcc-5.2 with gcc-5 and be done.
The only additional compiler available I haven't installed is gcc-4.8. And gcc-4.8 has already been tagged for removal.
Thanks for the info! Seems like the glory days of many available compilers is over.
I fixed multiconfig-unstable.
I will close for now, thanks for the excellent agent setup.
Hello, jessie (stable) needs some more packages. Could you please install:
fakeroot installed, gpg + repropro is already installed. Can you mail me your already existing gpg key? So both build machines have the same
Its ok to have different gpg keys. I am not sure if the current setup uses them at all, so first wait if http://build.libelektra.org:8080/job/elektra-git-buildpackage-jessie/2/ fails.
Thanks for installation!
python-dev
is available for Jessie, and python-support
, too. Please install them.
I tested it locally, when these packages are installed, it builds for jessie.
Sure, it's available but it's a wrong dependency. python-dev depends on python2.7-dev which is not sufficient. Instead python2.7-dev + python3-dev is required.
python-support isn't required at all imho.
I do not know why the dependencies were chosen this way, most of the packaging was done by @iandonnelly during gsoc.
Yes, the packages should be updated to build python3 bindings, too. Currently, its simply not done. Nevertheless, you can install python3-dev, so that the build won't break (when python3 bindings+plugins are added to the debian package).
That doesn't mean they are correct :-) - I'm fairly sure about the python-dev deps. Can you please replace them and remove the python-support dep?
python3-dev and python2.7-dev is already installed. Otherwise no binding would build.
Btw. the official debian package from @pinotree builds python3-only. It would be a waste of time to fix whats in our "debian" branch, the work of @pinotree is superior anyway.
When I find time, I will update our "debian" branch to what @pinotree has done in the official package. He already allowed us to do so. I will wait for the qt-gui update, currently there is no hurry to change. And having python2 support would be important for one installation (where cheetah is used, which won't work with python3).
I've never said I'll remove the python2 packages. All I'm saying is python-dev is an inaccurate dependency. We require explicit versions. So pythonX-dev is the correct dep to use.
Hopefully pinotree worked out the dependency correctly.
Btw, cheetah is dead. Don't use it.
Ok, replaced it. Please revert b7c266b36b0ab0fad9120e67a457b580c7c44690 and install python-support if it is needed after all.
I am sure pinotree did it correctly ;)
And it says: dpkg-checkbuilddeps: Unmet build dependencies: build-essential:native
http://community.markus-raab.org:8080/job/elektra-git-buildpackage-jessie/3/console
installed
python-dev is a wrong dependency. it should be python2.7-dev or python3-dev or both
python-dev
installs the development package for the default Python 2 version; since Wheezy, this is Python 2.7python3-dev
installs the development package for the default Python 3 version; Python 3.2 in Wheezy, 3.4 in Jessie, and so far still 3.4 in Stretch (I guess soon will be 3.5)
So, if you want to build against the default Python 2/3 version, use respectively python-dev
/python3-dev
, not the pythonX.Y-dev
versions (which you need to use when you explicitly want a precise Python version installed, even if not the only one installed on the system, and not the default one). Using either is what I recommend.
from python-dev
description:
This package is a dependency package, which depends on Debian's default Python version (currently v2.7).
According to this text python-dev can surely depend on python3 sometime soon
This issue gives up-to-date information about the health of our build system.
Report here any permanent problems (that cannot be fixed by rerunning the build job). Temporary problems should be reported in #2967.
Current open issues for our Jenkins build system:
make uninstall
leaves a clean system, see #1244find . | grep -v '^[-_/.a-zA-Z0-9]*$'
see #1615Fixed issues:
elektra-gcc-configure-debian-optimizations
toelektra-gcc-configure-debian-no-optimizations
debian-wheezy-mr
anddebian-strech-mr