Page 1 of 2

Recommendation for a Linux distro for building Oolite

Posted: Mon Sep 06, 2021 9:19 am
by phkb
Full disclosure: I am not a Linux user most of the time, and don’t really want to be an expert. But I do want to be able to test building Oolite on Linux. I’ve been trying with Mint in VirtualBox, but haven’t had much success. So, is there a distro recommendation that will, in the fewest possible steps, get me to “make” heaven without too much “sudo” mayhem?

Re: Recommendation for a Linux distro for building Oolite

Posted: Mon Sep 06, 2021 1:04 pm
by another_commander
Have you considered the Windows Linux Subsystem?

https://docs.microsoft.com/en-us/window ... tall-win10

Edit to add: I believe the build system used for Linux releases and nightlies is Ubuntu-based, but I may be remembering something wrong.

Re: Recommendation for a Linux distro for building Oolite

Posted: Mon Sep 06, 2021 2:41 pm
by hiran
another_commander wrote: Mon Sep 06, 2021 1:04 pm
Have you considered the Windows Linux Subsystem?

https://docs.microsoft.com/en-us/window ... tall-win10

Edit to add: I believe the build system used for Linux releases and nightlies is Ubuntu-based, but I may be remembering something wrong.
It is Ubuntu based. I have however not yet seen graphical clients.

How do the official and nightly builds get compiled? https://github.com/OoliteProject/nightlies

Re: Recommendation for a Linux distro for building Oolite

Posted: Mon Sep 06, 2021 5:23 pm
by another_commander
hiran wrote: Mon Sep 06, 2021 2:41 pm
How do the official and nightly builds get compiled? https://github.com/OoliteProject/nightlies
The official builds are done manually when it is time to release. It is actually a quite complicated process that takes anything from 4 to 8 hours for all platforrms, including virus check reports, getting the announcements up and getting the website updated for the upcoming release. Sometimes we can't finish everything in one go, so it may take more than one day to be ready.

The nightly builds are a different story. They involve external servers that run scripts checking for new commits on github and firing up sequential builds for Windows and Linux locally, plus a Mac build that is done remotely on another (Mac-powered) server, then collecting and uploading the results to the github nightlies repository. In the past this was done fully automatically, but I think that nowadays the build server has to be started up manually in order to execute the build scripts. Getafix may have more on this if he passes by one of these days and wishes to comment - it was his server and his scripts doing all the hard work.

Re: Recommendation for a Linux distro for building Oolite

Posted: Mon Sep 06, 2021 6:12 pm
by hiran
another_commander wrote: Mon Sep 06, 2021 5:23 pm
hiran wrote: Mon Sep 06, 2021 2:41 pm
How do the official and nightly builds get compiled? https://github.com/OoliteProject/nightlies
The official builds are done manually when it is time to release. It is actually a quite complicated process that takes anything from 4 to 8 hours for all platforrms, including virus check reports, getting the announcements up and getting the website updated for the upcoming release. Sometimes we can't finish everything in one go, so it may take more than one day to be ready.

The nightly builds are a different story. They involve external servers that run scripts checking for new commits on github and firing up sequential builds for Windows and Linux locally, plus a Mac build that is done remotely on another (Mac-powered) server, then collecting and uploading the results to the github nightlies repository. In the past this was done fully automatically, but I think that nowadays the build server has to be started up manually in order to execute the build scripts. Getafix may have more on this if he passes by one of these days and wishes to comment - it was his server and his scripts doing all the hard work.
This sounds not only that Oolite relies on a private machine to execute the builds, the scripts to build are all stored locally on that server and not available in any github project?

Re: Recommendation for a Linux distro for building Oolite

Posted: Mon Sep 06, 2021 7:13 pm
by Commander_X
phkb wrote: Mon Sep 06, 2021 9:19 am
[...] get me to “make” heaven without too much “sudo” mayhem?
You'd only need "sudo" if you wanted to "install" your built system-wide. Otherwise, for your local user build, sudo should not be needed.

About distributions (already advertised on other threads, Slackware Linux user here) I'd guess most of the them have a pre-defined "workstation" or "development" layout for the installable packages out of the bat, such that you can get to that "make" heaven. E.g., in Slackware's case, that usually means you want to install the "d" (for "d"evelopment) series of packages and "l" (for "l"ibraries). In many of the other distributions, the libraries have a "-dev" version that needs to be installed alongside with their runtime only counterparts, if you wanted to run "make" and be able to conveniently link them against your sources.

Regardless of the distribution, you might need to do some tuneup on your Oolite build environment, in order to properly link and use for compilation the included dependencies. This is because the "official/recommended" build system relies on specific version of some of the system dependent packages to be installed, and that layout could had "shifted" due to evolving distribution/package version.

Re: Recommendation for a Linux distro for building Oolite

