~ruther/guix-local

27751a4e76ba8d33a9ed00fc5011e90f45c2fba8 — Maxim Cournoyer 2 years ago 1592f1a
gnu: Add freesolid.

* gnu/packages/game-development.scm (freesolid): New variable.
* gnu/packages/patches/freesolid-configure.patch: New file.
* gnu/packages/patches/freesolid-pkgconfig.patch: Likewise.
* gnu/packages/patches/freesolid-automake.patch: Likewise.
* gnu/packages/patches/freesolid-autotools.patch: Likewise.
* gnu/local.mk (dist_patch_DATA): Register them.

Change-Id: I557332031a30d944f451d0a62c763e5b41c4e29b
Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
M gnu/local.mk => gnu/local.mk +4 -0
@@ 1294,6 1294,10 @@ dist_patch_DATA =						\
  %D%/packages/patches/freeimage-unbundle.patch		\
  %D%/packages/patches/freeimage-CVE-2020-21428.patch		\
  %D%/packages/patches/freeimage-CVE-2020-22524.patch		\
  %D%/packages/patches/freesolid-automake.patch			\
  %D%/packages/patches/freesolid-autotools.patch		\
  %D%/packages/patches/freesolid-configure.patch		\
  %D%/packages/patches/freesolid-pkgconfig.patch		\
  %D%/packages/patches/fulcrum-1.9.1-unbundled-libraries.patch	\
  %D%/packages/patches/fuse-glibc-2.34.patch			\
  %D%/packages/patches/fuse-overlapping-headers.patch		\

M gnu/packages/game-development.scm => gnu/packages/game-development.scm +30 -0
@@ 30,6 30,7 @@
;;; Copyright © 2022 dan <i@dan.games>
;;; Copyright © 2023, 2024 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
;;; Copyright © 2024 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 2780,6 2781,35 @@ specific knowledge of the hardware they are targeting.")
double-buffering.")
    (license license:gpl2+)))

(define-public freesolid
  (package
    (name "freesolid")
    (version "2.1.2")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/" name "/FreeSOLID-"
                                  version ".zip"))
              (sha256
               (base32
                "0wxqiv1ba227kwxpgwf6in9ai1lcamhmp1ib1c1chq4xvnpwdvc9"))
              (patches (search-patches "freesolid-autotools.patch"
                                       "freesolid-pkgconfig.patch"
                                       "freesolid-configure.patch"
                                       "freesolid-automake.patch"))))
    (build-system gnu-build-system)
    (arguments (list #:phases #~(modify-phases %standard-phases
                                  (add-after 'unpack 'force-reboostrap
                                    (lambda _
                                      (delete-file "bootstrap.sh")
                                      (delete-file "configure"))))))
    (native-inputs (list autoconf automake libtool unzip))
    (home-page "https://sourceforge.net/projects/freesolid/")
    (synopsis "3D collision detection C++ library")
    (description "FreeSOLID is a library for collision detection of
three-dimensional objects undergoing rigid motion and deformation.  FreeSOLID
is designed to be used in interactive 3D graphics applications.")
    (license license:lgpl2.0+)))

