You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#!/bin/bash
# WARNING: This script will modify file associations 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 prefers # 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
|