Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Version History

« Previous Version 2 Next »

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 into libpng-mingw-w64 and libusb-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/

  • 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/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:

    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 doxygen

  • In 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

  • No labels