Browse Source

Merge 0.9.5

Christophe Riccio 11 years ago
parent
commit
842cea8747

+ 8 - 4
CMakeLists.txt

@@ -4,11 +4,14 @@ cmake_policy(VERSION 2.6)
 project(glm)
 project(glm)
 enable_testing()
 enable_testing()
 
 
+list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
+include(GNUInstallDirs)
+
 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
 
 
 option(GLM_TEST_ENABLE "GLM test" OFF)
 option(GLM_TEST_ENABLE "GLM test" OFF)
 if(NOT GLM_TEST_ENABLE)
 if(NOT GLM_TEST_ENABLE)
-	message(FATAL_ERROR "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench")
+	message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench")
 endif()
 endif()
 
 
 if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND UNIX))
 if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND UNIX))
@@ -124,10 +127,11 @@ if(CMAKE_COMPILER_IS_GNUCXX)
 	#ctest_enable_coverage()
 	#ctest_enable_coverage()
 endif()
 endif()
 
 
-include_directories(".")
-include_directories("./test/external")
+include_directories("${PROJECT_SOURCE_DIR}")
+include_directories("${PROJECT_SOURCE_DIR}/test/external")
 
 
 add_subdirectory(glm)
 add_subdirectory(glm)
 add_subdirectory(test)
 add_subdirectory(test)
+add_subdirectory(util)
 
 
-install(DIRECTORY glm DESTINATION include)
+install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR})

+ 188 - 0
cmake/GNUInstallDirs.cmake

@@ -0,0 +1,188 @@
+# - Define GNU standard installation directories
+# Provides install directory variables as defined for GNU software:
+#  http://www.gnu.org/prep/standards/html_node/Directory-Variables.html
+# Inclusion of this module defines the following variables:
+#  CMAKE_INSTALL_<dir>      - destination for files of a given type
+#  CMAKE_INSTALL_FULL_<dir> - corresponding absolute path
+# where <dir> is one of:
+#  BINDIR           - user executables (bin)
+#  SBINDIR          - system admin executables (sbin)
+#  LIBEXECDIR       - program executables (libexec)
+#  SYSCONFDIR       - read-only single-machine data (etc)
+#  SHAREDSTATEDIR   - modifiable architecture-independent data (com)
+#  LOCALSTATEDIR    - modifiable single-machine data (var)
+#  LIBDIR           - object code libraries (lib or lib64 or lib/<multiarch-tuple> on Debian)
+#  INCLUDEDIR       - C header files (include)
+#  OLDINCLUDEDIR    - C header files for non-gcc (/usr/include)
+#  DATAROOTDIR      - read-only architecture-independent data root (share)
+#  DATADIR          - read-only architecture-independent data (DATAROOTDIR)
+#  INFODIR          - info documentation (DATAROOTDIR/info)
+#  LOCALEDIR        - locale-dependent data (DATAROOTDIR/locale)
+#  MANDIR           - man documentation (DATAROOTDIR/man)
+#  DOCDIR           - documentation root (DATAROOTDIR/doc/PROJECT_NAME)
+# Each CMAKE_INSTALL_<dir> value may be passed to the DESTINATION options of
+# install() commands for the corresponding file type.  If the includer does
+# not define a value the above-shown default will be used and the value will
+# appear in the cache for editing by the user.
+# Each CMAKE_INSTALL_FULL_<dir> value contains an absolute path constructed
+# from the corresponding destination by prepending (if necessary) the value
+# of CMAKE_INSTALL_PREFIX.
+
+#=============================================================================
+# Copyright 2011 Nikita Krupen'ko <[email protected]>
+# Copyright 2011 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+# Installation directories
+#
+if(NOT DEFINED CMAKE_INSTALL_BINDIR)
+  set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_SBINDIR)
+  set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR)
+  set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)
+  set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR)
+  set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR)
+  set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
+  set(_LIBDIR_DEFAULT "lib")
+  # Override this default 'lib' with 'lib64' iff:
+  #  - we are on Linux system but NOT cross-compiling
+  #  - we are NOT on debian
+  #  - we are on a 64 bits system
+  # reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf
+  # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if
+  # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"
+  # See http://wiki.debian.org/Multiarch
+  if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU")
+      AND NOT CMAKE_CROSSCOMPILING)
+    if (EXISTS "/etc/debian_version") # is this a debian system ?
+       if(CMAKE_LIBRARY_ARCHITECTURE)
+         set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+       endif()
+    else() # not debian, rely on CMAKE_SIZEOF_VOID_P:
+      if(NOT DEFINED CMAKE_SIZEOF_VOID_P)
+        message(AUTHOR_WARNING
+          "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "
+          "Please enable at least one language before including GNUInstallDirs.")
+      else()
+        if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
+          set(_LIBDIR_DEFAULT "lib64")
+        endif()
+      endif()
+    endif()
+  endif()
+  set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR)
+  set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR)
+  set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)")
+endif()
+
+if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR)
+  set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)")
+endif()
+
+#-----------------------------------------------------------------------------
+# Values whose defaults are relative to DATAROOTDIR.  Store empty values in
+# the cache and store the defaults in local variables if the cache values are
+# not set explicitly.  This auto-updates the defaults as DATAROOTDIR changes.
+
+if(NOT CMAKE_INSTALL_DATADIR)
+  set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)")
+  set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}")
+endif()
+
+if(NOT CMAKE_INSTALL_INFODIR)
+  set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)")
+  set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info")
+endif()
+
+if(NOT CMAKE_INSTALL_LOCALEDIR)
+  set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)")
+  set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale")
+endif()
+
+if(NOT CMAKE_INSTALL_MANDIR)
+  set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)")
+  set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man")
+endif()
+
+if(NOT CMAKE_INSTALL_DOCDIR)
+  set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)")
+  set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}")
+endif()
+
+#-----------------------------------------------------------------------------
+
+mark_as_advanced(
+  CMAKE_INSTALL_BINDIR
+  CMAKE_INSTALL_SBINDIR
+  CMAKE_INSTALL_LIBEXECDIR
+  CMAKE_INSTALL_SYSCONFDIR
+  CMAKE_INSTALL_SHAREDSTATEDIR
+  CMAKE_INSTALL_LOCALSTATEDIR
+  CMAKE_INSTALL_LIBDIR
+  CMAKE_INSTALL_INCLUDEDIR
+  CMAKE_INSTALL_OLDINCLUDEDIR
+  CMAKE_INSTALL_DATAROOTDIR
+  CMAKE_INSTALL_DATADIR
+  CMAKE_INSTALL_INFODIR
+  CMAKE_INSTALL_LOCALEDIR
+  CMAKE_INSTALL_MANDIR
+  CMAKE_INSTALL_DOCDIR
+  )
+
+# Result directories
+#
+foreach(dir
+    BINDIR
+    SBINDIR
+    LIBEXECDIR
+    SYSCONFDIR
+    SHAREDSTATEDIR
+    LOCALSTATEDIR
+    LIBDIR
+    INCLUDEDIR
+    OLDINCLUDEDIR
+    DATAROOTDIR
+    DATADIR
+    INFODIR
+    LOCALEDIR
+    MANDIR
+    DOCDIR
+    )
+  if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}})
+    set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}")
+  else()
+    set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}")
+  endif()
+endforeach()

