The officially official Devuan Forum!

You are not logged in.

#1 2025-05-02 10:48:50

igorzwx
Member
Registered: 2024-05-06
Posts: 130  

How to build a portable wxMaxima-25.04.0 and a Debian package for it.

$ inxi -b | grep Host -A1
  Host: devuan Kernel: 6.1.0-34-amd64 arch: x86_64 bits: 64 Desktop: MATE
    v: 1.26.0 Distro: Devuan GNU/Linux 5 (daedalus)
How to build portable standalone wxMaxima-25.04.0 and wxMaxima-25.04.0.deb

NOTE: It is "portable standalone" in the sense that it does not require installation.
Just click on it and use. You can also start it from terminal, or create a deskto launcher wxMaxima.desktop

$ ./_CPack_Packages/Linux/DEB/wxMaxima-25.04.0-Linux/usr/bin/wxmaxima --version
wxMaxima 25.04.0 (Git version: 735a94e3a)

_https://github.com/wxMaxima-developers/wxmaxima/releases/tag/Version-25.04.0
wxMaxima 25.04.0  Latest
A bugfix release

https://github.com/wxMaxima-developers/wxmaxima.git
Build dependencies

To build wxMaxima-25.04.0.deb, we need CMake 4.0.1
There is a portable standalone version of CMake 4.0.1 in GitHub.
The manual for it is here:

https://dev1galaxy.org/viewtopic.php?id=7161

You can simply download and unpack it into your home folder, for example:

$ ls -1 $HOME/.CTools/
cmake-4.0.1
meson-1.7.2 

Download portable CMake v4.0.1:

https://github.com/Kitware/CMake/releases/download/v4.0.1/cmake-4.0.1-linux-x86_64.tar.gz 

Install "build-essential", build dependencies, etc.:

sudo apt install build-essential debhelper

sudo apt install libwxgtk3.2-dev xvfb netcat-openbsd xauth desktop-file-utils appstream-util libwxgtk-webview3.2-dev libwebkit2gtk-4.0-dev 

sudo apt install fakeroot dpkg-repack git sed tree maxima appstream pandoc po4a imagemagick doxygen texlive-xetex

Clone the source from git:

mkdir wxmaxima2504_build
cd wxmaxima2504_build

git clone https://github.com/wxmaxima-developers/wxmaxima.git 
$ ls
wxmaxima

Project: wxMaxima-25.04.0 (GitHub)

Create DEB_config.cmake

nano ./wxmaxima/DEB_config.cmake 
$ cat ./wxmaxima/DEB_config.cmake
# these are cache variables, so they could be overwritten with -D,
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}
    CACHE STRING "The resulting package name"
)
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}
    CACHE STRING "Package description for the package metadata"
)
set(CPACK_VERBATIM_VARIABLES TRUE)

set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")

set(CPACK_PACKAGE_VERSION "${WXMAXIMA_VERSION}")
set(CPACK_DEBIAN_PACKAGE_RELEASE "1")

set(CPACK_DEBIAN_PACKAGE_MAINTAINER Devuan
    CACHE STRING "Package MAINTAINER"
)
# AUTO-Deps: autogenerate dependency information
set (CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)

list(APPEND CPACK_DEBIAN_PACKAGE_DEPENDS maxima)
set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "maxima-doc, fonts-inter, fonts-inter-variable, fonts-texgyre, fonts-texgyre-math, fonts-dejavu")
set(CPACK_DEBIAN_PACKAGE_SUGGESTS "fonts-jsmath, texlive-latex-extra, ibus-gtk3")
set(CPACK_DEBIAN_PACKAGE_SECTION math)

set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
# set(CPACK_SOURCE_GENERATOR "TBZ2;TGZ;TXZ;TZ")
list(APPEND CPACK_SOURCE_IGNORE_FILES "/\.git*")

include(CPack)

Find the "CMakeLists" of the main project:

$ ls ./wxmaxima | grep CMakeLists
CMakeLists.txt 

To enable the DEB_config.cmake in the main project, append these lines:

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
include(DEB_config.cmake) 

to the end of the file ./wxmaxima/CMakeLists.txt. This can be done with a text editor, or echo  command:

$ echo -e '\n\nset(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})\ninclude(DEB_config)' >> ./wxmaxima/CMakeLists.txt

$ tail -3 ./wxmaxima/CMakeLists.txt

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
include(DEB_config) 

Enable portable CMake 4.0.1

$ cmake --version
cmake version 3.25.1
export PATH="$HOME/.CTools/cmake-4.0.1/bin:$PATH"
$ cmake --version
cmake version 4.0.1

1. Generate the Project Buildsystem

cmake -S wxmaxima -B build -DCMAKE_BUILD_TYPE="Release" -DCPACK_DEBIAN_PACKAGE_MAINTAINER=Daedalus -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=g++ -DwxWidgets_CONFIG_EXECUTABLE=/usr/bin/wx-config -Wno-dev 
$ ls -1
build
wxmaxima

2. Build the Project

cmake --build build  

3. Make the Debian package with CPack

$ ls ./build | grep Config.cmake
CPackConfig.cmake
CPackSourceConfig.cmake 
$ cpack --config build/CPackConfig.cmake -G DEB
CPack: Create package using DEB
CPack: Install projects
CPack: - Run preinstall target for: wxMaxima
CPack: - Install project: wxMaxima []
CPack: Create package
CPackDeb: - Generating dependency list
CPack: - package: /home/.../wxmaxima2504_build/wxmaxima_25.04.0-1_amd64.deb generated. 

Generate the source package with CPack