(define-public libccd
  (package
    (name "libccd")

A gnu/packages/patches/freesolid-automake.patch => gnu/packages/patches/freesolid-automake.patch +60 -0
@@ 0,0 1,60 @@
FreeSOLID-2.1.1-Makefile.am-update.patch

From: Alec Leamas <alec@tests.notat.diaspora.com>

This patch causes a few extra header files to be installed; they are used by
Speed-Dreams for example.

Source: https://src.fedoraproject.org/rpms/FreeSOLID/raw/rawhide/f/FreeSOLID-2.1.1-Makefile.am-update.patch
Rebased on top of 2.1.2 by Maxim Cournoyer
Upstream-status: https://sourceforge.net/p/freesolid/patches/11/

---

 Makefile.am          |   20 ++++++++++++++++++--
 libsolid/Makefile.am |    2 +-
 2 files changed, 19 insertions(+), 3 deletions(-)

--- a/Makefile.am	2024-10-28 15:17:22.787773430 +0900
+++ b/Makefile.am	2024-10-28 15:19:02.367752961 +0900
@@ -1,8 +1,24 @@
 ACLOCAL_AMFLAGS = -I m4
 SUBDIRS = libmoto libbroad libsolid sample doc
 
-EXTRA_DIST = include
+EXTRA_DIST = FreeSOLID.pc.in
 bin_SCRIPTS = freesolid-config
 
 pkgconfigdir         = $(libdir)/pkgconfig
-dist_pkgconfig_DATA  = FreeSOLID.pc
+nodist_pkgconfig_DATA  = FreeSOLID.pc
+
+FreeSOLID_3Ddir = $(includedir)/FreeSOLID/3D
+FreeSOLID_3D_HEADERS =
+FreeSOLID_3D_HEADERS += include/3D/Basic.h
+FreeSOLID_3D_HEADERS += include/3D/Matrix.h
+FreeSOLID_3D_HEADERS += include/3D/Point.h
+FreeSOLID_3D_HEADERS += include/3D/Quaternion.h
+FreeSOLID_3D_HEADERS += include/3D/Tuple3.h
+FreeSOLID_3D_HEADERS += include/3D/Tuple4.h
+FreeSOLID_3D_HEADERS += include/3D/Vector.h
+
+FreeSOLID_SOLIDdir = $(includedir)/FreeSOLID/SOLID
+FreeSOLID_SOLID_HEADERS =
+FreeSOLID_SOLID_HEADERS += include/SOLID/solid.h
+FreeSOLID_SOLID_HEADERS += include/SOLID/broad.h
+FreeSOLID_SOLID_HEADERS += include/SOLID/types.h

diff --git a/libsolid/Makefile.am b/libsolid/Makefile.am
index f722be3..623b2e8 100644
--- a/libsolid/Makefile.am
+++ b/libsolid/Makefile.am
@@ -21,7 +21,7 @@ libFreeSOLID_la_SOURCES = \
 	../libmoto/MT_Vector4.cpp
 
 
-libFreeSOLID_la_LDFLAGS = -no-undefined -version-info @FREESOLID_CURRENT@:@FREESOLID_REVISION@:@FREESOLID_AGE@ -release @VERSION@
+libFreeSOLID_la_LDFLAGS = -no-undefined -version-info @FREESOLID_CURRENT@:@FREESOLID_REVISION@:@FREESOLID_AGE@ 
 
 AM_CPPFLAGS = @CPPFLAGS@
 LIBS = @QHULL_LIBS@ -lm

A gnu/packages/patches/freesolid-autotools.patch => gnu/packages/patches/freesolid-autotools.patch +73 -0
@@ 0,0 1,73 @@
Upstream-status: https://sourceforge.net/p/freesolid/patches/1/

Resolve Autoconf warnings.

diff --git a/Makefile.am b/Makefile.am
index 4914f44..77b157a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,5 @@
+ACLOCAL_AMFLAGS = -I m4
 SUBDIRS = libmoto libbroad libsolid sample doc
 
 EXTRA_DIST = include
-bin_SCRIPTS = freesolid-config
\ No newline at end of file
+bin_SCRIPTS = freesolid-config
diff --git a/configure.in b/configure.in
index 7d61ba5..41a761c 100644
--- a/configure.in
+++ b/configure.in
@@ -1,5 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_INIT(sample/sample.cpp)
+AC_CONFIG_MACRO_DIR([m4])
 
 AC_CANONICAL_SYSTEM
 PACKAGE=FreeSOLID
@@ -22,17 +23,14 @@ AC_PROG_CXX
 AC_PROG_CC
 AC_PROG_CPP
 AC_PROG_INSTALL
-AC_PROG_RANLIB
 AC_PROG_LIBTOOL
 
 CPPFLAGS="$CPPFLAGS -I../include -I./include -I. -I../libbroad -I../libmoto"
 AC_SUBST(CPPFLAGS)
 
 dnl Checks for libraries.
-dnl Replace `main' with a function in -lm:
-AC_CHECK_LIB(m, main)
-dnl Replace `main' with a function in -lqhull:
-AC_CHECK_LIB(qhull, main, s_have_qhull=yes)
+AC_CHECK_LIB(m, ceil)
+AC_CHECK_LIB(qhull, qh_initbuild, s_have_qhull=yes)
 
 if test "X${s_have_qhull}" = Xyes; then
   QHULL_LIBS="-lqhull"
diff --git a/libsolid/Makefile.am b/libsolid/Makefile.am
index cc295c7..f722be3 100644
--- a/libsolid/Makefile.am
+++ b/libsolid/Makefile.am
@@ -23,7 +23,7 @@ libFreeSOLID_la_SOURCES = \
 
 libFreeSOLID_la_LDFLAGS = -no-undefined -version-info @FREESOLID_CURRENT@:@FREESOLID_REVISION@:@FREESOLID_AGE@ -release @VERSION@
 
-CPPFLAGS = @CPPFLAGS@
+AM_CPPFLAGS = @CPPFLAGS@
 LIBS = @QHULL_LIBS@ -lm
 
 pkginclude_HEADERS = \
diff --git a/sample/Makefile.am b/sample/Makefile.am
index 5559fb0..eaa705f 100644
--- a/sample/Makefile.am
+++ b/sample/Makefile.am
@@ -4,7 +4,7 @@ sample_SOURCES = sample.cpp
 x_wing_SOURCES = x_wing.cpp
 teapot_SOURCES = teapot.cpp
 
-CPPFLAGS = @CPPFLAGS@
+AM_CPPFLAGS = @CPPFLAGS@
 
 LDADD = ../libsolid/libFreeSOLID.la
 

A gnu/packages/patches/freesolid-configure.patch => gnu/packages/patches/freesolid-configure.patch +58 -0
@@ 0,0 1,58 @@
Fixes an incompatibility with Libtool 2+.

Rebased on FreeSOLID-2.1.2.

Originally retrieved from Fedora (see:
https://src.fedoraproject.org/rpms/FreeSOLID/raw/rawhide/f/FreeSOLID-2.1.1-configure.patch).

Upstream-status: https://sourceforge.net/p/freesolid/patches/10/

--- FreeSOLID-2.1.1/configure.in.orig	2012-05-24 20:58:30.000000000 +0200
+++ FreeSOLID-2.1.1/configure.in	2012-05-24 21:08:00.932445488 +0200
@@ -1,8 +1,11 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(sample/sample.cpp)
+AC_INIT
 AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_SRCDIR([sample/sample.cpp])
 
-AC_CANONICAL_SYSTEM
+AC_CONFIG_MACRO_DIR([m4])
+
+AC_CANONICAL_TARGET
 PACKAGE=FreeSOLID
 VERSION=2.1.1
 FREESOLID_CURRENT=2
@@ -15,15 +18,14 @@
 
 AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
 
-AM_CONFIG_HEADER(include/config.h)
+AC_CONFIG_HEADERS([include/config.h])
 
 dnl Checks for programs.
-AC_LIBTOOL_WIN32_DLL
 AC_PROG_CXX
 AC_PROG_CC
 AC_PROG_CPP
 AC_PROG_INSTALL
-AC_PROG_LIBTOOL
+LT_INIT([win32-dll])
 
 CPPFLAGS="$CPPFLAGS -I../include -I./include -I. -I../libbroad -I../libmoto"
 AC_SUBST(CPPFLAGS)
@@ -52,11 +54,6 @@
 AC_CHECK_FUNCS(sqrt)
 AC_CHECK_FUNCS(fabs)
 
-AC_OUTPUT([ doc/Makefile 
-            sample/Makefile 
-            Makefile 
-            libbroad/Makefile 
-            libmoto/Makefile 
-            libsolid/Makefile 
-            freesolid-config
-            FreeSOLID.pc])
+AC_CONFIG_FILES([doc/Makefile sample/Makefile Makefile libbroad/Makefile libmoto/Makefile libsolid/Makefile freesolid-config])
+AC_CONFIG_FILES([FreeSOLID.pc])
+AC_OUTPUT

A gnu/packages/patches/freesolid-pkgconfig.patch => gnu/packages/patches/freesolid-pkgconfig.patch +46 -0
@@ 0,0 1,46 @@
Upstream-status: https://sourceforge.net/p/freesolid/patches/5/

diff --git a/FreeSOLID.pc.in b/FreeSOLID.pc.in
new file mode 100644
index 0000000..c354f05
--- /dev/null
+++ b/FreeSOLID.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: FreeSolid
+Description: 3D collision detection C++ library
+Version: @VERSION@
+
+Libs: -L${libdir} -lFreeSOLID @QHULL_LIBS@
+Cflags: -I${includedir} -I${includedir}/FreeSOLID
+
diff --git a/configure.in b/configure.in
index 41a761c..a4bc7d4 100644
--- a/configure.in
+++ b/configure.in
@@ -52,4 +52,11 @@ dnl Checks for library functions.
 AC_CHECK_FUNCS(sqrt)
 AC_CHECK_FUNCS(fabs)
 
-AC_OUTPUT(doc/Makefile sample/Makefile Makefile libbroad/Makefile libmoto/Makefile libsolid/Makefile freesolid-config)
+AC_OUTPUT([ doc/Makefile 
+            sample/Makefile 
+            Makefile 
+            libbroad/Makefile 
+            libmoto/Makefile 
+            libsolid/Makefile 
+            freesolid-config
+            FreeSOLID.pc])
--- a/Makefile.am	2024-10-28 10:49:24.006849578 +0900
+++ b/Makefile.am	2024-10-28 10:50:13.378839511 +0900
@@ -3,3 +3,6 @@
 
 EXTRA_DIST = include
 bin_SCRIPTS = freesolid-config
+
+pkgconfigdir         = $(libdir)/pkgconfig
+dist_pkgconfig_DATA  = FreeSOLID.pc