Creating libusb / libpng .deb packages
NOTE: this is mostly obsolete, as the new build process uses docker and inside of it the conan package management system to install the required mingw libs.
See GitHub builder-docker repository for more information.
NOTE: DRAFT / WORK-IN-PROGRESS / INCOMPLETE
I built these two package on Ubuntu Focal (as that’s what our Travis build server uses for linux builds) and will outline some of my journey below.
Building packages is a fickle process, many build attempts, many errors, and googling of errors and working around things. So while I share the tweaks I found myself needing in my journey, you may find yourself needing various other tweaks on your journey
Much of my learnings stemmed from the following pages:
Install the debian package building scripts with:
sudo apt install devscripts
Install mingw compilers with:
sudo apt install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 gcc-mingw-w64 g++-mingw-w64
cd ~
mkdir debs
cd debs
I think one fruitful path I took was to make use of an existing
*-mingw-w64
source package file, study how it was structured, then slowly tweak/modify it to transform it into a package for another program.E.g., I think I did this when I used ubuntu’s
libz-mingw-w64
package and tweaked it intolibpng-mingw-w64
andlibusb-mingw-w64
packages.I’ll now retrieve Ubuntu focal’s
libz-mingw-w64
.dsc (source package) file with:Run
software-properties-gtk
Under the
Ubuntu software
tab, check(x) Source code
Click ‘OK’ button
Back in a console, then type:
cd ~/debs mkdir libz cd libz
Then grab the libz source package with:
apt source libz-mingw-w64
This will retrieve the following:libz-mingw-w64-1.2.11+dfsg/… (lots of files in here)
libz-mingw-w64_1.2.11+dfsg-2.debian.tar.xz
libz-mingw-w64_1.2.11+dfsg-2.dsc
libz-mingw-w64_1.2.11+dfsg.orig.tar.xz
Make a copy of the libz folder as libusb:
cd .. cp -r libz libusb cd libusb
Step 1: Rename the upstream tarball
I’ll grab the desired version of libusb from their site:
wget https://github.com/libusb/libusb/archive/refs/tags/v1.0.24.tar.gz
Rename the source tar file to debian standards:
mv v1.0.24.tar.gz libusb-mingw-w64_1.0.24.orig.tar.gz
Delete the libz source tar:
rm libz-mingw-w64_1.2.11+dfsg.orig.tar.xz
Step 2: Unpack the upstream tarball
Extract it with:
tar xvf libusb-mingw-w64_1.0.24.orig.tar.gz
Rename extracted folder name to match “<source-package-name>-<upstream-version-number>”:
mv libusb-1.0.24 libusb-mingw-w64-1.0.24
Step 3: Add the Debian packaging files
cd libusb-mingw-w64-1.0.24
Copy the
debian/rules
file from libz into libusb:mkdir debian cp ../libz-mingw-w64-1.2.11+dfsg/debian/rules debian/
NOTE: This turned out to be a bad idea, since libz compiles very differently to libusb. In the end, I think it was better to borrow the build logic from a libpng-mingw package instead, which was closer.
https://launchpad.net/~tobydox/+archive/ubuntu/mingw-w64/+sourcefiles/libpng-mingw-w64/1.6.37-2.1/libpng-mingw-w64_1.6.37-2.1.diff.gz
I borrowed the logic inside the diff.gz file’s diff output for thedebian/rules
file and copied it to my libusb instead… It still needed several tweaks after this:Edit the
debian/rules
file and remove any mention of--disable-static
in it.Search for any references to ‘libpng’ within the file and aim to replace them with ‘libusb’
Some of these tweaks might relate to the upstream tar file, so assess if the filename matches what you have. If not, tweak the reference in this file to make it match what you have.
Create an initial changelog file with:
dch --create -v1.0.24-1 --package libusb-mingw-w64
You’ll need to pick you’re favourite editor from a list and then edit the default contents.
Be sure to replace the default email address with your own valid one (otherwise there will be build errors later)
Save the file and exit your editor
Copy across the
debian/compat
file:cp ../libz-mingw-w64-1.2.11+dfsg/debian/compat debian/
Copy across the
debian/copyright
file:cp ../libz-mingw-w64-1.2.11+dfsg/debian/copyright debian/
Copy across the
debian/control
file:cp ../libz-mingw-w64-1.2.11+dfsg/debian/control debian/
It contains descriptions for one source and two packages.
Try update these details to suit ‘libusb’, put your own name as maintainer.
You can remove those Vcs-Browser/Vcs-Git/Homepage lines if you can’t be bothered chasing up those details.
Search for the term ‘libz’ and sure any past references to it are now saying ‘libusb’
Copy across the
debian/source/format
file:
Step 4: Build the package
Let's try building with:
debuild -us -uc
Google around for any issues that arise on each build attempt…
Try open the generated .deb file in an archive browser to assess whether the built binaries are in the desired locations
Try install the package and build a mega65-tools mingw target, and see if you get any errors:
If you get errors, uninstall the .deb, tweak your
debian/*
files some more, google some more, try calldebuild -us -uc
again, try un-install your old .deb and install your new one, then run the make .exe again. Rinse and repeat…
Some tweaks I recall making
I had to add a
debian/source/include-binaries
file consisting of:(this was to assure those files were included inside the .deb package, as they’re not in the typical
lib/
location)
From inside
debian/control
, I removed thePackage: libusb-mingw-w64
section, as when I inspected its contents, it had nothing significant in it.
Sharing these .deb files via a package repository
I had a prior attempt at this at the following location:
It was working fine for a while, but after a year passed, the certificate expired and I had no memory of the password I set or how to update the certificate.
So for now, I’ll just manually share the newly-generated .deb file here:
- http://gurce.net/ubuntu/libusb-mingw-w64_1.0.24-1_amd64.deb
Later on, I’ll try remake the .deb package repository, and get better acquainted with these certificate shenanigans…