mirror of
https://github.com/TangentFoxy/love-release.git
synced 2025-07-28 11:02:20 +00:00
Rewrite Debian module
This commit is contained in:
@@ -4,165 +4,101 @@ OPTIONS="D"
|
|||||||
LONG_OPTIONS=""
|
LONG_OPTIONS=""
|
||||||
|
|
||||||
|
|
||||||
PACKAGE_NAME=$(echo $PROJECT_NAME | sed -e 's/[^-a-zA-Z0-9_]/-/g' | tr '[:upper:]' '[:lower:]')
|
IDENTITY=$(echo $TITLE | sed -e 's/[^-a-zA-Z0-9_]/-/g' | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
# Configuration
|
|
||||||
if [ "$CONFIG" = true ]; then
|
|
||||||
if [ -n "${INI__debian__package_version}" ]; then
|
|
||||||
PACKAGE_VERSION=${INI__debian__package_version}
|
|
||||||
fi
|
|
||||||
if [ -n "${INI__debian__maintainer_name}" ]; then
|
|
||||||
MAINTAINER_NAME=${INI__debian__maintainer_name}
|
|
||||||
fi
|
|
||||||
if [ -n "${INI__debian__maintainer_email}" ]; then
|
|
||||||
MAINTAINER_EMAIL=${INI__debian__maintainer_email}
|
|
||||||
fi
|
|
||||||
if [ -n "${INI__debian__package_name}" ]; then
|
|
||||||
PACKAGE_NAME=${INI__debian__package_name}
|
|
||||||
fi
|
|
||||||
if [ -n "${INI__debian__icon}" ]; then
|
|
||||||
ICON_DIR=${INI__debian__icon}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Options
|
|
||||||
while getoptex "$SCRIPT_ARGS" "$@"
|
|
||||||
do
|
|
||||||
if [ "$OPTOPT" = "deb-package-version" ]; then
|
|
||||||
PACKAGE_VERSION=$OPTARG
|
|
||||||
elif [ "$OPTOPT" = "deb-maintainer-name" ]; then
|
|
||||||
MAINTAINER_NAME=$OPTARG
|
|
||||||
elif [ "$OPTOPT" = "maintainer-email" ]; then
|
|
||||||
MAINTAINER_EMAIL=$OPTARG
|
|
||||||
elif [ "$OPTOPT" = "deb-package-name" ]; then
|
|
||||||
PACKAGE_NAME=$OPTARG
|
|
||||||
elif [ "$OPTOPT" = "deb-icon" ]; then
|
|
||||||
ICON_DIR=$OPTARG
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
# Debian
|
# Debian
|
||||||
MISSING_INFO=0
|
missing_info=false
|
||||||
ERROR_MSG="Could not build Debian package."
|
error_msg="Could not build Debian package."
|
||||||
if [ -z "$PACKAGE_VERSION" ]; then
|
if [[ -z $GAME_VERSION ]]; then
|
||||||
MISSING_INFO=1
|
missing_info=true
|
||||||
ERROR_MSG="$ERROR_MSG\nMissing project's version. Use --deb-package-version."
|
error_msg="$error_msg\nMissing project's version. Use -v or --Dversion."
|
||||||
fi
|
fi
|
||||||
if [ -z "$PROJECT_HOMEPAGE" ]; then
|
if [[ -z $URL ]]; then
|
||||||
MISSING_INFO=1
|
missing_info=true
|
||||||
ERROR_MSG="$ERROR_MSG\nMissing project's homepage. Use --homepage."
|
error_msg="$error_msg\nMissing project's homepage. Use -u or -Durl."
|
||||||
fi
|
fi
|
||||||
if [ -z "$PROJECT_DESCRIPTION" ]; then
|
if [[ -z $DESCRIPTION ]]; then
|
||||||
MISSING_INFO=1
|
missing_info=true
|
||||||
ERROR_MSG="$ERROR_MSG\nMissing project's description. Use --description."
|
error_msg="$error_msg\nMissing project's description. Use -d or --Ddescription."
|
||||||
fi
|
fi
|
||||||
if [ -z "$MAINTAINER_NAME" ]; then
|
if [[ -z $AUTHOR ]]; then
|
||||||
MISSING_INFO=1
|
missing_info=true
|
||||||
ERROR_MSG="$ERROR_MSG\nMissing maintainer's name. Use --deb-maintainer-name."
|
error_msg="$error_msg\nMissing maintainer's name. Use -a or --Dauthor."
|
||||||
fi
|
fi
|
||||||
if [ -z "$MAINTAINER_EMAIL" ]; then
|
if [[ -z $EMAIL ]]; then
|
||||||
MISSING_INFO=1
|
missing_info=true
|
||||||
ERROR_MSG="$ERROR_MSG\nMissing maintainer's email. Use --maintainer-email."
|
error_msg="$error_msg\nMissing maintainer's email. Use -e or --Demail."
|
||||||
fi
|
fi
|
||||||
if [ "$MISSING_INFO" -eq 1 ]; then
|
if [[ $missing_info == true ]]; then
|
||||||
exit_module "$MISSING_INFO" "$ERROR_MSG"
|
exit_module "options" "$error_msg"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
create_love_file 9
|
create_love_file 9
|
||||||
|
cd "$RELEASE_DIR"
|
||||||
|
|
||||||
|
|
||||||
TEMP=$(mktemp -d)
|
TEMP="$(mktemp -d)"
|
||||||
|
umask 0022
|
||||||
|
|
||||||
CONTROL=$TEMP/DEBIAN/control
|
mkdir -p "$TEMP/DEBIAN"
|
||||||
mkdir -p $TEMP/DEBIAN
|
cat > "$TEMP/DEBIAN/control" <<EOF
|
||||||
echo "Package: $PACKAGE_NAME" > $CONTROL
|
Package: $IDENTITY
|
||||||
echo "Version: $PACKAGE_VERSION" >> $CONTROL
|
Version: $GAME_VERSION
|
||||||
echo "Architecture: all" >> $CONTROL
|
Architecture: all
|
||||||
echo "Maintainer: $MAINTAINER_NAME <$MAINTAINER_EMAIL>" >> $CONTROL
|
Maintainer: $AUTHOR <$EMAIL>
|
||||||
echo "Installed-Size: $(echo "$(stat -c %s "$PROJECT_NAME".love) / 1024" | bc)" >> $CONTROL
|
Installed-Size: $(( $(stat -c %s "$LOVE_FILE") / 1024 ))
|
||||||
echo "Depends: love (>= $LOVE_VERSION)" >> $CONTROL
|
Depends: love (>= $LOVE_VERSION)
|
||||||
echo "Priority: extra" >> $CONTROL
|
Priority: extra
|
||||||
echo "Homepage: $PROJECT_HOMEPAGE" >> $CONTROL
|
Homepage: $URL
|
||||||
echo "Description: $PROJECT_DESCRIPTION" >> $CONTROL
|
Description: $DESCRIPTION
|
||||||
chmod 0644 $CONTROL
|
EOF
|
||||||
|
|
||||||
DESKTOP=$TEMP/usr/share/applications/${PACKAGE_NAME}.desktop
|
mkdir -p "$TEMP/usr/share/applications"
|
||||||
mkdir -p $TEMP/usr/share/applications
|
cat > "$TEMP/usr/share/applications/${IDENTITY}.desktop" <<EOF
|
||||||
echo "[Desktop Entry]" > $DESKTOP
|
[Desktop Entry]
|
||||||
echo "Name=$PROJECT_NAME" >> $DESKTOP
|
Name=$TITLE
|
||||||
echo "Comment=$PROJECT_DESCRIPTION" >> $DESKTOP
|
Comment=$DESCRIPTION
|
||||||
echo "Exec=$PACKAGE_NAME" >> $DESKTOP
|
Exec=$IDENTITY
|
||||||
echo "Type=Application" >> $DESKTOP
|
Type=Application
|
||||||
echo "Categories=Game;" >> $DESKTOP
|
Categories=Game;
|
||||||
chmod 0644 $DESKTOP
|
EOF
|
||||||
|
|
||||||
PACKAGE_DIR=$TEMP/usr/share/games/$PACKAGE_NAME
|
mkdir -p "$TEMP/usr/bin"
|
||||||
PACKAGE_LOC=$PACKAGE_NAME-$PACKAGE_VERSION.love
|
cat <(echo -ne '#!/usr/bin/env love\n') "$LOVE_FILE" > "$TEMP/usr/bin/$IDENTITY"
|
||||||
|
chmod +x "$TEMP/usr/bin/$IDENTITY"
|
||||||
|
|
||||||
mkdir -p $PACKAGE_DIR
|
if [[ -d $ICON ]]; then
|
||||||
cp "$LOVE_FILE" $PACKAGE_DIR/$PACKAGE_LOC
|
ICON_LOC=$TEMP/usr/share/icons/hicolor
|
||||||
chmod 0644 $PACKAGE_DIR/$PACKAGE_LOC
|
mkdir -p $ICON_LOC
|
||||||
|
echo "Icon=$IDENTITY" >> "$TEMP/usr/share/applications/${IDENTITY}.desktop"
|
||||||
|
|
||||||
BIN_LOC=$TEMP/usr/bin
|
cd "$ICON"
|
||||||
mkdir -p $BIN_LOC
|
for file in *; do
|
||||||
echo "#!/usr/bin/env bash" > $BIN_LOC/$PACKAGE_NAME
|
RES=$(echo "$file" | grep -Eo "[0-9]+x[0-9]+")
|
||||||
echo "set -e" >> $BIN_LOC/$PACKAGE_NAME
|
EXT=$(echo "$file" | sed -e 's/.*\.//g')
|
||||||
echo "love /usr/share/games/$PACKAGE_NAME/$PACKAGE_LOC" >> $BIN_LOC/$PACKAGE_NAME
|
if [[ $EXT == "svg" ]]; then
|
||||||
chmod 0755 $BIN_LOC/$PACKAGE_NAME
|
mkdir -p "$ICON_LOC/scalable/apps"
|
||||||
|
cp "$file" "$ICON_LOC/scalable/apps/${IDENTITY}.svg"
|
||||||
ICON_LOC=$TEMP/usr/share/icons/hicolor
|
chmod 0644 "$ICON_LOC/scalable/apps/${IDENTITY}.svg"
|
||||||
mkdir -p $ICON_LOC
|
elif [[ -n $RES ]]; then
|
||||||
if [ -n "$ICON_DIR" ]; then
|
mkdir -p "$ICON_LOC/$RES/apps"
|
||||||
echo "Icon=$PACKAGE_NAME" >> $DESKTOP
|
cp "$file" "$ICON_LOC/$RES/apps/${IDENTITY}.$EXT"
|
||||||
|
chmod 0644 "$ICON_LOC/$RES/apps/${IDENTITY}.$EXT"
|
||||||
IFS=$'\n'
|
|
||||||
if [ "${ICON_DIR%?}" = "/" ]; then
|
|
||||||
ICON_DIR=${ICON_DIR: -1}
|
|
||||||
fi
|
|
||||||
if [ "${ICON_DIR:0:1}" != "/" ]; then
|
|
||||||
ICON_DIR=$PROJECT_DIR/$ICON_DIR
|
|
||||||
fi
|
|
||||||
ICON_FILES=( $(ls -AC1 "$ICON_DIR") )
|
|
||||||
|
|
||||||
for ICON in "${ICON_FILES[@]}"
|
|
||||||
do
|
|
||||||
RES=$(echo "$ICON" | grep -Eo "[0-9]+x[0-9]+")
|
|
||||||
EXT=$(echo "$ICON" | sed -e 's/.*\.//g')
|
|
||||||
if [ "$EXT" = "svg" ]; then
|
|
||||||
mkdir -p $ICON_LOC/scalable/apps
|
|
||||||
cp "$ICON_DIR"/"$ICON" $ICON_LOC/scalable/apps/${PACKAGE_NAME}.$EXT
|
|
||||||
chmod 0644 $ICON_LOC/scalable/apps/${PACKAGE_NAME}.$EXT
|
|
||||||
else
|
|
||||||
if [ -n "$RES" ]; then
|
|
||||||
mkdir -p $ICON_LOC/$RES/apps
|
|
||||||
cp "$ICON_DIR"/"$ICON" $ICON_LOC/$RES/apps/${PACKAGE_NAME}.$EXT
|
|
||||||
chmod 0644 $ICON_LOC/$RES/apps/${PACKAGE_NAME}.$EXT
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
echo "Icon=love" >> $DESKTOP
|
echo "Icon=love" >> "$TEMP/usr/share/applications/${IDENTITY}.desktop"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
cd "$TEMP"
|
||||||
|
# TODO: There might be a problem here if the filename contains weird characters.
|
||||||
|
find "usr" -type f -exec md5sum {} \; | sed -r "s/^([0-9a-f]{32} )/\1\//g" > "$TEMP/DEBIAN/md5sums"
|
||||||
|
cd "$PROJECT_DIR"
|
||||||
|
|
||||||
cd $TEMP
|
fakeroot dpkg-deb -b "$TEMP" "$RELEASE_DIR/$IDENTITY-${GAME_VERSION}_all.deb"
|
||||||
for line in $(find usr/ -type f); do
|
rm -rf "$TEMP"
|
||||||
md5sum "$line" >> $TEMP/DEBIAN/md5sums
|
|
||||||
done
|
|
||||||
chmod 0644 $TEMP/DEBIAN/md5sums
|
|
||||||
|
|
||||||
for line in $(find usr/ -type d); do
|
|
||||||
chmod 0755 "$line"
|
|
||||||
done
|
|
||||||
|
|
||||||
fakeroot dpkg-deb -b $TEMP "$RELEASE_DIR"/$PACKAGE_NAME-${PACKAGE_VERSION}_all.deb
|
|
||||||
cd "$RELEASE_DIR"
|
|
||||||
rm -rf $TEMP
|
|
||||||
|
|
||||||
|
|
||||||
unset MAINTAINER_NAME MAINTAINER_EMAIL PACKAGE_NAME PACKAGE_VERSION
|
|
||||||
exit_module
|
exit_module
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user