$ cpack -G TGZ -DCPACK_PACKAGING_INSTALL_PREFIX="/" --config build/CPackSourceConfig.cmake
CPack: Create package using TGZ
CPack: Install projects
CPack: - Install directory: /home/igor/Desktop/Builds/Builds_wxMaxima/Build_wxmaxima_25.01.0_GIT/wxmaxima2504_build/wxmaxima
CPack: Create package
CPack: - package: /home/.../wxmaxima2504_build/wxMaxima-25.04.0-Source.tar.gz generated.
$ ls -1
build
_CPack_Packages
wxmaxima
wxmaxima_25.04.0-1_amd64.deb
wxMaxima-25.04.0-Source.tar.gz
$ dpkg-deb -f *.deb
Architecture: amd64
Depends: maxima, libc6 (>= 2.34), libgcc-s1 (>= 3.0), libstdc++6 (>= 11), libwxbase3.2-1 (>= 3.2.2+dfsg), libwxgtk-webview3.2-1 (>= 3.2.2+dfsg), libwxgtk3.2-1 (>= 3.2.1+dfsg-2)
Description: wxMaxima is a document based interface for the computer algebra system Maxima.
Homepage: https://wxmaxima-developers.github.io/wxmaxima/
Maintainer: Daedalus
Package: wxmaxima
Priority: optional
Recommends: maxima-doc, fonts-inter, fonts-inter-variable, fonts-texgyre, fonts-texgyre-math, fonts-dejavu
Section: math
Suggests: fonts-jsmath, texlive-latex-extra, ibus-gtk3
Version: 25.04.0-1
Installed-Size: 15154

Install wxMaxima

sudo dpkg -i wxmaxima_25.04.0-1_amd64.deb 
$ wxmaxima --version
wxMaxima 25.04.0 (Git version: 735a94e3a)
$ apt show wxmaxima
Package: wxmaxima
Version: 25.04.0-1
Status: install ok installed
Priority: optional
Section: math
Maintainer: Daedalus
Installed-Size: 15.5 MB
Depends: maxima, libc6 (>= 2.34), libgcc-s1 (>= 3.0), libstdc++6 (>= 11), libwxbase3.2-1 (>= 3.2.2+dfsg), libwxgtk-webview3.2-1 (>= 3.2.2+dfsg), libwxgtk3.2-1 (>= 3.2.1+dfsg-2)
Recommends: maxima-doc, fonts-inter, fonts-inter-variable, fonts-texgyre, fonts-texgyre-math, fonts-dejavu
Suggests: fonts-jsmath, texlive-latex-extra, ibus-gtk3
Homepage: https://wxmaxima-developers.github.io/wxmaxima/
Download-Size: unknown
APT-Manual-Installed: yes
APT-Sources: /var/lib/dpkg/status
Description: wxMaxima is a document based interface for the computer algebra system Maxima.

The project directory wxmaxima2504_build:

$ ls -1
build
_CPack_Packages
wxmaxima
wxmaxima_25.04.0-1_amd64.deb
wxMaxima-25.04.0-Source.tar.gz
■  What was built seems to be a sort of portable standalone wxMaxima.
./_CPack_Packages/Linux/DEB/wxMaxima-25.04.0-Linux/usr/bin/wxmaxima

Just click on it and use.

$ ./_CPack_Packages/Linux/DEB/wxMaxima-25.04.0-Linux/usr/bin/wxmaxima --version
wxMaxima 25.04.0 (Git version: 735a94e3a)

It should work on any Linux with "NEEDED" shared libraries installed:

$ readelf --dynamic ./_CPack_Packages/Linux/DEB/wxMaxima-25.04.0-Linux/usr/bin/wxmaxima | grep NEEDED
 0x0000000000000001 (NEEDED)             Shared library: [libwx_gtk3u_richtext-3.2.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libwx_gtk3u_aui-3.2.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libwx_gtk3u_webview-3.2.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libwx_baseu_net-3.2.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libwx_baseu_xml-3.2.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libwx_gtk3u_core-3.2.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libwx_baseu-3.2.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
$ readelf --dynamic ./_CPack_Packages/Linux/DEB/wxMaxima-25.04.0-Linux/usr/bin/wxmaxima | grep NEEDED | sort | uniq -u | sed -e 's/ /\n/g' | sed -n '/\[l/p' | sed -e 's/\]/ /g' | sed -e 's/\[//g' | tee wxMaxima-git_DEPs_libs.txt
libc.so.6 
libgcc_s.so.1 
libm.so.6 
libstdc++.so.6 
libwx_baseu-3.2.so.0 
libwx_baseu_net-3.2.so.0 
libwx_baseu_xml-3.2.so.0 
libwx_gtk3u_aui-3.2.so.0 
libwx_gtk3u_core-3.2.so.0 
libwx_gtk3u_richtext-3.2.so.0 
libwx_gtk3u_webview-3.2.so.0 

You can verify all dependencies, for example:

$ apt-file search libwx_gtk3u_richtext-3.2.so.0
libwxgtk3.2-1: /usr/lib/x86_64-linux-gnu/libwx_gtk3u_richtext-3.2.so.0
libwxgtk3.2-1: /usr/lib/x86_64-linux-gnu/libwx_gtk3u_richtext-3.2.so.0.2.0 
$ apt info wxmaxima | grep Depends
Depends: maxima, libc6 (>= 2.34), libgcc-s1 (>= 3.0), libstdc++6 (>= 11), libwxbase3.2-1 (>= 3.2.2+dfsg), libwxgtk-webview3.2-1 (>= 3.2.2+dfsg), libwxgtk3.2-1 (>= 3.2.1+dfsg-2)

Notice that wxMaxima is a GUI for Maxima. It does depends on Maxima, in this sense.

Last edited by igorzwx (2025-05-02 12:45:23)

Offline

Board footer