Posted: Tue Sep 07, 2021 3:26 am
by phkb
I gave Slackware a spin, but it's minimalist nature was kind of offputting. So I revisited my Mint 20 install. Brand new VM, updated and patched.

Opened a terminal window and began running commands.

Code: Select all

sudo apt install git
git clone https://github.com/OoliteProject/oolite.git
cd oolite
git submodule update --init
sudo apt install libgnustep-base-dev
sudo apt install libsdl1.2-dev
sudo apt install libvorbis-dev
sudo apt install libopenal-dev
sudo apt install libespeak-dev
export GNUSTEP_MAKEFILES=/usr/lib/GNUstep/Makefiles
I was running the make process after each apt install in the list above to see that I was reducing the errors each time.

At this point, a build attempt looks like this:

Code: Select all

nick@Mint20:~/oolite$ make -f Makefile release
make -f GNUmakefile debug=no strip=yes
make[1]: Entering directory '/home/nick/oolite'
This is gnustep-make 2.7.0. Type 'make print-gnustep-make-help' for help.
Running in gnustep-make version 2 strict mode.
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
Making all for objc_program oolite...
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
 Linking objc_program oolite ...
/bin/sh: 1: nspr-config: not found
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
make[4]: *** [/usr/share/GNUstep/Makefiles/Instance/objc.make:79: obj.spk/oolite] Error 1
make[3]: *** [/usr/share/GNUstep/Makefiles/Instance/objc.make:64: internal-objc_program-all_] Error 2
make[2]: *** [/usr/share/GNUstep/Makefiles/Master/rules.make:297: oolite.all.objc-program.variables] Error 2
make[1]: *** [/usr/share/GNUstep/Makefiles/Master/objc.make:36: internal-all] Error 2
make[1]: Leaving directory '/home/nick/oolite'
make: *** [Makefile:115: release] Error 2
So, some sort of issue with "lstdc++".
What I have tried to fix this (unsuccessfully)

Code: Select all

sudo apt install g++mingw-w64-i686
sudo apt install g++mingw-w64
sudo apt install libstdc++-7-dev
sudo apt install libstdc++-10-dev
I also got "apt-file" and tried searching for appropriate packages to install - but sudo apt-file search libstdc++ returns 32000+ entries, which makes it hard to narrow down.

Edit to add:
Just to confirm what libstdc++ versions I have installed:

Code: Select all

nick@Mint20:~/oolite$ sudo apt list --installed libstdc++*
Listing... Done
libstdc++-10-dev/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed]
libstdc++-7-dev/focal,now 7.5.0-6ubuntu2 amd64 [installed]
libstdc++6/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed]
Any suggestions welcome!

Re: Recommendation for a Linux distro for building Oolite

Posted: Tue Sep 07, 2021 6:58 am
by Commander_X
phkb wrote: Tue Sep 07, 2021 3:26 am
I gave Slackware a spin, but it's minimalist nature was kind of offputting. [...]
While "offputting" sounds ok, "minimalist" might be a bit ... stretched :mrgreen:
phkb wrote: Tue Sep 07, 2021 3:26 am
[...]
Linking objc_program oolite ...
/bin/sh: 1: nspr-config: not found
/usr/bin/ld: cannot find -lstdc++
[...]
So, some sort of issue with "lstdc++".
What I have tried to fix this (unsuccessfully)

Code: Select all

sudo apt install g++mingw-w64-i686
sudo apt install g++mingw-w64
sudo apt install libstdc++-7-dev
sudo apt install libstdc++-10-dev
[...]
libstdc++-10-dev/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed]
libstdc++-7-dev/focal,now 7.5.0-6ubuntu2 amd64 [installed]
libstdc++6/focal-updates,focal-security,now 10.3.0-1ubuntu1~20.04 amd64 [installed]
Any suggestions welcome!
You have some sort of issue with libstdc++ _and_ with nspr (-dev) libraries, it seems (for the latter you might want to pass use_deps=yes while running make).

I am not sure why would you install mingw c++ compiler (I guess because it came up due to ++ ?) -- unless you want to compile exes/dlls for windows under Linux.

