File: ClipMode.cmake

package info (click to toggle)
libsndfile 1.2.2-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,180 kB
  • sloc: ansic: 55,354; cpp: 1,108; python: 791; makefile: 545; sh: 538; cs: 122
file content (92 lines) | stat: -rw-r--r-- 2,213 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
include (CheckCSourceRuns)
include (CMakePushCheckState)

macro (CLIP_MODE)
	if ((NOT DEFINED CPU_CLIPS_NEGATIVE) AND (NOT DEFINED CPU_CLIPS_POSITIVE))
		set (CLIP_MODE_POSITIVE_MESSAGE "Target processor clips on positive float to int conversion")
		set (CLIP_MODE_NEGATIVE_MESSAGE "Target processor clips on negative float to int conversion")

		message (STATUS "Checking processor clipping capabilities...")

		if (CMAKE_CROSSCOMPILING)

			set (CLIP_MSG "disabled")
			set (CPU_CLIPS_POSITIVE FALSE CACHE BOOL ${CLIP_MODE_POSITIVE_MESSAGE})
			set (CPU_CLIPS_NEGATIVE FALSE CACHE BOOL ${CLIP_MODE_NEGATIVE_MESSAGE})

		else (NOT CMAKE_CROSSCOMPILING)

			cmake_push_check_state ()
			
			set (CMAKE_REQUIRED_QUIET TRUE)
			if (LIBM_REQUIRED)
				set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${M_LIBRARY})
			endif ()
			
			check_c_source_runs (
			"
			#define	_ISOC9X_SOURCE	1
			#define _ISOC99_SOURCE	1
			#define	__USE_ISOC99	1
			#define __USE_ISOC9X	1
			#include <math.h>
			int main (void)
			{	double	fval ;
				int k, ival ;

				fval = 1.0 * 0x7FFFFFFF ;
				for (k = 0 ; k < 100 ; k++)
				{	ival = (lrint (fval)) >> 24 ;
					if (ival != 127)
						return 1 ;
				
					fval *= 1.2499999 ;
					} ;
				
					return 0 ;
				}
			"
			CPU_CLIPS_POSITIVE)
			
			check_c_source_runs (
			"
			#define	_ISOC9X_SOURCE	1
			#define _ISOC99_SOURCE	1
			#define	__USE_ISOC99	1
			#define __USE_ISOC9X	1
			#include <math.h>
			int main (void)
			{	double	fval ;
				int k, ival ;

				fval = -8.0 * 0x10000000 ;
				for (k = 0 ; k < 100 ; k++)
				{	ival = (lrint (fval)) >> 24 ;
					if (ival != -128)
						return 1 ;
				
					fval *= 1.2499999 ;
					} ;
				
					return 0 ;
				}
			"
			CPU_CLIPS_NEGATIVE)

			cmake_pop_check_state ()

			if (CPU_CLIPS_POSITIVE AND (NOT CPU_CLIPS_NEGATIVE))
				set (CLIP_MSG "positive")
			elseif (CPU_CLIPS_NEGATIVE AND (NOT CPU_CLIPS_POSITIVE))
				set (CLIP_MSG "negative")
			elseif (CPU_CLIPS_POSITIVE AND CPU_CLIPS_NEGATIVE)
				set (CLIP_MSG "both")
			else ()
				set (CLIP_MSG "none")
			endif ()

		endif (CMAKE_CROSSCOMPILING)

		message (STATUS "Checking processor clipping capabilities... ${CLIP_MSG}")
	endif ()
endmacro (CLIP_MODE)