> 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