NOTE: DRAFT / WORK-IN-PROGRESS / INCOMPLETE
...
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’s libusb and 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:
Code Block cd ~/debs mkdir libz cd libz
Then grab the libz source package with:
apt source libusblibz-1.0mingw-0w64
This will retrieve the following:libusb-1.0libz-mingw-w64-1.02.2311+dfsg/… (lots of files in here)libusb-1.0_1.0.23
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.bz2libusb-1.0xz
Make a copy of the libz folder as libusb:
Code Block 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:
23-2build1.debianmv 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>”:
23-2build1.dscmv 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:Code Block language m mkdir debian cp ../libz-mingw-w64-1.2.11+dfsg/debian/rules debian/
Create an initial changelog file with:
dch --create -v1.0.23.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/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:Code Block language m mkdir debian/source cp ../libz-mingw-w64-1.2.11+dfsg/debian/source/format debian/source/
Step 4: Build the package
Let's try building with:
debuild -us -uc
Google around for any issues that arise on each build attempt…
Edit the
debian/rules
file and add the following stuff in green:
CFLAGS="$(CFLAGS) -Os" CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ dh_auto_configure --builddirectory build-udeb -- --libdir=\$${prefix}/lib/Run
debuild -us -uc
and make note of any errors spotted there. E.g. for me:
dpkg-checkbuilddeps: error: Unmet build dependencies: debhelper (>= 12.4) libudev-dev doxygenIn this case, I just needed to install a few dependencies:
sudo apt install debhelper libudev-dev doxygen
If you get an error like this:
/usr/bin/x86_64-w64-mingw32-ld: unrecognized option '-z'Edit the following files and remove and reference to
-Wl,-z,relro
build-deb/Makefile
build-deb/tests/Makefile
build-deb/libusb/Makefile
build-deb/examples/Makefile
build-deb/doc/Makefile
...