[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#748321: ITP: raceintospace -- free software version of the Liftoff! board game



> Dariusz Dwornikowski <dariusz.dwornikowski@cs.put.poznan.pl> writes:
> 
> > Since the package depends on physfs 2.1, which has not been release
> > yet, we need to wait for the upstream of physfs to release 2.1 and for
> > the package to be in Debian. For now, raceintospace is ready in
> > pkg-games git and can go to Debian when physfs is ready. 
> 
> Thanks for your efforts in packaging raceintospace. I've noticed that
> Hedgewars used to have a similar problem, which they've solved by adding
> a compatibility layer for PhysFS 2.0. Using this as a starting point, I
> saw that only one more function had to be provided, which I backported
> from the 2.1 branch with some minor modifications. With the attached
> patch, raceintospace compiles and runs with the PhysFS library from
> sid. The compatibility layer checks for the version number of PhysFS, so
> once 2.1 is packaged, the code should automatically stop being included.

Thanks for that Hendrik, I will test it and preppare a release if it
is ok. 


> 
> The only slight drawback is that Hedgewars is GPL-2 only, so it will no
> longer be possible to ship raceintospace binaries as GPL-2+. But since
> this is only a temporary situation, I think this can be justified.

Yeah I think so. On the other hand I can see that physfs is not very
actively developed so we could wait a little bit. 

> 

> diff -ruN -x .git -x .pc raceintospace.orig/lib/CMakeLists.txt raceintospace/lib/CMakeLists.txt
> --- raceintospace.orig/lib/CMakeLists.txt	2014-09-13 13:54:07.680088605 +0200
> +++ raceintospace/lib/CMakeLists.txt	2014-09-12 23:07:12.263649649 +0200
> @@ -124,9 +124,9 @@
>  # I want 2.1 features, even if they're not out yet, so I made my own tarball
>  #set (physfs_Version 2.0.3)
>  #set (physfs_URL http://icculus.org/physfs/downloads/physfs-${physfs_Version}.tar.bz2)
> -set (physfs_Version 2.1.0-pre20121013)
> -set (physfs_URL https://s3.amazonaws.com/willglynn/physfs-${physfs_Version}.tgz)
> -set (physfs_Dir ${CMAKE_CURRENT_BINARY_DIR}/physfs-${physfs_Version})
> +#set (physfs_Version 2.1.0-pre20121013)
> +#set (physfs_URL https://s3.amazonaws.com/willglynn/physfs-${physfs_Version}.tgz)
> +#set (physfs_Dir ${CMAKE_CURRENT_BINARY_DIR}/physfs-${physfs_Version})
>  
>  # physfs 2.0.3 complains about FSPathMakeRef et al being deprecated, and warnings are treated as errors
>  # Turn it back into a warning instead
> @@ -134,14 +134,14 @@
>    set (physfs_Flags -Wno-error=deprecated-declarations)
>  endif (APPLE)
>  
> -ExternalProject_Add(ext_physfs
> -  DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/downloads
> -  URL ${physfs_URL}
> -  PREFIX ${physfs_Dir}
> -  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${LocalPrefix} -DPHYSFS_ARCHIVE_7Z=false -DPHYSFS_ARCHIVE_GRP=false -DPHYSFS_ARCHIVE_WAD=false -DPHYSFS_ARCHIVE_HOG=false -DPHYSFS_ARCHIVE_MVL=false -DPHYSFS_ARCHIVE_QPAK=false -DPHYSFS_ARCHIVE_ISO9660=false -DPHYSFS_HAVE_CDROM_SUPPORT=false -DPHYSFS_BUILD_SHARED=false -DPHYSFS_BUILD_TEST=false -DCMAKE_C_FLAGS=${physfs_Flags}
> -  )
> +#ExternalProject_Add(ext_physfs
> +#  DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/downloads
> +#  URL ${physfs_URL}
> +#  PREFIX ${physfs_Dir}
> +#  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${LocalPrefix} -DPHYSFS_ARCHIVE_7Z=false -DPHYSFS_ARCHIVE_GRP=false -DPHYSFS_ARCHIVE_WAD=false -DPHYSFS_ARCHIVE_HOG=false -DPHYSFS_ARCHIVE_MVL=false -DPHYSFS_ARCHIVE_QPAK=false -DPHYSFS_ARCHIVE_ISO9660=false -DPHYSFS_HAVE_CDROM_SUPPORT=false -DPHYSFS_BUILD_SHARED=false -DPHYSFS_BUILD_TEST=false -DCMAKE_C_FLAGS=${physfs_Flags}
> +#  )
>  
> -add_dependencies(libs ext_physfs)
> +#add_dependencies(libs ext_physfs)
>  
>  
>  ###
> diff -ruN -x .git -x .pc raceintospace.orig/src/game/CMakeLists.txt raceintospace/src/game/CMakeLists.txt
> --- raceintospace.orig/src/game/CMakeLists.txt	2014-09-13 13:54:07.684088605 +0200
> +++ raceintospace/src/game/CMakeLists.txt	2014-09-13 13:05:05.191946197 +0200
> @@ -55,6 +55,7 @@
>    news_suq.cpp
>    options.cpp
>    pace.cpp
> +  physfscompat.cpp
>    place.cpp
>    port.cpp
>    prefs.cpp
> diff -ruN -x .git -x .pc raceintospace.orig/src/game/file.cpp raceintospace/src/game/file.cpp
> --- raceintospace.orig/src/game/file.cpp	2014-09-13 13:54:07.688088605 +0200
> +++ raceintospace/src/game/file.cpp	2014-09-12 23:15:22.191673360 +0200
> @@ -4,6 +4,7 @@
>  #include <stdexcept>
>  
>  #include "file.h"
> +#include "physfscompat.h"
>  
>  #define m_phys_handle ((PHYSFS_File*)m_handle)
>  
> diff -ruN -x .git -x .pc raceintospace.orig/src/game/filesystem.cpp raceintospace/src/game/filesystem.cpp
> --- raceintospace.orig/src/game/filesystem.cpp	2014-09-13 13:54:07.688088605 +0200
> +++ raceintospace/src/game/filesystem.cpp	2014-09-12 23:32:07.607722019 +0200
> @@ -8,6 +8,7 @@
>  
>  #include "raceintospace_config.h"
>  #include "filesystem.h"
> +#include "physfscompat.h"
>  
>  using boost::format;
>  
> diff -ruN -x .git -x .pc raceintospace.orig/src/game/physfscompat.cpp raceintospace/src/game/physfscompat.cpp
> --- raceintospace.orig/src/game/physfscompat.cpp	1970-01-01 01:00:00.000000000 +0100
> +++ raceintospace/src/game/physfscompat.cpp	2014-09-13 13:49:16.032074490 +0200
> @@ -0,0 +1,145 @@
> +/*
> + * PhysFS compatibility layer from Hedgewars, a free turn based strategy game
> + * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; version 2 of the License
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> + */
> +
> +#include <stddef.h>
> +#include <string.h>
> +#include <assert.h>
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <sys/stat.h>
> +#include <sys/types.h>
> +#include <errno.h>
> +
> +#include "physfscompat.h"
> +#include "utils.h"
> +#include "logging.h"
> +
> +#ifdef _PHYSFS_COMPAT
> +
> +LOG_DEFAULT_CATEGORY(filesys)
> +
> +PHYSFS_DECL int PHYSFS_stat(const char *fname, PHYSFS_Stat *stat)
> +{
> +    PHYSFS_File * handle;
> +
> +    if (PHYSFS_exists(fname))
> +    {
> +        handle = PHYSFS_openRead(fname);
> +        if (handle)
> +        {
> +            stat->filesize = PHYSFS_fileLength(handle);
> +            PHYSFS_close(handle);
> +            handle = 0;
> +        }
> +        else
> +            stat->filesize = -1;
> +
> +        stat->modtime = PHYSFS_getLastModTime(fname);
> +        stat->createtime = -1;
> +        stat->accesstime = -1;
> +
> +        if (PHYSFS_isSymbolicLink(fname))
> +            stat->filetype = PHYSFS_FILETYPE_SYMLINK;
> +        else if (PHYSFS_isDirectory(fname))
> +            stat->filetype = PHYSFS_FILETYPE_DIRECTORY;
> +        else stat->filetype = PHYSFS_FILETYPE_REGULAR;
> +
> +        stat->readonly = 0; /* not supported */
> +
> +        /* success */
> +        return 1;
> +    }
> +
> +    /* does not exist, can't stat */
> +    return 0;
> +}
> +
> +PHYSFS_DECL PHYSFS_sint64 PHYSFS_readBytes(PHYSFS_File *handle, void *buffer,
> +                                           PHYSFS_uint64 len)
> +{
> +    return PHYSFS_read(handle, buffer, 1, len);
> +}
> +
> +
> +PHYSFS_DECL PHYSFS_sint64 PHYSFS_writeBytes(PHYSFS_File *handle,
> +                                            const void *buffer,
> +                                            PHYSFS_uint64 len)
> +{
> +    return PHYSFS_write(handle, buffer, 1, len);
> +}
> +
> +/* Compatibility wrapper around PHYSFS_getPrefDir, essentially a backport
> +   from PhysFS upstream, with minor modifications by Hendrik Weimer
> +   <hendrik@enyo.de>. The PhysFS license text is reproduced below.
> +
> +   Copyright (c) 2001-2011 Ryan C. Gordon and others.
> +
> +   This software is provided 'as-is', without any express or implied warranty.
> +   In no event will the authors be held liable for any damages arising from
> +   the use of this software.
> +
> +   Permission is granted to anyone to use this software for any purpose,
> +   including commercial applications, and to alter it and redistribute it
> +   freely, subject to the following restrictions:
> +
> +   1. The origin of this software must not be misrepresented; you must not
> +   claim that you wrote the original software. If you use this software in a
> +   product, an acknowledgment in the product documentation would be
> +   appreciated but is not required.
> +
> +   2. Altered source versions must be plainly marked as such, and must not be
> +   misrepresented as being the original software.
> +
> +   3. This notice may not be removed or altered from any source distribution.
> +
> +       Ryan C. Gordon <icculus@icculus.org>
> +*/
> +   
> +PHYSFS_DECL const char *PHYSFS_getPrefDir(const char *org, const char *app)
> +{
> +    const char *envr = getenv("XDG_DATA_HOME");
> +    const char *append = "/";
> +    char *retval = NULL;
> +    size_t len = 0;
> +    struct stat st;
> +
> +    if (!envr)
> +    {
> +        /* You end up with "$HOME/.local/share/Game Name 2" */
> +        envr = getenv("HOME"); 
> +        append = "/.local/share/";
> +    } /* if */
> +
> +    if(!envr)
> +    {
> +        CRITICAL1("could not find preferences directory");
> +        exit(EXIT_FAILURE);
> +    }
> +
> +    len = strlen(envr) + strlen(append) + strlen(app) + 2;
> +    retval = (char *) xmalloc(len);
> +    snprintf(retval, len, "%s%s%s/", envr, append, app);
> +
> +    if(stat(retval, &st) && (errno == ENOENT))
> +        mkdir(retval, 0755);
> +
> +    return retval;
> +
> +}
> +
> +#endif /* _PHYSFS_COMPAT */
> diff -ruN -x .git -x .pc raceintospace.orig/src/game/physfscompat.h raceintospace/src/game/physfscompat.h
> --- raceintospace.orig/src/game/physfscompat.h	1970-01-01 01:00:00.000000000 +0100
> +++ raceintospace/src/game/physfscompat.h	2014-09-13 13:51:04.280079729 +0200
> @@ -0,0 +1,73 @@
> +/*
> + * PhysFS compatibility layer from Hedgewars, a free turn based strategy game
> + * Copyright (c) 2004-2014 Andrey Korotaev <unC0Rr@gmail.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; version 2 of the License
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> + */
> +
> +#ifndef _PHYSFSCOMPAT_H
> +#define _PHYSFSCOMPAT_H
> +
> +#include "physfs.h"
> +
> +#if PHYSFS_VER_MAJOR == 2
> +#if PHYSFS_VER_MINOR == 0
> +
> +#define _PHYSFS_COMPAT
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +#define PHYSFS_DECL __EXPORT__
> +
> +typedef enum PHYSFS_FileType
> +{
> +    PHYSFS_FILETYPE_REGULAR,
> +    PHYSFS_FILETYPE_DIRECTORY,
> +    PHYSFS_FILETYPE_SYMLINK,
> +    PHYSFS_FILETYPE_OTHER
> +} PHYSFS_FileType;
> +
> +typedef struct PHYSFS_Stat
> +{
> +    PHYSFS_sint64 filesize;
> +    PHYSFS_sint64 modtime;
> +    PHYSFS_sint64 createtime;
> +    PHYSFS_sint64 accesstime;
> +    PHYSFS_FileType filetype;
> +    int readonly;
> +} PHYSFS_Stat;
> +
> +PHYSFS_DECL int PHYSFS_stat(const char *fname, PHYSFS_Stat *stat);
> +
> +PHYSFS_DECL PHYSFS_sint64 PHYSFS_readBytes(PHYSFS_File *handle, void *buffer,
> +                                           PHYSFS_uint64 len);
> +
> +
> +PHYSFS_DECL PHYSFS_sint64 PHYSFS_writeBytes(PHYSFS_File *handle,
> +                                            const void *buffer,
> +                                            PHYSFS_uint64 len);
> +
> +PHYSFS_DECL const char *PHYSFS_getPrefDir(const char *org, const char *app);
> +
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif /* PHYSFS_VER_MAJOR == 2 */
> +#endif /* PHYSFS_VER_MINOR == 0 */
> +
> +#endif /* _PHYSFSCOMPAT_H */


-- 
Dariusz Dwornikowski, 
  Institute of Computing Science, Poznań University of Technology
  www.cs.put.poznan.pl/ddwornikowski/  
  room 2.7.2 BTiCW | tel. +48 61 665 29 41

Attachment: signature.asc
Description: Digital signature


Reply to: