diff --git a/README.md b/README.md index ed54365..f9a013f 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ `love-release.sh` -- Bash script to generate Love 2D game releases ### SYNOPSIS -`love-release.sh [-lmw] [-n project_name] [-r release_dir] [-u company_name] [-v love_version] [FILES...]` +`love-release.sh [-dlmw] [-n project_name] [-r release_dir] [-u company_name] [-v love_version] [FILES...]` ### DESCRIPTION You can use love-release.sh to generate Love 2D game applications and get over the fastidious zipping commands you had to do. -The script fully supports Windows, MacOS either on x86 or x64. +The script fully supports Windows, MacOS either on x86 or x64, and Debian packages. It needs an Internet connection to download Love files, and relies on curl, zip and unzip commands. To set the default Love version to use, you can edit the very beginning of the script. If `lua` and a `conf.lua` file are found, it will automatically detect which version your project uses. @@ -21,6 +21,10 @@ If a `ProjectName.ico` file is provided, and that Wine and Resource Hacker are i `-l` Create a plain Love file. It is just a zip of your sources, renamed in \*.love. Mostly aimed at Linux players or developers and the most common distribution process. +`-d` Create a deb package. Aimed at Debian and Ubuntu derivatives + In order to create a Debian package, you must provide more informations about it. + See the DEBIAN section below. + `-m` Create MacOS application. Starting with Love 0.9.0, Love no longer supports old x86 Macintosh. If you are targeting one of these, your project must be developped with Love 0.8.0 or lower. @@ -45,6 +49,15 @@ If a `ProjectName.ico` file is provided, and that Wine and Resource Hacker are i Starting with Love 0.8.0, a release is specially available for Windows x64. Starting with Love 0.9.0, Love no longer supports old x86 Macintosh. +#### DEBIAN +`--version` Set the version of your package. +`--maintainer-name` Set the maintainer’s name. The company name is used by default. +`--maintainer-email` Set the maintainer’s email. +`--homepage` Set the homepage of your project. +`--description` Set the description of your project. +`--package-name` Set the name of the package and the command that will be used to launch your game. + By default, it is the name of your project converted to lowercase, with eventual spaces replaced by dashes. + #### ICONS A note on icons: - if you want to create MacOS icons (.icns), and you are @@ -64,3 +77,7 @@ The script doesn’t yet handle the process of creating icons, but if provided i [https://www.love2d.org](https://www.love2d.org) [https://www.love2d.org/wiki/Game_Distribution](https://www.love2d.org/wiki/Game_Distribution) [https://www.github.org/MisterDA/love-release](https://www.github.org/MisterDA/love-release) + +### THANKS +The work done on Debian packaging is highly inspired by what [josefnpat](http://josefnpat.com/) did. Thanks to him. + diff --git a/love-release.sh b/love-release.sh index e295731..c159ab7 100755 --- a/love-release.sh +++ b/love-release.sh @@ -11,6 +11,7 @@ echo "Usage: love-release.sh [options...] [files...] Options: -h, --help Prints short or long help -l Create a plain Love file + -d Create a deb package -m Create a MacOS application -w, Create a Windows application -w32 Create a Windows x86 application @@ -28,11 +29,11 @@ function long_help() echo "NAME love-release.sh -- Bash script to generate Love 2D game releases SYNOPSIS - love-release.sh [-lmw] [-n project_name] [-r release_dir] [-u company_name] [-v love_version] [FILES...] + love-release.sh [-dlmw] [-n project_name] [-r release_dir] [-u company_name] [-v love_version] [FILES...] DESCRIPTION You can use love-release.sh to generate Love 2D game applications and get over the fastidious zipping commands you had to do. - The script fully supports Windows, MacOS either on x86 or x64. + The script fully supports Windows, MacOS either on x86 or x64, and Debian packages. It needs an Internet connection to download Love files, and relies on curl, zip and unzip commands. To set the default Love version to use, you can edit the very beginning of the script. If lua and a conf.lua file are found, it will automatically detect which version your project uses. @@ -47,6 +48,10 @@ OPTIONS -l Create a plain Love file. It is just a zip of your sources, renamed in *.love. Mostly aimed at Linux players or developers and the most common distribution process. + -d Create a deb package. Aimed at Debian and Ubuntu derivatives. + In order to create a Debian package, you must provide more informations about it. + See the DEBIAN section below. + -m Create MacOS application. Starting with Love 0.9.0, Love no longer supports old x86 Macintosh. If you are targeting one of these, your project must be developed with Love 0.8.0 or lower. @@ -71,6 +76,15 @@ OPTIONS Starting with Love 0.8.0, a release is specially available for Windows x64. Starting with Love 0.9.0, Love no longer supports old x86 Macintosh. + DEBIAN + --version Set the version of your package. + --maintainer-name Set the maintainer's name. The company name is used by default. + --maintainer-email Set the maintainer's email. + --homepage Set the homepage of your project. + --description Set the description of your project. + --package-name Set the name of the package and the command that will be use to launch your game. + By default, it is the name of your project converted to lowercase, with eventual spaces replaced by dashes. + OTHERS --refresh Refresh the cache located in ~/.cache/love-release. One can replace the Love files there. --debug Dump the scripts variables without making releases. @@ -192,6 +206,7 @@ float_test() { ## Set defaults ## RELEASE_LOVE=false +RELEASE_DEB=false RELEASE_OSX=false RELEASE_WIN_32=false RELEASE_WIN_64=false @@ -210,7 +225,13 @@ LOVE_GT_090=$(float_test "$LOVE_VERSION_MAJOR >= 0.9") PROJECT_FILES= PROJECT_NAME=${PWD##/*/} +PACKAGE_NAME=${PROJECT_NAME,,}; PACKAGE_NAME=${PACKAGE_NAME// /-} +PROJECT_VERSION= +PROJECT_HOMEPAGE= +PROJECT_DESCRIPTION= COMPANY_NAME=love2d +MAINTAINER_NAME=$COMPANY_NAME +MAINTAINER_EMAIL= RELEASE_DIR="$PWD"/releases DEBUG=false @@ -223,6 +244,7 @@ function debug() { echo "DEBUG=$DEBUG RELEASE_LOVE=$RELEASE_LOVE +RELEASE_DEB=$RELEASE_DEB RELEASE_OSX=$RELEASE_OSX RELEASE_WIN_32=$RELEASE_WIN_32 RELEASE_WIN_64=$RELEASE_WIN_64 @@ -233,7 +255,13 @@ LOVE_GT_080=$LOVE_GT_080 LOVE_GT_090=$LOVE_GT_090 PROJECT_FILES=$PROJECT_FILES PROJECT_NAME=$PROJECT_NAME +PACKAGE_NAME=$PACKAGE_NAME +PROJECT_VERSION=$PROJECT_VERSION +PROJECT_HOMEPAGE=$PROJECT_HOMEPAGE +PROJECT_DESCRIPTION=$PROJECT_DESCRIPTION COMPANY_NAME=$COMPANY_NAME +MAINTAINER_NAME=$MAINTAINER_NAME +MAINTAINER_EMAIL=$MAINTAINER_EMAIL RELEASE_DIR=$RELEASE_DIR CACHE_DIR=$CACHE_DIR PROJECT_ICO=$PROJECT_ICO @@ -244,11 +272,13 @@ EXCLUDE_FILES=$EXCLUDE_FILES ## Parsing options ## -while getoptex "h; l; m; w. n: r: u: v: debug help refresh" "$@" +while getoptex "h; d; l; m; w. n: r: u: v: version: maintainer-name: maintainer-email: homepage: description: package-name: debug help refresh" "$@" do if [ "$OPTOPT" = "h" ]; then short_help exit + elif [ "$OPTOPT" = "d" ]; then + RELEASE_DEB=true elif [ "$OPTOPT" = "l" ]; then RELEASE_LOVE=true elif [ "$OPTOPT" = "m" ]; then @@ -273,6 +303,18 @@ do LOVE_VERSION_MAJOR=$(echo "$LOVE_VERSION" | grep -Eo '^[0-9]+\.?[0-9]*') LOVE_GT_080=$(float_test "$LOVE_VERSION_MAJOR >= 0.8") LOVE_GT_090=$(float_test "$LOVE_VERSION_MAJOR >= 0.9") + elif [ "$OPTOPT" = "version" ]; then + PROJECT_VERSION=$OPTARG + elif [ "$OPTOPT" = "homepage" ]; then + PROJECT_HOMEPAGE=$OPTARG + elif [ "$OPTOPT" = "description" ]; then + PROJECT_DESCRIPTION=$OPTARG + elif [ "$OPTOPT" = "maintainer-name" ]; then + MAINTAINER_NAME=$OPTARG + elif [ "$OPTOPT" = "maintainer-email" ]; then + MAINTAINER_EMAIL=$OPTARG + elif [ "$OPTOPT" = "package-name" ]; then + PACKAGE_NAME=$OPTARG elif [ "$OPTOPT" = "debug" ]; then DEBUG=true elif [ "$OPTOPT" = "help" ]; then @@ -287,8 +329,9 @@ for file in "$@" do PROJECT_FILES="$PROJECT_FILES $file" done -if [ "$RELEASE_LOVE" = false ] && [ "$RELEASE_OSX" = false ] && [ "$RELEASE_WIN_32" = false ] && [ "$RELEASE_WIN_64" = false ]; then +if [ "$RELEASE_LOVE" = false ] && [ "$RELEASE_DEB" = false ] && [ "$RELEASE_OSX" = false ] && [ "$RELEASE_WIN_32" = false ] && [ "$RELEASE_WIN_64" = false ]; then RELEASE_LOVE=true + RELEASE_DEB=true RELEASE_OSX=true RELEASE_WIN_32=true RELEASE_WIN_64=true @@ -568,6 +611,58 @@ echo " fi fi +## Debian package ## +if [ "$RELEASE_DEB" = true ]; then + if [ -z "$PROJECT_VERSION" ] || [ -z "$PROJECT_HOMEPAGE" ] || [ -z "$PROJECT_DESCRIPTION" ] || [ -z "$MAINTAINER_NAME" ] || [ -z "$MAINTAINER_EMAIL" ]; then + echo "Could not build a Debian package. Missing informations." + else + TEMP=`mktemp -d` + mkdir -p $TEMP/DEBIAN + + echo "Package: $PACKAGE_NAME" > $TEMP/DEBIAN/control + echo "Version: $PROJECT_VERSION" >> $TEMP/DEBIAN/control + echo "Architecture: all" >> $TEMP/DEBIAN/control + echo "Maintainer: $MAINTAINER_NAME <$MAINTAINER_EMAIL>" >> $TEMP/DEBIAN/control + echo "Installed-Size: $(echo "$(stat -c %s "$PROJECT_NAME".love) / 1024" | bc)" >> $TEMP/DEBIAN/control + echo "Depends: love (>= $LOVE_VERSION)" >> $TEMP/DEBIAN/control + echo "Priority: extra" >> $TEMP/DEBIAN/control + echo "Homepage: $PROJECT_HOMEPAGE" >> $TEMP/DEBIAN/control + echo "Description: $PROJECT_DESCRIPTION" >> $TEMP/DEBIAN/control + + cat $TEMP/DEBIAN/control + + chmod 0644 $TEMP/DEBIAN/control + + PACKAGE_DIR=/usr/share/games/"$PACKAGE_NAME"/ + PACKAGE_LOC=$PACKAGE_NAME-$PROJECT_VERSION.love + + mkdir -p $TEMP"$PACKAGE_DIR" + cp "$PROJECT_NAME".love $TEMP"$PACKAGE_DIR""$PACKAGE_LOC" + chmod 0644 $TEMP"$PACKAGE_DIR""$PACKAGE_LOC" + + BIN_LOC=/usr/bin/ + mkdir -p $TEMP/$BIN_LOC + echo "#!/usr/bin/env bash" > $TEMP$BIN_LOC"$PACKAGE_NAME" + echo "set -e" >> $TEMP$BIN_LOC"$PACKAGE_NAME" + echo "love $PACKAGE_DIR$PACKAGE_LOC" >> $TEMP$BIN_LOC"$PACKAGE_NAME" + chmod 0755 $TEMP$BIN_LOC"$PACKAGE_NAME" + + cd $TEMP + for line in $(find usr/ -type f); do + 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"-"$PROJECT_VERSION"_all.deb + cd "$RELEASE_DIR" + rm -rf $TEMP + fi +fi + ## Love file ## if [ "$RELEASE_LOVE" = false ]; then rm "$PROJECT_NAME".love