From the last listing, it seems you successfully installed "-dev" versions 7 and 10 for your libstdc++ (and also have a version 6 runtime only available -- I'd suspect a dependency), and it seems they are not enough. A good way to check what version of "-dev" libstdc++ you need installed, is to check your c++ compiler version ("g++ --version").

I really have no clue what are the versioning principles for Debian based distros, but from your listing I'd suspect that versions 10 and 6 of your libstdc++ are for g++ version 10.3.0 and version 7 is for g++ version 7.5.0. The bottom line is that you'd have to install the version that creates the /usr/lib64/libstdc++.so file for your compiler (usually symbolic link).

Hope this helps.

Re: Recommendation for a Linux distro for building Oolite

Posted: Tue Sep 07, 2021 7:30 am
by phkb
Commander_X wrote: Tue Sep 07, 2021 6:58 am
I am not sure why would you install mingw c++ compiler
Neither am I! I was just trying as many possibilities as I could to try and get things to compile. I've removed them now, anyway.
Commander_X wrote: Tue Sep 07, 2021 6:58 am
check your c++ compiler version
g++ --version revealed I didn't have a g++ compiler installed. sudo apt install g++ sorted that out and I've moved on...

To this:

Code: Select all

 Linking objc_program oolite ...
/bin/sh: 1: nspr-config: not found
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_SetContextThread':
jsapi.cpp:(.text+0x93e): undefined reference to `PR_Unlock'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_DropPrincipals':
jsapi.cpp:(.text+0x122e): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `StartRequest(JSContext*)':
jsapi.cpp:(.text+0x18dd): undefined reference to `PR_Lock'
/usr/bin/ld: jsapi.cpp:(.text+0x1903): undefined reference to `PR_WaitCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x1959): undefined reference to `PR_AtomicIncrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `StopRequest(JSContext*)':
jsapi.cpp:(.text+0x1a2a): undefined reference to `PR_Lock'
/usr/bin/ld: jsapi.cpp:(.text+0x1a7f): undefined reference to `PR_NotifyCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x1a9e): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_TriggerAllOperationCallbacks':
jsapi.cpp:(.text+0x40ac): undefined reference to `PR_Lock'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_TriggerOperationCallback':
jsapi.cpp:(.text+0x431e): undefined reference to `PR_Lock'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JS_ClearContextThread':
jsapi.cpp:(.text+0x4386): undefined reference to `PR_Lock'
/usr/bin/ld: jsapi.cpp:(.text+0x43a7): undefined reference to `PR_Unlock'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsapi.o): in function `JSRuntime::~JSRuntime()':
jsapi.cpp:(.text+0x44fe): undefined reference to `PR_DestroyLock'
/usr/bin/ld: jsapi.cpp:(.text+0x450f): undefined reference to `PR_DestroyCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x4520): undefined reference to `PR_DestroyCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x4531): undefined reference to `PR_DestroyLock'
/usr/bin/ld: jsapi.cpp:(.text+0x4542): undefined reference to `PR_DestroyCondVar'
/usr/bin/ld: jsapi.cpp:(.text+0x4553): undefined reference to `PR_DestroyLock'

...and more like the above...

/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(jsscript.o): in function `js_CallNewScriptHook(JSContext*, JSScript*, JSFunction*)':
jsscript.cpp:(.text+0x43a): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(RegexJIT.o): in function `JSC::Yarr::jitCompileRegex(JSC::ExecutableAllocator&, JSC::Yarr::RegexCodeBlock&, JSLinearString const&, unsigned int&, int&, bool&, bool, bool)':
RegexJIT.cpp:(.text+0x5e5): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: RegexJIT.cpp:(.text+0x8c5): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(RegexCompiler.o): in function `JSC::Yarr::spacesCreate()':
RegexCompiler.cpp:(.text+0x984): undefined reference to `PR_AtomicIncrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(RegexCompiler.o): in function `JSC::Yarr::compileRegex(JSLinearString const&, JSC::Yarr::RegexPattern&)':
RegexCompiler.cpp:(.text+0x19c2): undefined reference to `PR_AtomicDecrement'
/usr/bin/ld: deps/Linux-deps/x86_64/mozilla/libjs_static.a(RegexCompiler.o): in function `JSC::Yarr::CharacterClass::CharacterClass(JSC::Yarr::CharacterClassTable*)':
RegexCompiler.cpp:(.text._ZN3JSC4Yarr14CharacterClassC1EPNS0_19CharacterClassTableE[_ZN3JSC4Yarr14CharacterClassC1EPNS0_19CharacterClassTableE]+0x70): undefined reference to `PR_AtomicIncrement'
collect2: error: ld returned 1 exit status
make[4]: *** [/usr/share/GNUstep/Makefiles/Instance/objc.make:79: obj.spk/oolite] Error 1
make[3]: *** [/usr/share/GNUstep/Makefiles/Instance/objc.make:64: internal-objc_program-all_] Error 2
make[2]: *** [/usr/share/GNUstep/Makefiles/Master/rules.make:297: oolite.all.objc-program.variables] Error 2
make[1]: *** [/usr/share/GNUstep/Makefiles/Master/objc.make:36: internal-all] Error 2
make[1]: Leaving directory '/home/nick/oolite'
make: *** [Makefile:115: release] Error 2

Re: Recommendation for a Linux distro for building Oolite

Posted: Tue Sep 07, 2021 7:36 am
by phkb
And after running one more install

Code: Select all

sudo apt install libnspr4-dev
I got this:

Code: Select all

nick@Mint20:~/oolite$ make -f Makefile release
make -f GNUmakefile debug=no strip=yes
make[1]: Entering directory '/home/nick/oolite'
This is gnustep-make 2.7.0. Type 'make print-gnustep-make-help' for help.
Running in gnustep-make version 2 strict mode.
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
Making all for objc_program oolite...
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
/usr/share/GNUstep/Makefiles/objc.make:30: objc.make is deprecated.  Please use tool.make instead
 Linking objc_program oolite ...
/usr/share/GNUstep/Makefiles/mkinstalldirs oolite.app
/usr/share/GNUstep/Makefiles/mkinstalldirs oolite.app/Resources
tools/mkmanifest.sh > oolite.app/Resources/manifest.plist
cp -rf -u Resources/README.TXT oolite.app/Resources
cp -rf -u Resources/InfoPlist.strings oolite.app/Resources
cp -rf -u Resources/AIs oolite.app/Resources
cp -rf -u Resources/Config oolite.app/Resources
cp -rf -u Resources/Scenarios oolite.app/Resources
cp -rf -u Resources/Scripts oolite.app/Resources
cp -rf -u Resources/Shaders oolite.app/Resources
cp -rf -u Resources/Binary/Images oolite.app/Resources
cp -rf -u Resources/Binary/Models oolite.app/Resources
cp -rf -u Resources/Binary/Music oolite.app/Resources
cp -rf -u Resources/Binary/Sounds oolite.app/Resources
cp -rf -u Resources/Binary/Textures oolite.app/Resources
cp -rf -u Schemata oolite.app/Resources
cp -rf -u src/Cocoa/Info-Oolite.plist oolite.app/Resources/Info-gnustep.plist
cp -rf -u obj.spk/oolite oolite.app/oolite
strip oolite.app/oolite
make[1]: Leaving directory '/home/nick/oolite'
mkdir -p AddOns && rm -rf AddOns/Basic-debug.oxp && cp -rf DebugOXP/Debug.oxp AddOns/Basic-debug.oxp
Very close now, I think!

Re: Recommendation for a Linux distro for building Oolite

Posted: Tue Sep 07, 2021 7:42 am
by phkb
Running the app gives me this:
Image
I seem to recall seeing someone else with this issue somewhere. I'll try and find the thread and post back.

Edit: I think this thread is the one, although my attempt to implement the solution hasn't worked yet. Still playing though.

Re: Recommendation for a Linux distro for building Oolite

Posted: Tue Sep 07, 2021 8:10 am
by phkb
Well, that thread is the same one, as I'm getting the same error in the log file:
18:07:02.527 [texture.load.png.warning]: ----- A PNG loading warning occurred for (null): Application built with libpng-1.4.7 but running with 1.6.37.
However, the solution in that thread didn't work for me.
Commander_X wrote: Fri Apr 09, 2021 7:04 pm
Fixing the PNG loading issue is mainly related with starting up Oolite.
Here are the main steps (for a terminal window):
1. create a "deps" folder in the same folder where your oolite executable is
2. copy libpng14.so.* from "<oolite_source_root_folder>/deps/Linux-deps/x86_64/lib" to this folder
3. make sure you are in the oolite executable file's folder, and run:

Code: Select all

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:deps ./oolite
This should let the runtime linker know of the "deps" folder as a source for dynamic libraries, and load the PNG library Oolite was compiled with and expects.
Same errors in the log after doing this. Did I miss a step?

Re: Recommendation for a Linux distro for building Oolite

Posted: Tue Sep 07, 2021 8:18 am
by phkb
Solved!
Image

And this seemed to be the trick that made it work:
vaxon wrote: Tue Oct 13, 2020 1:51 am
Eventually resolved the problem by removing png headers from deps:

Code: Select all

rm deps/Linux-deps/include/png*
Doing that, and rebuilding, got it working! No idea why, though. But I'm just going to plough on regardless.

Re: Recommendation for a Linux distro for building Oolite

Posted: Tue Sep 07, 2021 8:23 am
by phkb
OK, one last error being reported, although I think it's fairly minor:
18:21:19.440 [texture.load.png.warning]: ----- A PNG loading warning occurred for /home/nick/oolite/oolite.app/Resources/Textures/trumblekit.png: iCCP: profile 'ICC Profile': 'RGB ': RGB color space not permitted on grayscale PNG.
Again, I seem to recall that was reported once before. I'll try to track the thread down.

Edit: It was this thread, although cim seems to indicate it was a bug which was fixed in 1.81. So, not sure on this one. Anyway, i've got my Linux build now, so ultimately I'm really happy. Thanks Commander_X, for your help with this.

Re: Recommendation for a Linux distro for building Oolite

Posted: Tue Sep 07, 2021 9:01 am
by Cody
<applauds>