Build Cura 2 on Linux

I’m looking to build Cura 2 Lulzbot edition on Arch Linux.

I found the build scripts (https://code.alephobjects.com/source/Cura2build/) and source code (https://code.alephobjects.com/source/Cura2/)

I am attempting to build and I think I’m having some dependency issues. I’ve installed gcc-fortran and python35 from the AUR. I’m building from the v2.6.18 tag with the following commands as per the guide on the README https://code.alephobjects.com/source/Cura2build/browse/master/;v2.6.18

cmake -DMINIMUM_PYTHON_VERSION=3.4.0 -DCURA_TAG_OR_BRANCH=devel -DURANIUM_TAG_OR_BRANCH=devel ..
make

This is as far as I’ve gotten in the build process.

 
 OpenBLAS build complete. (BLAS CBLAS LAPACK LAPACKE)

  OS               ... Linux             
  Architecture     ... x86_64               
  BINARY           ... 64bit                 
  C compiler       ... GCC  (command line : gcc)
  Fortran compiler ... GFORTRAN  (command line : gfortran)
  Library Name     ... libopenblasp-r0.2.20.dev.a (Multi threaded; Max num-threads is 16)

To install the library, you can run "make PREFIX=/path/to/your/installation install".

[ 15%] Performing install step for 'OpenBLAS'
make[3]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
make[3]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
Generating openblas_config.h in /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/include
Generating f77blas.h in /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/include
Generating cblas.h in /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/include
Copying LAPACKE header files to /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/include
Copying the static library to /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/lib
Copying the shared library to /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/lib
Generating openblas.pc in /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/lib/pkgconfig
Generating OpenBLASConfig.cmake in /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/lib/cmake/openblas
Generating OpenBLASConfigVersion.cmake in /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/lib/cmake/openblas
Install OK!
[ 15%] Completed 'OpenBLAS'
[ 15%] Built target OpenBLAS
make: *** [Makefile:106: all] Error 2

Update 2017-07-23
I’ve made some progress by switching to the system version of python specifying a tag.

makedepends=('cmake'
             'gcc-fortran'
             'libx11'
             'libxcb'
             'pkg-config'
             'python'
             'python-numpy'
             'python-opengl'
             'python-qtpy'
             'python-pyserial'
             'python-setuptools'
             'qt5-quickcontrols'
             'qt5-tools'
             'zlib')



cmake -DCURA_TAG_OR_BRANCH=v2.6.18 -DURANIUM_TAG_OR_BRANCH=v2.6.18 ..



Info: creating cache file /home/hs/builds/cura-2-lulzbot/src/Cura2build/build/Qt-prefix/src/Qt/qtquickcontrols/.qmake.cache
[ 27%] Performing install step for 'Qt'
strip:/home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/bin/fixqt4headers.pl: File format not recognized
strip:/home/hs/builds/cura-2-lulzbot/src/Cura2build/build/inst/bin/syncqt.pl: File format not recognized
[ 27%] Completed 'Qt'
[ 27%] Built target Qt
make: *** [Makefile:106: all] Error 2

Please have a look at
https://code.alephobjects.com/source/Cura2build/browse/master/build_deb_package.sh
You’d need to make a build dir before executing it.
This will build all the external packages by default including Python, Qt, PyQt, OpenBLAS, Numpy, SciPy etc.
You can add -DBUILD_XXXX=OFF options to cmake if you want to try to use external packages.
All the build options are defined in the beginning of
https://code.alephobjects.com/source/Cura2build/browse/master/CMakeLists.txt
Lines 11-33.
The resulting cx_freeze code should appear in build/dist (and you can run cura from it actually without installing the deb package).
The pre-frozen install for all the packages will be in build/inst .

GoodLuck!

I think I’ve gotten a bit farther but it looks like there may be an issue with openssl. Perhaps you are using 1.0 where as Arch Linux uses 1.1.

Build commands:

cmake -DMINIMUM_PYTHON_VERSION=3.6.0 -DCURA_TAG_OR_BRANCH="v$pkgver" -DURANIUM_TAG_OR_BRANCH="v$pkgver" ..
make

The tail end of the build log:

In file included from /usr/include/openssl/crypto.h:31:0,
                 from /usr/include/openssl/comp.h:16,
                 from /usr/include/openssl/ssl.h:47,
                 from ../../include/QtNetwork/5.9.1/QtNetwork/private/../../../../../src/network/ssl/qsslcontext_openssl_p.h:60,
                 from ../../include/QtNetwork/5.9.1/QtNetwork/private/qsslcontext_openssl_p.h:1,
                 from ssl/qsslsocket_p.h:62,
                 from ssl/qsslkey_p.h:57,
                 from ssl/qsslkey_openssl.cpp:42:
/usr/include/openssl/ossl_typ.h:107:16: note: forward declaration of ‘DSA {aka struct dsa_st}’
 typedef struct dsa_st DSA;
                ^~~~~~
ssl/qsslkey_openssl.cpp: In function ‘QByteArray doCrypt(QSslKeyPrivate::Cipher, const QByteArray&, const QByteArray&, const QByteArray&, int)’:
ssl/qsslkey_openssl.cpp:276:20: error: aggregate ‘EVP_CIPHER_CTX ctx’ has incomplete type and cannot be defined
     EVP_CIPHER_CTX ctx;
                    ^~~
make[6]: *** [Makefile:25576: .obj/qsslkey_openssl.o] Error 1
make[5]: *** [Makefile:246: sub-network-make_first] Error 2
make[5]: *** Waiting for unfinished jobs....
make[4]: *** [Makefile:49: sub-src-make_first] Error 2
make[3]: *** [Makefile:52: module-qtbase-make_first] Error 2
make[2]: *** [CMakeFiles/Qt.dir/build.make:114: Qt-prefix/src/Qt-stamp/Qt-build] Error 2
make[1]: *** [CMakeFiles/Makefile2:786: CMakeFiles/Qt.dir/all] Error 2
make: *** [Makefile:106: all] Error 2
==> ERROR: A failure occurred in build().
    Aborting...

@HarlemSquirrel,
The issue is that Qt5.9 doesn’t build with openssl 1.1, it only builds with 1.0
https://wiki.qt.io/Qt_5.9_Tools_and_Versions

The solution we came up with was to use
https://packages.debian.org/stretch/libssl1.0-dev
under Debian on build machine and bundle SSL into the Qt.

The other solution is to disable SSL in Qt build for Linux also:
https://code.alephobjects.com/source/Cura2build/browse/master/CMakeLists.txt;868570cf0595afada74d8df242f09bea2fa6d96d$417
But this has a draw-back because plugins that are using HTTPS (like Octoprint) will not work.

Qt5.10 will build with openssl1.1 but it wasn’t released yet.

@alexei

Thanks for the update. There is an openssl 1.0 package for arch but I’m not sure how to specify this version be used during the build.

https://www.archlinux.org/packages/core/x86_64/openssl-1.0/

I may have found something in how the current Arch Linux qt5-base package is build with `export OPENSSL_LIBS=’-L/usr/lib/openssl-1.0 -lssl -lcrypto’

https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/qt5-base