Packaging

Packaging Chordcat

Please refer to Building From Source before reading this page.

Debian

Currently the CMakeLists.txt file only contains instructions to package for debian.

Here are the commands to build a deb package. We have to set the install prefix or else it will be installed to /usr/local (which is for locally compiled packages).

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr
cmake --build . -j$(nproc)
cpack -V -C Release

You should find a chordcat_<version_number>_<arch>.deb in the build directory

Windows

You need to have MSYS2 installed to package for windows. Refer to Building From Source page of the chordcat user manual.

Configure the project with cmake like so:

We need to set the Install Prefix as CMake defaults to Program Files (x86). Also, we need to add the -mwindows flag so that GCC can replace main with WinMain.

cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="C:/Program Files/chordcat" -DCMAKE_CXX_FLAGS="-mwindows"

Now, you need to copy all the required DLLs from /ucrt64/bin to the build directory. Here is the ldd output on my machine:

shriram@tersbox UCRT64 ~/chordcat/build
$ ldd chordcat.exe | grep -v Windows
        libfluidsynth-3.dll => /ucrt64/bin/libfluidsynth-3.dll (0x7ffd741a0000)
        libgcc_s_seh-1.dll => /ucrt64/bin/libgcc_s_seh-1.dll (0x7ffd97470000)
        libwinpthread-1.dll => /ucrt64/bin/libwinpthread-1.dll (0x7ffd8dbd0000)
        libstdc++-6.dll => /ucrt64/bin/libstdc++-6.dll (0x7ffd6c130000)
        libintl-8.dll => /ucrt64/bin/libintl-8.dll (0x7ffd835e0000)
        libsfml-graphics-2.dll => /ucrt64/bin/libsfml-graphics-2.dll (0x7ffd74820000)
        libsfml-audio-2.dll => /ucrt64/bin/libsfml-audio-2.dll (0x7ffd85310000)
        libsfml-system-2.dll => /ucrt64/bin/libsfml-system-2.dll (0x7ffd8d440000)
        libsfml-window-2.dll => /ucrt64/bin/libsfml-window-2.dll (0x7ffd7ebe0000)
        libgmodule-2.0-0.dll => /ucrt64/bin/libgmodule-2.0-0.dll (0x7ffd99b80000)
        libportaudio.dll => /ucrt64/bin/libportaudio.dll (0x7ffd78f80000)
        libgomp-1.dll => /ucrt64/bin/libgomp-1.dll (0x7ffd78390000)
        libglib-2.0-0.dll => /ucrt64/bin/libglib-2.0-0.dll (0x7ffd6c750000)
        libreadline8.dll => /ucrt64/bin/libreadline8.dll (0x7ffd77d90000)
        SDL2.dll => /ucrt64/bin/SDL2.dll (0x7ffd5eab0000)
        libsndfile-1.dll => /ucrt64/bin/libsndfile-1.dll (0x7ffd6ca10000)
        libiconv-2.dll => /ucrt64/bin/libiconv-2.dll (0x7ffd5ee50000)
        libfreetype-6.dll => /ucrt64/bin/libfreetype-6.dll (0x7ffd5e9e0000)
        libogg-0.dll => /ucrt64/bin/libogg-0.dll (0x7ffd88750000)
        libFLAC.dll => /ucrt64/bin/libFLAC.dll (0x7ffd76ee0000)
        libopenal-1.dll => /ucrt64/bin/libopenal-1.dll (0x7ffd4b1d0000)
        libvorbis-0.dll => /ucrt64/bin/libvorbis-0.dll (0x7ffd76e10000)
        libvorbisenc-2.dll => /ucrt64/bin/libvorbisenc-2.dll (0x7ffd6e370000)
        libvorbisfile-3.dll => /ucrt64/bin/libvorbisfile-3.dll (0x7ffd83ca0000)
        libpcre2-8-0.dll => /ucrt64/bin/libpcre2-8-0.dll (0x7ffd6c9a0000)
        libtermcap-0.dll => /ucrt64/bin/libtermcap-0.dll (0x7ffd83b70000)
        libmp3lame-0.dll => /ucrt64/bin/libmp3lame-0.dll (0x7ffd6c0a0000)
        libmpg123-0.dll => /ucrt64/bin/libmpg123-0.dll (0x7ffd63e90000)
        libopus-0.dll => /ucrt64/bin/libopus-0.dll (0x7ffd5ed70000)
        libbz2-1.dll => /ucrt64/bin/libbz2-1.dll (0x7ffd839e0000)
        libharfbuzz-0.dll => /ucrt64/bin/libharfbuzz-0.dll (0x7ffd4dd10000)
        libbrotlidec.dll => /ucrt64/bin/libbrotlidec.dll (0x7ffd7f1b0000)
        libpng16-16.dll => /ucrt64/bin/libpng16-16.dll (0x7ffd73750000)
        zlib1.dll => /ucrt64/bin/zlib1.dll (0x7ffd7e7c0000)
        libbrotlicommon.dll => /ucrt64/bin/libbrotlicommon.dll (0x7ffd7a610000)
        libgraphite2.dll => /ucrt64/bin/libgraphite2.dll (0x7ffd74c30000)

After that, you can build the installer like so:

cmake --build .
cpack -C Release

you should find an installer called chordcat-0.3.0-win64.exe in the build directory.

MacOS

WIP

I was able to get a dmg to build by doing lot of terminal gymnastics. You can head over to the macosx branch to see my notes (steps.md and fixup.sh). However, I do not recommend building a dmg at all as it can not be shared to other computers. Apple requires every dmg to be signed with an official developer certificate.