1
2# Override...
3SET(CMAKE_C_FLAGS $ENV{CFLAGS})
4SET(CMAKE_CXX_FLAGS $ENV{CXXFLAGS})
5SET(CMAKE_LD_FLAGS $ENV{LDFLAGS})
6
7IF(${CMAKE_CXX_COMPILER} MATCHES ".*[cC]lang.*")
8    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__STRICT_ANSI__ -Qunused-arguments  ")
9    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STRICT_ANSI__ -Qunused-arguments  ")
10ENDIF(${CMAKE_CXX_COMPILER} MATCHES ".*[cC]lang.*")
11
12IF (NOT CMAKE_CXX_COMPILER_WORKS MATCHES "^${CMAKE_CXX_COMPILER_WORKS}$")
13	SET(FRESH_BUILD 1)
14ENDIF (NOT CMAKE_CXX_COMPILER_WORKS MATCHES "^${CMAKE_CXX_COMPILER_WORKS}$")
15#
16#
17include(admCrossCompile)
18MESSAGE(STATUS "[BUILD] EXTRA Cflags:${CMAKE_C_FLAGS}")
19MESSAGE(STATUS "[BUILD] EXTRA CXXflags:${CMAKE_CXX_FLAGS}")
20MESSAGE(STATUS "[BUILD] EXTRA LDflags:${CMAKE_LD_FLAGS}")
21MESSAGE(STATUS "[BUILD] Compiler ${CMAKE_CXX_COMPILER}")
22MESSAGE(STATUS "[BUILD] Linker   ${CMAKE_LINKER}")
23#
24MESSAGE(STATUS "Top Source dir is ${AVIDEMUX_TOP_SOURCE_DIR}")
25MESSAGE("")
26
27PROJECT(${ADM_PROJECT})
28
29IF (${Avidemux_SOURCE_DIR} MATCHES ${Avidemux_BINARY_DIR})
30	MESSAGE("Please do an out-of-tree build:")
31	MESSAGE("rm CMakeCache.txt; mkdir build; cd build; cmake ..; make")
32	MESSAGE(FATAL_ERROR "in-tree-build detected")
33ENDIF (${Avidemux_SOURCE_DIR} MATCHES ${Avidemux_BINARY_DIR})
34
35if (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
36	include(GenerateExportHeader)
37else (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
38	include(_GenerateExportHeader)
39endif (${CMAKE_VERSION} VERSION_GREATER 2.8.5)
40
41IF(WIN32)
42	IF(NOT CROSS)
43		# Add the rootfs
44                IF(NOT VS_ROOT)
45		        SET(VS_ROOT "f:/mingw")
46                ENDIF(NOT VS_ROOT)
47                MESSAGE(STATUS "VS:using ${VS_ROOT} to import libs and headers")
48                INCLUDE_DIRECTORIES(${VS_ROOT}/include)
49                LINK_DIRECTORIES(${VS_ROOT}/lib)
50                LINK_DIRECTORIES(${VS_ROOT}/bin)
51                # Add prefix and suffix so that libraries xxx.dll.a can be found
52                SET(CMAKE_FIND_LIBRARY_PREFIXES lib )
53                SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll.a .a )
54	ENDIF(NOT CROSS)
55ENDIF(WIN32)
56
57
58
59INCLUDE(admConfigHelper)
60include(admGetRevision)
61
62IF (FRESH_BUILD)
63	MESSAGE("")
64ENDIF (FRESH_BUILD)
65
66########################################
67# Global options
68########################################
69OPTION(VERBOSE "" OFF)
70
71IF (NOT CMAKE_BUILD_TYPE)
72	SET(CMAKE_BUILD_TYPE "Release")
73ENDIF (NOT CMAKE_BUILD_TYPE)
74
75########################################
76# Avidemux system specific tweaks
77########################################
78INCLUDE(admDetermineSystem)
79
80# Address sanitizer only works with llvm/clang
81IF(${CMAKE_CXX_COMPILER} MATCHES ".*[cC]lang.*")
82        IF (ASAN)
83                MESSAGE(STATUS "Address Sanitizer activated")
84	        SET(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
85	        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
86                SET(CMAKE_LD_FLAGS  "${CMAKE_LD_FLAGS}  -fsanitize=address ")
87        ELSE (ASAN)
88                MESSAGE(STATUS "Address Sanitizer not activated")
89	        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ")
90        ENDIF (ASAN)
91ENDIF(${CMAKE_CXX_COMPILER} MATCHES ".*[cC]lang.*")
92
93IF (ADM_CPU_ALTIVEC)
94	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ADM_ALTIVEC_FLAGS}")
95	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ADM_ALTIVEC_FLAGS}")
96ENDIF (ADM_CPU_ALTIVEC)
97
98IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
99	# jog shuttle is only available on Linux due to its interface
100	SET(USE_JOG 1)
101ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux")
102
103IF (WIN32)
104	SET(BIN_DIR .)
105
106	IF (MINGW)
107		SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-enable-auto-image-base -Wl,-enable-auto-import")
108		SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-enable-auto-import")
109
110		IF (CMAKE_BUILD_TYPE STREQUAL "Release")
111			SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-s")
112			SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-s")
113		ENDIF (CMAKE_BUILD_TYPE STREQUAL "Release")
114	ENDIF (MINGW)
115ELSE (WIN32)
116	SET(BIN_DIR bin)
117ENDIF (WIN32)
118
119if (CMAKE_COMPILER_IS_GNUCC)
120	add_definitions("-Wattributes")
121endif (CMAKE_COMPILER_IS_GNUCC)
122# MacOsX stuff
123IF(APPLE)
124	set (CMAKE_OSX_ARCHITECTURES "x86_64")
125        SET(CMAKE_INSTALL_NAME_DIR @executable_path/../lib) # Make sure we are relative to bundle
126ENDIF(APPLE)
127
128########################################
129# Standard Avidemux defines
130########################################
131# Define internal flags for GTK+ and Qt4 builds.  These are turned off
132# if a showstopper is found.  CLI is automatically assumed as possible
133# since it uses the minimum set of required libraries and CMake will
134# fail if these aren't met.
135
136SET(AVIDEMUX_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}")
137MARK_AS_ADVANCED(AVIDEMUX_INSTALL_DIR)
138include(admInstallDir)
139
140IF (CMAKE_BUILD_TYPE STREQUAL "Debug")
141	SET(ADM_DEBUG 1)
142ENDIF (CMAKE_BUILD_TYPE STREQUAL "Debug")
143########################################
144# Subversion
145########################################
146
147MESSAGE("")
148MESSAGE(STATUS "Checking for SCM")
149MESSAGE(STATUS "****************")
150IF(RELEASE OR AVIDEMUX_EXTERNAL_BUILD)
151        SET( ADM_SUBVERSION 0)
152ELSE()
153        admGetRevision( ${CMAKE_SOURCE_DIR} ADM_SUBVERSION)
154ENDIF()
155MESSAGE("")
156include(avidemuxVersion)
157
158
159########################################
160# Check for libraries
161########################################
162SET(MSG_DISABLE_OPTION "Disabled per request")
163INCLUDE(admCheckRequiredLibs)
164IF(NOT PLUGINS)
165INCLUDE(admCheckMiscLibs)
166INCLUDE(FindThreads)
167
168    if (NOT APPLE)
169        INCLUDE(admCheckNvEnc)
170        checkNvEnc()
171    endif (NOT APPLE)
172#INCLUDE(admCheckXvba)
173#checkXvba()
174ENDIF(NOT PLUGINS)
175
176########################################
177# Check functions and includes
178########################################
179IF (NOT SYSTEM_HEADERS_CHECKED)
180	MESSAGE(STATUS "Checking system headers")
181	MESSAGE(STATUS "***********************")
182
183	INCLUDE(CheckIncludeFiles)
184	INCLUDE(CheckFunctionExists)
185
186	if (MSVC)
187		include_directories("${AVIDEMUX_TOP_SOURCE_DIR}/foreignBuilds/msvc/include")
188		set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${AVIDEMUX_TOP_SOURCE_DIR}/foreignBuilds/msvc/include")
189	endif (MSVC)
190
191	set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${CMAKE_INCLUDE_PATH})
192	CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
193
194	CHECK_INCLUDE_FILES(inttypes.h   HAVE_INTTYPES_H)	# internal use, mpeg2enc, mplex
195	CHECK_INCLUDE_FILES(stdint.h     HAVE_STDINT_H)		# internal use, mpeg2enc, mplex
196	SET(SYSTEM_HEADERS_CHECKED 1 CACHE BOOL "")
197	MARK_AS_ADVANCED(SYSTEM_HEADERS_CHECKED)
198
199	MESSAGE("")
200ENDIF (NOT SYSTEM_HEADERS_CHECKED)
201
202# Check we have yasm, mandatory for x86/amd64
203MESSAGE(STATUS "Bonanza")
204include(admYasm)
205
206
207