Building Fritzing 1.0.1 for Slackware 15
16 November 2023There 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 herefritzing-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 withinfritzing-src
:
- fritzing-app
- fritzing-parts
- libgit2
- ngspice-40
- quazip_qt5
- svgpp
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 tofritzing-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 tofritzing-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.wget https://sourceforge.net/projects/ngspice/files/ng-spice-rework/old-releases/40/ngspice-40.tar.gz tar -xzvf ngspice-40.tar.gz
(Added 24 June 2024): Download URL updated
Some manual fixups
For some crazy reason Fritzing makes use of thedevice()
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 MulticompMC01010
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.