4fc41627e9
* Switch to using org.kicad.kicad as the main app ID * Move the appstream file to a metainfo file * Rename all metadata files to use the reverse DNS scheme * Add header matching to mime type files where possible * Add a mime type for gerber job files * Add a QA test that verifies all the linux metadata files and run it in CI * Update the visible names in the launcher entries to be more consistent with the internal visible names * Update various strings and items in the metainfo file so they are more descriptive and easier to read
304 lines
14 KiB
Bash
Executable File
304 lines
14 KiB
Bash
Executable File
#!/bin/bash
|
||
# WARNING: This script will modify file assocations and MIME types on the system it
|
||
# runs on. Use at your own risk!
|
||
|
||
# The root of the code directory is the first argument
|
||
KICAD_CODE_DIR=$1
|
||
|
||
# The root of the build directory is the second argument
|
||
KICAD_BUILD_DIR=$2
|
||
|
||
KICAD_LAUNCHER_DIR=$KICAD_BUILD_DIR/resources/linux/launchers
|
||
KICAD_METAINFO_DIR=$KICAD_BUILD_DIR/resources/linux/metainfo
|
||
KICAD_MIME_DIR=$KICAD_BUILD_DIR/resources/linux/mime
|
||
KICAD_ICON_DIR=$KICAD_CODE_DIR/resources/linux/icons/hicolor
|
||
|
||
KICAD_MIME_TEST_FILES=$KICAD_CODE_DIR/qa/resources/linux/mimeFiles
|
||
|
||
###################################################################
|
||
# Verify the metainfo file
|
||
# There are two different checkers we can use, and each distro perfers
|
||
# different ones - so lets just test using them both and make them both
|
||
# happy.
|
||
###################################################################
|
||
METAINFO_VALID=1
|
||
echo "Validating metainfo files"
|
||
|
||
# Test using appstreamcli to see its errors
|
||
appstreamcli validate --explain --pedantic $KICAD_METAINFO_DIR/org.kicad.kicad.metainfo.xml
|
||
[ $? -ne 0 ] && METAINFO_VALID=0
|
||
|
||
# Test using the appstream-util package to see its errors
|
||
appstream-util validate-strict $KICAD_METAINFO_DIR/org.kicad.kicad.metainfo.xml
|
||
[ $? -ne 0 ] && METAINFO_VALID=0
|
||
|
||
if [ $METAINFO_VALID -eq 1 ]
|
||
then
|
||
echo "Metainfo files passed both checkers successfully"
|
||
fi
|
||
|
||
|
||
###################################################################
|
||
# Verify the launcher files
|
||
###################################################################
|
||
LAUNCHERS_VALID=1
|
||
|
||
echo ""
|
||
echo "Validating desktop launcher files"
|
||
|
||
# Bitmap2component
|
||
desktop-file-validate $KICAD_LAUNCHER_DIR/org.kicad.bitmap2component.desktop
|
||
[ $? -ne 0 ] && LAUNCHERS_VALID=0
|
||
|
||
# Eeschema standalone
|
||
desktop-file-validate $KICAD_LAUNCHER_DIR/org.kicad.eeschema.desktop
|
||
[ $? -ne 0 ] && LAUNCHERS_VALID=0
|
||
|
||
# GerbView
|
||
desktop-file-validate $KICAD_LAUNCHER_DIR/org.kicad.gerbview.desktop
|
||
[ $? -ne 0 ] && LAUNCHERS_VALID=0
|
||
|
||
# Main KiCad application
|
||
desktop-file-validate $KICAD_LAUNCHER_DIR/org.kicad.kicad.desktop
|
||
[ $? -ne 0 ] && LAUNCHERS_VALID=0
|
||
|
||
# PCB calculator
|
||
desktop-file-validate $KICAD_LAUNCHER_DIR/org.kicad.pcbcalculator.desktop
|
||
[ $? -ne 0 ] && LAUNCHERS_VALID=0
|
||
|
||
# Pcbnew standalond
|
||
desktop-file-validate $KICAD_LAUNCHER_DIR/org.kicad.pcbnew.desktop
|
||
[ $? -ne 0 ] && LAUNCHERS_VALID=0
|
||
|
||
if [ $LAUNCHERS_VALID -eq 1 ]
|
||
then
|
||
echo "All launcher files valid"
|
||
else
|
||
echo "Errors with launcher files"
|
||
fi
|
||
|
||
|
||
###################################################################
|
||
# Install the desktop and MIME-type files and update the databases
|
||
###################################################################
|
||
|
||
GERBER_MIME_INSTALLED=0
|
||
KICAD_MIME_INSTALLED=0
|
||
|
||
echo ""
|
||
echo "Installing MIME type files for testing"
|
||
|
||
mkdir -p ~/.local/share/mime
|
||
|
||
xdg-mime install --mode user $KICAD_MIME_DIR/kicad-gerbers.xml
|
||
[ $? -eq 0 ] && GERBER_MIME_INSTALLED=1
|
||
|
||
xdg-icon-resource install --mode user --context mimetypes --size 128 $KICAD_ICON_DIR/128x128/mimetypes/application-x-kicad-pcb.png
|
||
xdg-icon-resource install --mode user --context mimetypes --size 128 $KICAD_ICON_DIR/128x128/mimetypes/application-x-kicad-project.png
|
||
xdg-icon-resource install --mode user --context mimetypes --size 128 $KICAD_ICON_DIR/128x128/mimetypes/application-x-kicad-schematic.png
|
||
|
||
xdg-mime install --mode user $KICAD_MIME_DIR/kicad-kicad.xml
|
||
[ $? -eq 0 ] && KICAD_MIME_INSTALLED=1
|
||
|
||
# Install the desktop files
|
||
echo ""
|
||
echo "Installing desktop files for testing"
|
||
|
||
# Ensure the directory exists (it might not in the CI image)
|
||
mkdir -p ~/.local/share/applications
|
||
|
||
# For some reason, desktop-file-install doesn't seem to actually install it properly, so just copy them
|
||
cp $KICAD_LAUNCHER_DIR/org.kicad.bitmap2component.desktop ~/.local/share/applications/
|
||
cp $KICAD_LAUNCHER_DIR/org.kicad.eeschema.desktop ~/.local/share/applications/
|
||
cp $KICAD_LAUNCHER_DIR/org.kicad.gerbview.desktop ~/.local/share/applications/
|
||
cp $KICAD_LAUNCHER_DIR/org.kicad.kicad.desktop ~/.local/share/applications/
|
||
cp $KICAD_LAUNCHER_DIR/org.kicad.pcbcalculator.desktop ~/.local/share/applications/
|
||
cp $KICAD_LAUNCHER_DIR/org.kicad.pcbnew.desktop ~/.local/share/applications/
|
||
|
||
# Force a database update to get the desktop files and MIME types associated
|
||
update-desktop-database ~/.local/share/applications/
|
||
update-mime-database ~/.local/share/mime/
|
||
|
||
|
||
###################################################################
|
||
# Validate the MIME types
|
||
###################################################################
|
||
KICAD_MIME_VALID=1
|
||
GERBER_MIME_VALID=1
|
||
|
||
# Fake a Gnome desktop environment to force xdg-mime to query using gio and ensure the MIME types are installed
|
||
# for a desktop environment. Otherwise it fallsback to using the "file --mime-type" command, which has prebuilt
|
||
# magic files from https://github.com/file/file/blob/master/magic/Magdir/kicad and isn't affected by the MIME
|
||
# type files we just installed.
|
||
export DE=gnome
|
||
|
||
# Test install the gerber MIME file to test with it
|
||
echo ""
|
||
|
||
if [ $GERBER_MIME_INSTALLED -eq 1 ]
|
||
then
|
||
echo "Validating Gerber MIME-type"
|
||
|
||
# Test the drl extension default
|
||
OUT_STR=$(xdg-mime query default application/x-excellon 2>&1)
|
||
printf " Testing drill file default application: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "org.kicad.gerbview.desktop" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test the gerber extension default
|
||
OUT_STR=$(xdg-mime query default application/x-gerber 2>&1)
|
||
printf " Testing gerber file default application: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "org.kicad.gerbview.desktop" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test the drl extension
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/gerbers/drillFiles/drillFile.drl 2>&1)
|
||
printf " Testing drill file with extension drl: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-excellon" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test the parsing of the header for M48
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/gerbers/drillFiles/drillFileNoExt 2>&1)
|
||
printf " Testing drill file header M48 check: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-excellon" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test the official gbr extension
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/gerbers/gerberFiles/gerber.gbr 2>&1)
|
||
printf " Testing gerber file with gbr extension: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-gerber" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test the parsing of the header for a comment (G04)
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/gerbers/gerberFiles/gerberCommentNoExt 2>&1)
|
||
printf " Testing gerber file header G04 check: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-gerber" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test the parsing of the header for %FSLA
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/gerbers/gerberFiles/gerberFSLANoExt 2>&1)
|
||
printf " Testing gerber file header %%FLSA check: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-gerber" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test the parsing of the header for %MO
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/gerbers/gerberFiles/gerberMONoExt 2>&1)
|
||
printf " Testing gerber file header %%MO check: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-gerber" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test the parsing of the header for %TF.
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/gerbers/gerberFiles/gerberTFNoExt 2>&1)
|
||
printf " Testing gerber file header %%TF. check: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-gerber" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test the parsing of the header for G75*.
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/gerbers/gerberFiles/gerberG75NoExt 2>&1)
|
||
printf " Testing gerber file header G75* check: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-gerber" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
# Test parsing another popular gerber extension (will require a lookup)
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/gerbers/gerberFiles/gerber.gts 2>&1)
|
||
printf " Testing gerber file with gts extension (not glob'd): %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-gerber" ]] && echo " ERROR" && GERBER_MIME_VALID=0
|
||
|
||
if [ $GERBER_MIME_VALID -eq 1 ]
|
||
then
|
||
echo "All Gerber MIME-type files valid"
|
||
else
|
||
echo "Errors with Gerber MIME-type files"
|
||
fi
|
||
else
|
||
echo "Gerber MIME type files not installed, skipping validation"
|
||
GERBER_MIME_VALID=0
|
||
fi
|
||
|
||
|
||
# Test install the KiCad MIME file to test with it
|
||
echo ""
|
||
|
||
if [ $KICAD_MIME_INSTALLED -eq 1 ]
|
||
then
|
||
echo "Validating KiCad MIME-type"
|
||
|
||
# Test the KiCad project file extension default
|
||
OUT_STR=$(xdg-mime query default application/x-kicad-project 2>&1)
|
||
printf " Testing KiCad project file default application: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "org.kicad.kicad.desktop" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the KiCad schematic file extension default
|
||
OUT_STR=$(xdg-mime query default application/x-kicad-schematic 2>&1)
|
||
printf " Testing KiCad schematic file default application: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "org.kicad.eeschema.desktop" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the KiCad project file extension default
|
||
OUT_STR=$(xdg-mime query default application/x-kicad-pcb 2>&1)
|
||
printf " Testing KiCad board file default application: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "org.kicad.pcbnew.desktop" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the old pcbnew board file extension (brd) - (will cause lookup since not glob'd)
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/boardFiles/brd.brd 2>&1)
|
||
printf " Testing old Pcbnew board file with extension brd: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-pcb" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the old pcbnew board file with header check
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/boardFiles/brdNoExt 2>&1)
|
||
printf " Testing old Pcbnew board file header: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-pcb" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the new pcbnew board file extension (kicad_pcb)
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/boardFiles/kicadpcb.kicad_pcb 2>&1)
|
||
printf " Testing new Pcbnew board file with extension kicad_pcb: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-pcb" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the new pcbnew board file with header check
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/boardFiles/kicadpcbNoExt 2>&1)
|
||
printf " Testing new Pcbnew board file header: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-pcb" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
|
||
# Test the old eeschema schematic file extension (sch)
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/schematicFiles/sch.sch 2>&1)
|
||
printf " Testing old Eeschema schematic file with extension sch: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-schematic" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the brd extension
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/schematicFiles/schNoExt 2>&1)
|
||
printf " Testing old Eeschema schematic file header: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-schematic" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the new Eeschema schematic file extension (kicad_sch)
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/schematicFiles/kicadsch.kicad_sch 2>&1)
|
||
printf " Testing new Eeschema schematic file with extension kicad_sch: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-schematic" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the new Eeschema board file with header check
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/schematicFiles/kicadschNoExt 2>&1)
|
||
printf " Testing new Eeschema schematic file header: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-schematic" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
|
||
# Test the old project file extension (pro)
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/projectFiles/pro.pro 2>&1)
|
||
printf " Testing old KiCad project file with extension pro: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-project" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
# Test the new project file extension (kicad_pro)
|
||
OUT_STR=$(xdg-mime query filetype $KICAD_MIME_TEST_FILES/kicad/projectFiles/kicadpro.kicad_pro 2>&1)
|
||
printf " Testing new KiCad project file with extension kicad_pro: %s\n" "$OUT_STR"
|
||
[[ "$OUT_STR" != "application/x-kicad-project" ]] && echo " ERROR" && KICAD_MIME_VALID=0
|
||
|
||
if [ $KICAD_MIME_VALID -eq 1 ]
|
||
then
|
||
echo "All KiCad MIME-type files valid"
|
||
else
|
||
echo "Errors with KiCad MIME-type files"
|
||
fi
|
||
else
|
||
echo "KiCad MIME type files not installed, skipping validation"
|
||
KICAD_MIME_VALID=0
|
||
fi
|
||
|
||
|
||
###################################################################
|
||
# Process return codes to flag errors for CI
|
||
###################################################################
|
||
[ $METAINFO_VALID -ne 0 ] && exit 1
|
||
[ $LAUNCHERS_VALID -ne 0 ] && exit 1
|
||
[ $KICAD_MIME_VALID -ne 0 ] && exit 1
|
||
[ $GERBER_MIME_VALID -ne 0 ] && exit 1
|
||
|
||
exit 0
|