Building Fritzing 1.0.1 for Slackware 15

16 November 2023
There is plenty of PCB design software out there but when it comes to laying out prototyping board the only game in town is Fritzing, which has this odd arrangement of being open source but anyone wanting to download pre-compiled binaries basically needs to buy them. I am not fond of pre-compiled Linux software as they almost always assume RedHat or Ubuntu whereas I use Slackware, so I have to compile it for myself anyway. Having decided to update my copy to see if they have finally fixed some annoying bugs, I kept track of all the steps and present them here.

Getting all the bits

The first thing to do is get all the bits that Fritzing needs together, and this includes the building of some third-party dependencies. It is assumed that everything is being built within a directory and here fritzing-src is used as a place-holder. Go into it and clone the Fritzing source and resource files with the following commands.

mkdir fritzing-src cd fritzing-src git clone https://github.com/fritzing/fritzing-app.git git clone https://github.com/fritzing/fritzing-parts.git

Fritzing's build system statically links to its dependencies so it expects them to be side-by-side with the Fritzing source directory, rather than making use of any system-installed versions. In total there should be six sub-directories containing various parts within fritzing-src:

libgit2

At time of writing the very out-of-date Fritzing build documentation mentions getting v0.28.x of libgit2 but I went ahead and just got the latest v1.7.1 instead. Rather being installed onto the system it needs to be compiled in a directory next to fritzing-app as Fritzing will statically link to it. The following gets it into the state it needs for Fritzing to make use of it:

tar -xzvf libgit2-1.7.1.tar.gz mv libgit2-1.7.1 libgit2 cd libgit2 mkdir build cd build cmake -DBUILD_SHARED_LIBS=OFF .. make -j12 cd ../..

quazip

As with libgit2 this needs to be next to fritzing-app and in a sub-directory with a specific name:

git clone https://github.com/stachenov/quazip.git quazip_qt5 cd quazip_qt5 cmake -S . -B build -D QUAZIP_QT_MAJOR_VERSION=5 cmake --build build cd ..

ngspice

This one is really easy — the ngspice source code just needs to be in the right place and the Fritzing build system dips into it as-needed.

https://sourceforge.net/projects/ngspice/files/ng-spice-rework/40/ngspice-40.tar.gz tar -xzvf ngspice-40.tar.gz

Some manual fixups

For some crazy reason Fritzing makes use of the device() member function of the QtInputEvent class that was not introduced until Qt6 but trying to compile Fritzing with Qt6 throws a rather odd error message referring to versions of Qt5. The following hack probably breaks something somewhere but it is the only way I could see of getting the code to compile without having to dive deep into working out what it is actually doing.

--- src/sketch/zoomablegraphicsview.cpp.orig +++ src/sketch/zoomablegraphicsview.cpp @@ -86,7 +86,7 @@ // qDebug() << "capabilities" << event->device()->capabilities(); // qDebug() << "has pixelscroll" << event->device()->hasCapability(QInputDevice::Capability::PixelScroll); // qDebug() << "system id" << event->device()->systemId(); - qint64 systemId = event->device()->systemId(); + qint64 systemId = -1; // event->device()->systemId(); if (!m_acceptWheelEvents) { QGraphicsView::wheelEvent(event);

In addition within Makefile.Release some changes are also needed. The extra include directories -I../quazip_qt5/quazip and -I../svgpp/include need to be appended to the end of the INCPATH parameter, and -lpcre needs to be appended to LIBS. A very ugly approach and I am sure there is a more correct way of sorting these out, but these hacks were the most expedient way of getting things working.

Building & running Fritzing

With everything now in the the build process for Fritzing itself can be started using the following commands. Using multiple cores it should only take only a few minutes on a reasonably recently system.

cd fritzing-app qmake make -j12

This creates a self-contained binary Fritzing which is about 14 megabytes and for installation I copied it to /opt/fritzing/Fritzing and alongside it put the parts library as /opt/fritzing/fritzing-parts. I then run it using the following shell-script although I have the suspicion that the -parts parameter is actually redundant.

#!/bin/bash /opt/fritzing/Fritzing -f /opt/fritzing/fritzing-parts -parts /opt/fritzing/fritzing-parts

It is probably a good idea to back up any previous settings. Fritzing seems to use a conbination of ~/Documents/Fritzing, ~/.config/Fritzing, and ~/.local/share/Fritzing for its various files.

Remarks

When building a circuit on strip-board laying it out first is critical due to the need for track cuts, which in itself is an effort that easily matches the soldering of components into place. Even for various other types of prototyping board that do not require such cutting such as the integrated-circuit orientated Multicomp MC01010 it is useful in order to see if all the component will fit onto the board. However it is of limited use with perf-board since using wires as place-holder for solder tracks on the copper underside does not work well in practice, especially in cases where components are expected to be tightly packed, and tightly packed perf-boards is exactly what a lot of my more recent circuits have been. Overall Fritzing is a bit of a pain to build and use but it is the only prototpying board software that is even remotely usable.