+ 7 - 5
glm/CMakeLists.txt

@@ -30,11 +30,13 @@ source_group("GTX Files" FILES ${GTX_HEADER})
 
 
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
 
 
-add_executable(${NAME} ${ROOT_TEXT}
-	${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER}
-	${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}
-	${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}
-	${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER})
+if(GLM_TEST_ENABLE)
+	add_executable(${NAME} ${ROOT_TEXT}
+		${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER}
+		${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}
+		${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}
+		${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER})
+endif(GLM_TEST_ENABLE)
 
 
 #add_library(glm STATIC glm.cpp)
 #add_library(glm STATIC glm.cpp)
 #add_library(glm_shared SHARED glm.cpp)
 #add_library(glm_shared SHARED glm.cpp)

+ 1 - 2
glm/detail/type_half.inl

@@ -38,8 +38,7 @@ namespace detail
 		volatile float f = 1e10;
 		volatile float f = 1e10;
 
 
 		for(int i = 0; i < 10; ++i)	
 		for(int i = 0; i < 10; ++i)	
-			f *= f;             // this will overflow before
-								// the for­loop terminates
+			f *= f; // this will overflow before the for loop terminates
 		return f;
 		return f;
 	}
 	}
 
 

+ 2 - 2
glm/gtx/color_space.hpp

@@ -64,8 +64,8 @@ namespace glm
 		
 		
 	/// Build a saturation matrix.
 	/// Build a saturation matrix.
 	/// @see gtx_color_space
 	/// @see gtx_color_space
-	template <typename T, precision P>
-	GLM_FUNC_DECL detail::tmat4x4<T, P> saturation(
+	template <typename T>
+	GLM_FUNC_DECL detail::tmat4x4<T, defaultp> saturation(
 		T const s);
 		T const s);
 
 
 	/// Modify the saturation of a color.
 	/// Modify the saturation of a color.

+ 4 - 4
glm/gtx/color_space.inl

@@ -106,16 +106,16 @@ namespace glm
 		return hsv;
 		return hsv;
 	}
 	}
 
 
