public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/gnome:gnome-next commit in: media-libs/rply/, media-libs/rply/files/
@ 2011-07-20 10:40 Alexandre Restovtsev
  0 siblings, 0 replies; 2+ messages in thread
From: Alexandre Restovtsev @ 2011-07-20 10:40 UTC (permalink / raw
  To: gentoo-commits

commit:     38ef9d3e0c879ed0707c897e8c1da666a183cce2
Author:     Alexandre Rostovtsev <tetromino <AT> gmail <DOT> com>
AuthorDate: Wed Jul 20 08:20:50 2011 +0000
Commit:     Alexandre Restovtsev <tetromino <AT> gmail <DOT> com>
CommitDate: Wed Jul 20 08:27:59 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gnome.git;a=commit;h=38ef9d3e

media-libs/rply: new package

Add the rply library for reading and writing PLY files (it's needed for
media-libs/mesh; although mesh bundles its own copy of rply, follow best
practices and Fedora's example to unbundle rply into a separate shared
library).

---
 media-libs/rply/files/rply_CMakeLists.txt |   39 +++++++++++++++++++++++++++++
 media-libs/rply/rply-1.01.ebuild          |   30 ++++++++++++++++++++++
 2 files changed, 69 insertions(+), 0 deletions(-)

diff --git a/media-libs/rply/files/rply_CMakeLists.txt b/media-libs/rply/files/rply_CMakeLists.txt
new file mode 100644
index 0000000..5497fff
--- /dev/null
+++ b/media-libs/rply/files/rply_CMakeLists.txt
@@ -0,0 +1,39 @@
+# Fedora's cmake file for rply
+# http://pkgs.fedoraproject.org/gitweb/?p=rply.git;a=blob;f=rply_CMakeLists.txt
+PROJECT(rply)
+cmake_minimum_required(VERSION 2.6)
+
+SET(RPLY_LIB_MAJOR_VERSION 1)
+SET(RPLY_LIB_MINOR_VERSION 01)
+
+SET(RPLY_CMAKE_DIR ${CMAKE_SOURCE_DIR}/CMake/ )
+SET(RPLY_LIBRARY librply.so )
+
+add_library(rply SHARED rply.c )
+set_target_properties( rply PROPERTIES
+                              VERSION ${RPLY_LIB_MAJOR_VERSION}.${RPLY_LIB_MINOR_VERSION}
+                              SOVERSION ${RPLY_LIB_MAJOR_VERSION}
+                              ) 
+
+include_directories( ${CMAKE_SOURCE_DIR} )
+add_executable(rply_convert etc/convert.c )
+add_executable(rply_dump etc/dump.c )
+add_executable(rply_sconvert etc/sconvert.c )
+target_link_libraries (rply_convert rply)
+target_link_libraries (rply_dump rply)
+target_link_libraries (rply_sconvert rply)
+
+# Installs the header files
+install(FILES rply.h DESTINATION include/rply)
+
+# Installs the target file
+install(TARGETS rply LIBRARY DESTINATION lib${LIB_SUFFIX})
+install(TARGETS rply_convert RUNTIME DESTINATION bin)
+install(TARGETS rply_dump RUNTIME DESTINATION bin)
+install(TARGETS rply_sconvert RUNTIME DESTINATION bin)
+
+#This should be the last line of the project
+SUBDIRS( CMake/export )
+
+
+

diff --git a/media-libs/rply/rply-1.01.ebuild b/media-libs/rply/rply-1.01.ebuild
new file mode 100644
index 0000000..8c9bdd4
--- /dev/null
+++ b/media-libs/rply/rply-1.01.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI="4"
+
+inherit cmake-utils
+
+DESCRIPTION="A library to read and write PLY files"
+HOMEPAGE="http://w3.impa.br/~diego/software/rply/"
+SRC_URI="http://w3.impa.br/~diego/software/rply/${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="doc"
+
+DEPEND=""
+RDEPEND="${DEPEND}"
+
+pkg_setup() {
+	use doc && HTML_DOCS="manual/*"
+}
+
+src_prepare() {
+	# rply doesn't have *any* build system - not even a Makefile!
+	# For simplicity, use the cmake file that Fedora maintainers have created
+	cp "${FILESDIR}/rply_CMakeLists.txt" CMakeLists.txt
+	mkdir -p CMake/export
+}



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [gentoo-commits] proj/gnome:gnome-next commit in: media-libs/rply/, media-libs/rply/files/
@ 2011-09-26 10:26 Alexandre Restovtsev
  0 siblings, 0 replies; 2+ messages in thread
From: Alexandre Restovtsev @ 2011-09-26 10:26 UTC (permalink / raw
  To: gentoo-commits

commit:     a3d21a5db0c24475cc20ea207952205bc954f0b7
Author:     Alexandre Rostovtsev <tetromino <AT> gmail <DOT> com>
AuthorDate: Mon Sep 26 10:13:33 2011 +0000
Commit:     Alexandre Restovtsev <tetromino <AT> gmail <DOT> com>
CommitDate: Mon Sep 26 10:13:33 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gnome.git;a=commit;h=a3d21a5d

media-libs/rply: 1.01 → 1.01-r1

Add patches to fix horrible bugs in upstream code:
1. Use int16_t and int32_t instead of assuming e.g. that sizeof(long)
and sizeof(short) are some specific number of bytes (yes, rply is a very
old piece of software).
2. Switch LC_NUMERIC locale to "C" to ensure "." is used as the decimal
separator.

---
 media-libs/rply/files/rply-1.01-lc_numeric.patch   |   86 +++++++++
 media-libs/rply/files/rply-1.01-stdint.h.patch     |  185 ++++++++++++++++++++
 .../rply/{rply-1.01.ebuild => rply-1.01-r1.ebuild} |    6 +
 3 files changed, 277 insertions(+), 0 deletions(-)

diff --git a/media-libs/rply/files/rply-1.01-lc_numeric.patch b/media-libs/rply/files/rply-1.01-lc_numeric.patch
new file mode 100644
index 0000000..6d98abd
--- /dev/null
+++ b/media-libs/rply/files/rply-1.01-lc_numeric.patch
@@ -0,0 +1,86 @@
+From 8a7a76b7dcc94e8e71725e26a146330c73377ebd Mon Sep 17 00:00:00 2001
+From: Alexandre Rostovtsev <tetromino@gmail.com>
+Date: Mon, 26 Sep 2011 04:46:44 -0400
+Subject: [PATCH 2/2] Switch LC_NUMERIC locale to "C" for decimal point
+ separator safety
+
+Make sure to switch the LC_NUMERIC locale to "C" when using strtod() and
+fpritnf("%g",...) to ensure that '.' is used as the decimal point
+separator when reading and writing .ply files.
+---
+ rply.c |   31 +++++++++++++++++++++++++++----
+ 1 files changed, 27 insertions(+), 4 deletions(-)
+
+diff --git a/rply.c b/rply.c
+index 9eaa77f..789c002 100644
+--- a/rply.c
++++ b/rply.c
+@@ -12,6 +12,7 @@
+ #include <string.h>
+ #include <limits.h>
+ #include <float.h>
++#include <locale.h>
+ #include <stdarg.h>
+ #include <stdlib.h>
+ #include <stddef.h>
+@@ -1229,13 +1230,27 @@ static int oascii_uint32(p_ply ply, double value) {
+ }
+ 
+ static int oascii_float32(p_ply ply, double value) {
++    char *curr_locale;
++    int ret;
+     if (value < -FLT_MAX || value > FLT_MAX) return 0;
+-    return fprintf(ply->fp, "%g ", (float) value) > 0;
++    /* Switch locale to C to use '.' as the decimal point separator */
++    curr_locale = setlocale(LC_NUMERIC, NULL);
++    setlocale(LC_NUMERIC, "C");
++    ret = fprintf(ply->fp, "%g ", (float) value);
++    setlocale(LC_NUMERIC, curr_locale);
++    return ret > 0;
+ }
+ 
+ static int oascii_float64(p_ply ply, double value) {
++    char *curr_locale;
++    int ret;
+     if (value < -DBL_MAX || value > DBL_MAX) return 0;
+-    return fprintf(ply->fp, "%g ", value) > 0;
++    /* Switch locale to C to use '.' as the decimal point separator */
++    curr_locale = setlocale(LC_NUMERIC, NULL);
++    setlocale(LC_NUMERIC, "C");
++    ret = fprintf(ply->fp, "%g ", value);
++    setlocale(LC_NUMERIC, curr_locale);
++    return ret > 0;
+ }
+ 
+ static int obinary_int8(p_ply ply, double value) {
+@@ -1336,17 +1351,25 @@ static int iascii_uint32(p_ply ply, double *value) {
+ }
+ 
+ static int iascii_float32(p_ply ply, double *value) {
+-    char *end;
++    char *end, *curr_locale;
+     if (!ply_read_word(ply)) return 0;
++    /* Switch locale to C to use '.' as the decimal point separator */
++    curr_locale = setlocale(LC_NUMERIC, NULL);
++    setlocale(LC_NUMERIC, "C");
+     *value = strtod(BWORD(ply), &end);
++    setlocale(LC_NUMERIC, curr_locale);
+     if (*end || *value < -FLT_MAX || *value > FLT_MAX) return 0;
+     return 1;
+ }
+ 
+ static int iascii_float64(p_ply ply, double *value) {
+-    char *end;
++    char *end, *curr_locale;
+     if (!ply_read_word(ply)) return 0;
++    /* Switch locale to C to use '.' as the decimal point separator */
++    curr_locale = setlocale(LC_NUMERIC, NULL);
++    setlocale(LC_NUMERIC, "C");
+     *value = strtod(BWORD(ply), &end);
++    setlocale(LC_NUMERIC, curr_locale);
+     if (*end || *value < -DBL_MAX || *value > DBL_MAX) return 0;
+     return 1;
+ }
+-- 
+1.7.6.1
+

diff --git a/media-libs/rply/files/rply-1.01-stdint.h.patch b/media-libs/rply/files/rply-1.01-stdint.h.patch
new file mode 100644
index 0000000..45c9116
--- /dev/null
+++ b/media-libs/rply/files/rply-1.01-stdint.h.patch
@@ -0,0 +1,185 @@
+From eeb09032068baed6d81cff01cdfcccd6d55a8152 Mon Sep 17 00:00:00 2001
+From: Alexandre Rostovtsev <tetromino@gmail.com>
+Date: Mon, 26 Sep 2011 04:45:49 -0400
+Subject: [PATCH 1/2] Use stdint.h types
+
+Use stdint.h types (int16_t and int32_t) instead of assuming that short
+and long must always a specific number of bytes. Also, use strtoul for
+reading uint32_t values.
+---
+ rply.c |   61 ++++++++++++++++++++++++++++---------------------------------
+ 1 files changed, 28 insertions(+), 33 deletions(-)
+
+diff --git a/rply.c b/rply.c
+index 042244f..9eaa77f 100644
+--- a/rply.c
++++ b/rply.c
+@@ -15,6 +15,7 @@
+ #include <stdarg.h>
+ #include <stdlib.h>
+ #include <stddef.h>
++#include <stdint.h>
+ 
+ #include "rply.h"
+ 
+@@ -1183,18 +1184,12 @@ static e_ply_storage_mode ply_arch_endian(void) {
+ static int ply_type_check(void) {
+     assert(sizeof(char) == 1);
+     assert(sizeof(unsigned char) == 1);
+-    assert(sizeof(short) == 2);
+-    assert(sizeof(unsigned short) == 2);
+-    assert(sizeof(long) == 4);
+-    assert(sizeof(unsigned long) == 4);
++    assert(sizeof(long) >= 4);
+     assert(sizeof(float) == 4);
+     assert(sizeof(double) == 8);
+     if (sizeof(char) != 1) return 0;
+     if (sizeof(unsigned char) != 1) return 0;
+-    if (sizeof(short) != 2) return 0;
+-    if (sizeof(unsigned short) != 2) return 0;
+-    if (sizeof(long) != 4) return 0;
+-    if (sizeof(unsigned long) != 4) return 0;
++    if (sizeof(long) < 4) return 0;
+     if (sizeof(float) != 4) return 0;
+     if (sizeof(double) != 8) return 0;
+     return 1;
+@@ -1214,23 +1209,23 @@ static int oascii_uint8(p_ply ply, double value) {
+ }
+ 
+ static int oascii_int16(p_ply ply, double value) {
+-    if (value > SHRT_MAX || value < SHRT_MIN) return 0;
+-    return fprintf(ply->fp, "%d ", (short) value) > 0;
++    if (value > INT16_MAX || value < INT16_MIN) return 0;
++    return fprintf(ply->fp, "%d ", (int16_t) value) > 0;
+ }
+ 
+ static int oascii_uint16(p_ply ply, double value) {
+-    if (value > USHRT_MAX || value < 0) return 0;
+-    return fprintf(ply->fp, "%d ", (unsigned short) value) > 0;
++    if (value > UINT16_MAX || value < 0) return 0;
++    return fprintf(ply->fp, "%d ", (uint16_t) value) > 0;
+ }
+ 
+ static int oascii_int32(p_ply ply, double value) {
+-    if (value > LONG_MAX || value < LONG_MIN) return 0;
+-    return fprintf(ply->fp, "%d ", (int) value) > 0;
++    if (value > INT32_MAX || value < INT32_MIN) return 0;
++    return fprintf(ply->fp, "%d ", (int32_t) value) > 0;
+ }
+ 
+ static int oascii_uint32(p_ply ply, double value) {
+-    if (value > ULONG_MAX || value < 0) return 0;
+-    return fprintf(ply->fp, "%d ", (unsigned int) value) > 0;
++    if (value > UINT32_MAX || value < 0) return 0;
++    return fprintf(ply->fp, "%d ", (uint32_t) value) > 0;
+ }
+ 
+ static int oascii_float32(p_ply ply, double value) {
+@@ -1256,26 +1251,26 @@ static int obinary_uint8(p_ply ply, double value) {
+ }
+ 
+ static int obinary_int16(p_ply ply, double value) {
+-    short int16 = (short) value;
+-    if (value > SHRT_MAX || value < SHRT_MIN) return 0;
++    int16_t int16 = value;
++    if (value > INT16_MAX || value < INT16_MIN) return 0;
+     return ply->odriver->ochunk(ply, &int16, sizeof(int16));
+ }
+ 
+ static int obinary_uint16(p_ply ply, double value) {
+-    unsigned short uint16 = (unsigned short) value;
+-    if (value > USHRT_MAX || value < 0) return 0;
++    uint16_t uint16 = value;
++    if (value > UINT16_MAX || value < 0) return 0;
+     return ply->odriver->ochunk(ply, &uint16, sizeof(uint16)); 
+ }
+ 
+ static int obinary_int32(p_ply ply, double value) {
+-    long int32 = (long) value;
+-    if (value > LONG_MAX || value < LONG_MIN) return 0;
++    int32_t int32 = value;
++    if (value > INT32_MAX || value < INT32_MIN) return 0;
+     return ply->odriver->ochunk(ply, &int32, sizeof(int32));
+ }
+ 
+ static int obinary_uint32(p_ply ply, double value) {
+-    unsigned long uint32 = (unsigned long) value;
+-    if (value > ULONG_MAX || value < 0) return 0;
++    uint32_t uint32 = value;
++    if (value > UINT32_MAX || value < 0) return 0;
+     return ply->odriver->ochunk(ply, &uint32, sizeof(uint32));
+ }
+ 
+@@ -1312,7 +1307,7 @@ static int iascii_int16(p_ply ply, double *value) {
+     char *end;
+     if (!ply_read_word(ply)) return 0;
+     *value = strtol(BWORD(ply), &end, 10);
+-    if (*end || *value > SHRT_MAX || *value < SHRT_MIN) return 0;
++    if (*end || *value > INT16_MAX || *value < INT16_MIN) return 0;
+     return 1;
+ }
+ 
+@@ -1320,7 +1315,7 @@ static int iascii_uint16(p_ply ply, double *value) {
+     char *end;
+     if (!ply_read_word(ply)) return 0;
+     *value = strtol(BWORD(ply), &end, 10);
+-    if (*end || *value > USHRT_MAX || *value < 0) return 0;
++    if (*end || *value > UINT16_MAX || *value < 0) return 0;
+     return 1;
+ }
+ 
+@@ -1328,15 +1323,15 @@ static int iascii_int32(p_ply ply, double *value) {
+     char *end;
+     if (!ply_read_word(ply)) return 0;
+     *value = strtol(BWORD(ply), &end, 10);
+-    if (*end || *value > LONG_MAX || *value < LONG_MIN) return 0;
++    if (*end || *value > INT32_MAX || *value < INT32_MIN) return 0;
+     return 1;
+ }
+ 
+ static int iascii_uint32(p_ply ply, double *value) {
+     char *end;
+     if (!ply_read_word(ply)) return 0;
+-    *value = strtol(BWORD(ply), &end, 10);
+-    if (*end || *value < 0) return 0;
++    *value = strtoul(BWORD(ply), &end, 10);
++    if (*end || *value > UINT32_MAX || *value < 0) return 0;
+     return 1;
+ }
+ 
+@@ -1371,28 +1366,28 @@ static int ibinary_uint8(p_ply ply, double *value) {
+ }
+ 
+ static int ibinary_int16(p_ply ply, double *value) {
+-    short int16;
++    int16_t int16;
+     if (!ply->idriver->ichunk(ply, &int16, sizeof(int16))) return 0;
+     *value = int16;
+     return 1;
+ }
+ 
+ static int ibinary_uint16(p_ply ply, double *value) {
+-    unsigned short uint16;
++    uint16_t uint16;
+     if (!ply->idriver->ichunk(ply, &uint16, sizeof(uint16))) return 0;
+     *value = uint16;
+     return 1;
+ }
+ 
+ static int ibinary_int32(p_ply ply, double *value) {
+-    long int32;
++    int32_t int32;
+     if (!ply->idriver->ichunk(ply, &int32, sizeof(int32))) return 0;
+     *value = int32;
+     return 1;
+ }
+ 
+ static int ibinary_uint32(p_ply ply, double *value) {
+-    unsigned long uint32;
++    uint32_t uint32;
+     if (!ply->idriver->ichunk(ply, &uint32, sizeof(uint32))) return 0;
+     *value = uint32;
+     return 1;
+-- 
+1.7.6.1
+

diff --git a/media-libs/rply/rply-1.01.ebuild b/media-libs/rply/rply-1.01-r1.ebuild
similarity index 74%
rename from media-libs/rply/rply-1.01.ebuild
rename to media-libs/rply/rply-1.01-r1.ebuild
index 8c9bdd4..d776145 100644
--- a/media-libs/rply/rply-1.01.ebuild
+++ b/media-libs/rply/rply-1.01-r1.ebuild
@@ -27,4 +27,10 @@ src_prepare() {
 	# For simplicity, use the cmake file that Fedora maintainers have created
 	cp "${FILESDIR}/rply_CMakeLists.txt" CMakeLists.txt
 	mkdir -p CMake/export
+
+	# Use int16_t and int32_t instead of assuming e.g. that sizeof(long) == 4
+	epatch "${FILESDIR}/${P}-stdint.h.patch"
+
+	# Switch LC_NUMERIC locale to "C" to ensure "." is the decimal separator
+	epatch "${FILESDIR}/${P}-lc_numeric.patch"
 }



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-09-26 10:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-26 10:26 [gentoo-commits] proj/gnome:gnome-next commit in: media-libs/rply/, media-libs/rply/files/ Alexandre Restovtsev
  -- strict thread matches above, loose matches on Subject: below --
2011-07-20 10:40 Alexandre Restovtsev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox