-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
207 lines (169 loc) · 7.04 KB
/
CMakeLists.txt
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# Flake CMake project file
# This project file and the included custom modules are based on the Aften
# CMake files written by Prakash Punnoor
CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
IF(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
ENDIF(COMMAND cmake_policy)
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules")
Project(Flake C)
SET(SO_MAJOR_VERSION "0")
SET(SO_MINOR_VERSION "11")
SET(SO_BUILD_VERSION "5")
SET(SO_VERSION "${SO_MAJOR_VERSION}.${SO_MINOR_VERSION}.${SO_BUILD_VERSION}")
IF(${Flake_SOURCE_DIR} MATCHES ${Flake_BINARY_DIR})
MESSAGE("Please do an out-of-tree build:")
MESSAGE("rm -f CMakeCache.txt; mkdir -p default; cd default; cmake ..; make")
MESSAGE(FATAL_ERROR "in-tree-build detected")
ENDIF(${Flake_SOURCE_DIR} MATCHES ${Flake_BINARY_DIR})
INCLUDE(${CMAKE_ROOT}/Modules/TestBigEndian.cmake)
INCLUDE(${CMAKE_ROOT}/Modules/CheckCSourceCompiles.cmake)
INCLUDE(${CMAKE_MODULE_PATH}/ConfigHelper.cmake)
INCLUDE(${CMAKE_MODULE_PATH}/HeaderTests.cmake)
INCLUDE(${CMAKE_MODULE_PATH}/FlagsTests.cmake)
INCLUDE(${CMAKE_MODULE_PATH}/CompilerVisibility.cmake)
INCLUDE(${CMAKE_MODULE_PATH}/DetectCompiler.cmake)
INCLUDE(${CMAKE_MODULE_PATH}/Libsndfile.cmake)
OPTION(SHARED "build shared Flake library" OFF)
OPTION(USE_LIBSNDFILE "use libsndfile library for audio input" OFF)
INCLUDE_DIRECTORIES(${Flake_BINARY_DIR}/)
INCLUDE_DIRECTORIES(${Flake_SOURCE_DIR}/)
INCLUDE_DIRECTORIES(${Flake_SOURCE_DIR}/libflake)
INCLUDE_DIRECTORIES(${Flake_SOURCE_DIR}/flake)
INCLUDE_DIRECTORIES(${Flake_SOURCE_DIR}/libpcm_io)
SET(LIBFLAKE_SRCS libflake/crc.c
libflake/encode.c
libflake/lpc.c
libflake/md5.c
libflake/metadata.c
libflake/optimize.c
libflake/rice.c
libflake/vbs.c)
SET(FLAKE_SRCS flake/flake.c)
SET(LIBPCM_IO_SRCS libpcm_io/aiff.c
libpcm_io/byteio.c
libpcm_io/convert.c
libpcm_io/formats.c
libpcm_io/pcm_io.c
libpcm_io/raw.c
libpcm_io/wav.c)
IF(CMAKE_UNAME)
EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_MACHINE)
ELSE(CMAKE_UNAME)
MESSAGE("Could not detect machine type")
IF(CMAKE_SYSTEM MATCHES "Windows")
MESSAGE(STATUS "Assuming i386 machine")
SET(CMAKE_SYSTEM_MACHINE i386)
ENDIF(CMAKE_SYSTEM MATCHES "Windows")
ENDIF(CMAKE_UNAME)
DETECT_COMPILER()
IF(CMAKE_COMPILER_IS_GNUCC)
SET(CMAKE_C_FLAGS_RELEASE "-funroll-loops -fomit-frame-pointer ${CMAKE_C_FLAGS_RELEASE}")
SET(ADD_CFLAGS "-pedantic -Wall -Wpointer-arith -Wredundant-decls -Wformat -Wunused ${ADD_CFLAGS}")
# gcc 2.9.5 doesn't know following
CHECK_CFLAGS_APPEND(ADD_EXCLUSIVE_CFLAGS "-std=c99")
CHECK_CFLAGS_APPEND(ADD_CFLAGS "-Wdisabled-optimization")
CHECK_CFLAGS_APPEND(ADD_CFLAGS "-Wfloat-equal")
CHECK_CFLAGS_APPEND(ADD_EXCLUSIVE_CFLAGS "-Wbad-function-cast")
# gcc 3.0 doesn't know following
CHECK_CFLAGS_APPEND(ADD_EXCLUSIVE_CFLAGS "-Wdeclaration-after-statement")
CHECK_CFLAGS_APPEND(ADD_CFLAGS "-Wextra")
CHECK_CFLAGS_APPEND(ADD_CFLAGS "-Wno-switch")
# gcc 4.1 doesn't know following
CHECK_CFLAGS_APPEND(ADD_CFLAGS "-Wstrict-overflow")
ENDIF(CMAKE_COMPILER_IS_GNUCC)
IF(CMAKE_COMPILER_IS_ICC)
# icc ignores bogus options, so detection makes no sense
SET(CMAKE_C_FLAGS_RELEASE "-O3 -funroll-loops -fomit-frame-pointer ${CMAKE_C_FLAGS_RELEASE}")
SET(ADD_CFLAGS "-std=c99 -Wall ${ADD_CFLAGS}")
ENDIF(CMAKE_COMPILER_IS_ICC)
IF(MSVC)
# msvc ignores bogus options, so detection makes no sense
SET(CMAKE_C_FLAGS_RELEASE "/Ot /Oy /Oi /Ox ${CMAKE_C_FLAGS_RELEASE}")
ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
ENDIF(MSVC)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "Release")
ENDIF(NOT CMAKE_BUILD_TYPE)
TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN)
IF(CMAKE_WORDS_BIGENDIAN)
ADD_DEFINE(WORDS_BIGENDIAN)
ENDIF(CMAKE_WORDS_BIGENDIAN)
IF(UNIX)
SET(LIBM "m")
TEST_COMPILER_VISIBILITY()
IF(APPLE)
ADD_DEFINE(SYS_DARWIN)
ENDIF(APPLE)
ENDIF(UNIX)
ADD_DEFINITIONS(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
# fail if inttypes.h is not found
CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
IF(NOT HAVE_INTTYPES_H)
MESSAGE("Flake requires inttypes.h and stdlib.h")
MESSAGE("If you are using MS Visual Studio, try using the headers from")
MESSAGE("http://code.google.com/p/msinttypes/")
MESSAGE(FATAL_ERROR "inttypes.h not found")
ENDIF(NOT HAVE_INTTYPES_H)
CHECK_INCLUDE_FILE_DEFINE(byteswap.h HAVE_BYTESWAP_H)
CHECK_FUNCTION_DEFINE("#include <string.h>" "strnlen" "(\"help\", 6)" HAVE_STRNLEN)
# check for libsndfile
IF(USE_LIBSNDFILE)
CHECK_LIBSNDFILE_DEFINE(HAVE_LIBSNDFILE)
IF(NOT HAVE_LIBSNDFILE)
MESSAGE(STATUS "libsndfile not found. using libpcm_io instead.")
SET(USE_LIBSNDFILE FALSE)
ENDIF(NOT HAVE_LIBSNDFILE)
ENDIF(USE_LIBSNDFILE)
# output SVN version to config.h
EXECUTE_PROCESS(COMMAND svn info --xml WORKING_DIRECTORY ${Flake_SOURCE_DIR}
OUTPUT_VARIABLE SVN_INFO ERROR_QUIET)
STRING(REGEX MATCH "<entry[^>]+" SVN_VERSION "${SVN_INFO}")
STRING(REGEX MATCH "revision=\"[0123456789]+\"" SVN_VERSION "${SVN_VERSION}")
STRING(REGEX MATCH "[0123456789]+" SVN_VERSION "${SVN_VERSION}")
IF(SVN_VERSION)
ADD_DEFINE("SVN_VERSION \"${SVN_VERSION}\"")
ENDIF(SVN_VERSION)
GENERATE_CONFIG_H()
SET(CMAKE_C_FLAGS "${ADD_CFLAGS} ${ADD_EXCLUSIVE_CFLAGS} ${CMAKE_C_FLAGS}")
IF(SHARED)
ADD_LIBRARY(flake SHARED ${LIBFLAKE_SRCS})
SET_TARGET_PROPERTIES(flake PROPERTIES VERSION ${SO_VERSION} SOVERSION ${SO_MAJOR_VERSION})
SET_TARGET_PROPERTIES(flake PROPERTIES LINKER_LANGUAGE C)
SET_TARGET_PROPERTIES(flake PROPERTIES DEFINE_SYMBOL FLAKE_BUILD_LIBRARY)
TARGET_LINK_LIBRARIES(flake ${LIBM} ${ADD_LIBS})
SET(INSTALL_TARGETS ${INSTALL_TARGETS} flake)
ENDIF(SHARED)
ADD_LIBRARY(flake_static STATIC ${LIBFLAKE_SRCS})
SET_TARGET_PROPERTIES(flake_static PROPERTIES LINKER_LANGUAGE C)
SET_TARGET_PROPERTIES(flake_static PROPERTIES COMPILE_FLAGS -DFLAKE_BUILD_LIBRARY)
TARGET_LINK_LIBRARIES(flake_static ${LIBM} ${ADD_LIBS})
# building a separate static lib for the pcm audio decoder
IF(NOT USE_LIBSNDFILE)
ADD_LIBRARY(pcm_io STATIC ${LIBPCM_IO_SRCS})
ENDIF(NOT USE_LIBSNDFILE)
ADD_EXECUTABLE(flake_exe ${FLAKE_SRCS})
SET_TARGET_PROPERTIES(flake_exe PROPERTIES OUTPUT_NAME flake)
SET_TARGET_PROPERTIES(flake_exe PROPERTIES LINKER_LANGUAGE C)
IF(WIN32)
# When linking to static lib, dllimport mustn't be used
SET_TARGET_PROPERTIES(flake_exe PROPERTIES COMPILE_FLAGS -DFLAKE_BUILD_LIBRARY)
ENDIF(WIN32)
IF(USE_LIBSNDFILE)
TARGET_LINK_LIBRARIES(flake_exe flake_static)
ELSE(USE_LIBSNDFILE)
TARGET_LINK_LIBRARIES(flake_exe pcm_io flake_static)
ENDIF(USE_LIBSNDFILE)
IF(NOT USE_LIBSNDFILE)
ADD_EXECUTABLE(wavinfo util/wavinfo.c)
TARGET_LINK_LIBRARIES(wavinfo pcm_io)
ENDIF(NOT USE_LIBSNDFILE)
SET(INSTALL_TARGETS ${INSTALL_TARGETS} flake_exe)
IF(NOT USE_LIBSNDFILE)
SET(INSTALL_TARGETS ${INSTALL_TARGETS} wavinfo)
ENDIF(NOT USE_LIBSNDFILE)
INSTALL(TARGETS ${INSTALL_TARGETS}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
INSTALL(FILES ${INSTALL_HEADERS} libflake/flake.h DESTINATION include/flake)