-	template <typename T, precision P>
-	GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> saturation(const T s)
+	template <typename T>
+	GLM_FUNC_QUALIFIER detail::tmat4x4<T, defaultp> saturation(T const s)
 	{
 	{
-		detail::tvec3<T, P> rgbw = detail::tvec3<T, P>(T(0.2126), T(0.7152), T(0.0722));
+		detail::tvec3<T, defaultp> rgbw = detail::tvec3<T, defaultp>(T(0.2126), T(0.7152), T(0.0722));
 
 
 		T col0 = (T(1) - s) * rgbw.r;
 		T col0 = (T(1) - s) * rgbw.r;
 		T col1 = (T(1) - s) * rgbw.g;
 		T col1 = (T(1) - s) * rgbw.g;
 		T col2 = (T(1) - s) * rgbw.b;
 		T col2 = (T(1) - s) * rgbw.b;
 
 
-		detail::tmat4x4<T, P> result(T(1));
+		detail::tmat4x4<T, defaultp> result(T(1));
 		result[0][0] = col0 + s;
 		result[0][0] = col0 + s;
 		result[0][1] = col0;
 		result[0][1] = col0;
 		result[0][2] = col0;
 		result[0][2] = col0;

+ 1 - 1
glm/gtx/quaternion.inl

@@ -87,7 +87,7 @@ namespace glm
 			T Vec3Len = sqrt(q.x * q.x + q.y * q.y + q.z * q.z);
 			T Vec3Len = sqrt(q.x * q.x + q.y * q.y + q.z * q.z);
 			T QuatLen = sqrt(Vec3Len * Vec3Len + q.w * q.w);
 			T QuatLen = sqrt(Vec3Len * Vec3Len + q.w * q.w);
 			T t = atan(Vec3Len, T(q.w)) / Vec3Len;
 			T t = atan(Vec3Len, T(q.w)) / Vec3Len;
-			return detail::tquat<T, P>(t * q.x, t * q.y, t * q.z, log(QuatLen));
+			return detail::tquat<T, P>(log(QuatLen), t * q.x, t * q.y, t * q.z);
 		}
 		}
 	}
 	}
 
 

+ 7 - 0
readme.txt

@@ -44,6 +44,13 @@ GLM 0.9.6.0: 2014-XX-XX
 - Removed GLM_FORCE_RADIANS, active by default
 - Removed GLM_FORCE_RADIANS, active by default
 - Added move contructors and assignment operators (#141)
 - Added move contructors and assignment operators (#141)
 
 
+================================================================================
+GLM 0.9.5.4: 2014-0X-XX
+--------------------------------------------------------------------------------
+- Fixed non-utf8 character #196
+- Added FindGLM install for CMake #189
+- Fixed GTX_color_space - saturation #195
+
 ================================================================================
 ================================================================================
 GLM 0.9.5.3: 2014-04-02
 GLM 0.9.5.3: 2014-04-02
 --------------------------------------------------------------------------------
 --------------------------------------------------------------------------------

+ 7 - 5
test/CMakeLists.txt

@@ -1,10 +1,12 @@
 function(glmCreateTestGTC NAME)
 function(glmCreateTestGTC NAME)
-	set(SAMPLE_NAME test-${NAME})
-	add_executable(${SAMPLE_NAME} ${NAME}.cpp)
+	if(GLM_TEST_ENABLE)
+		set(SAMPLE_NAME test-${NAME})
+		add_executable(${SAMPLE_NAME} ${NAME}.cpp)
 
 
-	add_test( 
-	    NAME ${SAMPLE_NAME}
-	    COMMAND $<TARGET_FILE:${SAMPLE_NAME}> )
+		add_test(
+		    NAME ${SAMPLE_NAME}
+		    COMMAND $<TARGET_FILE:${SAMPLE_NAME}> )
+	endif(GLM_TEST_ENABLE)
 endfunction()
 endfunction()
 
 
 add_subdirectory(bug)
 add_subdirectory(bug)

+ 11 - 0
test/gtx/gtx_color_space.cpp

@@ -11,9 +11,20 @@
 #include <glm/gtc/type_precision.hpp>
 #include <glm/gtc/type_precision.hpp>
 #include <glm/gtx/color_space.hpp>
 #include <glm/gtx/color_space.hpp>
 
 
+int test_saturation()
+{
+	int Error(0);
+	
+	glm::vec4 Color = glm::saturation(1.0f, glm::vec4(1.0, 0.5, 0.0, 1.0));
+
+	return Error;
+}
+
 int main()
 int main()
 {
 {
 	int Error(0);
 	int Error(0);
 
 
+	Error += test_saturation();
+
 	return Error;
 	return Error;
 }
 }

+ 12 - 0
test/gtx/gtx_quaternion.cpp

@@ -87,10 +87,22 @@ int test_rotation()
 	return Error;
 	return Error;
 }
 }
 
 
+int test_log()
+{
+	int Error(0);
+	
+	glm::quat q;
+	glm::quat p = glm::log(q);
+	glm::quat r = glm::exp(p);
+
+	return Error;
+}
+
 int main()
 int main()
 {
 {
 	int Error(0);
 	int Error(0);
 
 
+	Error += test_log();
 	Error += test_rotation();
 	Error += test_rotation();
 	Error += test_quat_fastMix();
 	Error += test_quat_fastMix();
 	Error += test_quat_shortMix();
 	Error += test_quat_shortMix();

+ 3 - 0
util/CMakeLists.txt

@@ -0,0 +1,3 @@
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/FindGLM.cmake
+        DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake)
+