Import cmaked
[apps/madmutt.git] / cmake / Modules / CMakeTestDCompiler.cmake
1 #\r
2 # CMakeD - CMake module for D Language\r
3 #\r
4 # Copyright (c) 2007, Selman Ulug <selman.ulug@gmail.com>\r
5 #                     Tim Burrell <tim.burrell@gmail.com>\r
6 #\r
7 # All rights reserved.\r
8 #\r
9 # See Copyright.txt for details.\r
10 #\r
11 # Modified from CMake 2.6.5 CMakeTestCCompiler.cmake\r
12 # See http://www.cmake.org/HTML/Copyright.html for details\r
13 #\r
14 \r
15 # This file is used by EnableLanguage in cmGlobalGenerator to\r
16 # determine that that selected D compiler can actually compile\r
17 # and link the most basic of programs.   If not, a fatal error\r
18 # is set and cmake stops processing commands and will not generate\r
19 # any makefiles or projects.\r
20 \r
21 IF(NOT CMAKE_D_COMPILER_WORKS)\r
22   MESSAGE(STATUS "Check for working D compiler: ${CMAKE_D_COMPILER}")\r
23   FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
24     "int main(char[][] args)\n"\r
25     "{return args.sizeof-1;}\n")\r
26   STRING(REGEX MATCH "dmd" DMDTEST "${CMAKE_D_COMPILER}")\r
27   IF(DMDTEST STREQUAL "dmd")\r
28       IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
29           TRY_COMPILE(CMAKE_D_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
30              OUTPUT_VARIABLE OUTPUT) \r
31       ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
32           TRY_COMPILE(CMAKE_D_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
33              CMAKE_FLAGS "-DLINK_LIBRARIES=${D_PATH}/lib/libphobos.a"\r
34              OUTPUT_VARIABLE OUTPUT) \r
35       ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
36   ELSE(DMDTEST STREQUAL "dmd")\r
37           TRY_COMPILE(CMAKE_D_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
38              OUTPUT_VARIABLE OUTPUT) \r
39   ENDIF(DMDTEST STREQUAL "dmd")\r
40   SET(C_TEST_WAS_RUN 1)\r
41 ENDIF(NOT CMAKE_D_COMPILER_WORKS)\r
42 \r
43 IF(NOT CMAKE_D_COMPILER_WORKS)\r
44   MESSAGE(STATUS "Check for working D compiler: ${CMAKE_D_COMPILER} -- broken")\r
45   message(STATUS "To force a specific D compiler set the DC environment variable")\r
46   message(STATUS "    ie - export DC=\"/opt/dmd/bin/dmd\"")\r
47   message(STATUS "If the D path is not set please use the D_PATH variable")\r
48   message(STATUS "    ie - export D_PATH=\"/opt/dmd\"")\r
49   FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log\r
50     "Determining if the D compiler works failed with "\r
51     "the following output:\n${OUTPUT}\n\n")\r
52   MESSAGE(FATAL_ERROR "The D compiler \"${CMAKE_D_COMPILER}\" "\r
53     "is not able to compile a simple test program.\nIt fails "\r
54     "with the following output:\n ${OUTPUT}\n\n"\r
55     "CMake will not be able to correctly generate this project.")\r
56 ELSE(NOT CMAKE_D_COMPILER_WORKS)\r
57   IF(C_TEST_WAS_RUN)\r
58     MESSAGE(STATUS "Check for working D compiler: ${CMAKE_D_COMPILER} -- works")\r
59     FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log\r
60       "Determining if the D compiler works passed with "\r
61       "the following output:\n${OUTPUT}\n\n") \r
62   ENDIF(C_TEST_WAS_RUN)\r
63   SET(CMAKE_D_COMPILER_WORKS 1 CACHE INTERNAL "")\r
64   # re-configure this file CMakeDCompiler.cmake so that it gets\r
65   # the value for CMAKE_SIZEOF_VOID_P\r
66   # configure variables set in this file for fast reload later on\r
67   IF(EXISTS ${CMAKE_SOURCE_DIR}/cmake/Modules/CMakeDCompiler.cmake.in)\r
68         CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/Modules/CMakeDCompiler.cmake.in \r
69           ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeDCompiler.cmake IMMEDIATE)\r
70   ELSE(EXISTS ${CMAKE_SOURCE_DIR}/cmake/Modules/CMakeDCompiler.cmake.in)\r
71         CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeDCompiler.cmake.in \r
72           ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeDCompiler.cmake IMMEDIATE)\r
73   ENDIF(EXISTS ${CMAKE_SOURCE_DIR}/cmake/Modules/CMakeDCompiler.cmake.in)\r
74 ENDIF(NOT CMAKE_D_COMPILER_WORKS)\r
75 \r
76 IF(NOT CMAKE_D_PHOBOS_WORKS)\r
77   MESSAGE(STATUS "Check for working Phobos")\r
78   FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
79     "import std.stdio;\n"\r
80     "int main(char[][] args)\n"\r
81     "{ writefln(\"%s\", args[0]); return args.sizeof-1;}\n")\r
82   IF(CMAKE_COMPILER_IS_GDC)\r
83       IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
84                 TRY_COMPILE(CMAKE_D_PHOBOS_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
85                      #CMAKE_FLAGS "-DLINK_LIBRARIES=gphobos"\r
86                      OUTPUT_VARIABLE OUTPUT) \r
87       ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
88                 TRY_COMPILE(CMAKE_D_PHOBOS_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
89                      CMAKE_FLAGS "-DLINK_LIBRARIES=gphobos"\r
90                      OUTPUT_VARIABLE OUTPUT) \r
91       ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
92   ELSE(CMAKE_COMPILER_IS_GDC)\r
93       IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
94                 TRY_COMPILE(CMAKE_D_PHOBOS_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
95                      OUTPUT_VARIABLE OUTPUT) \r
96       ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
97                 TRY_COMPILE(CMAKE_D_PHOBOS_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
98                      CMAKE_FLAGS "-DLINK_LIBRARIES=${D_PATH}/lib/libphobos.a"\r
99                      COMPILE_DEFINITIONS "-I${D_PATH}/include -I${D_PATH}/import"\r
100                      OUTPUT_VARIABLE OUTPUT) \r
101       ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
102   ENDIF(CMAKE_COMPILER_IS_GDC)\r
103   SET(C_TEST_WAS_RUN 1)\r
104 ENDIF(NOT CMAKE_D_PHOBOS_WORKS)\r
105 \r
106 IF(NOT CMAKE_D_PHOBOS_WORKS)\r
107   MESSAGE(STATUS "Check for working Phobos -- unavailable")\r
108   FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log\r
109     "Determining if Phobos works failed with "\r
110     "the following output:\n${OUTPUT}\n\n")\r
111   #MESSAGE(FATAL_ERROR "Phobos does not work")\r
112 ELSE(NOT CMAKE_D_PHOBOS_WORKS)\r
113   IF(C_TEST_WAS_RUN)\r
114     MESSAGE(STATUS "Check for working Phobos -- works")\r
115     FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log\r
116       "Determining if Phobos works passed with "\r
117       "the following output:\n${OUTPUT}\n\n") \r
118   ENDIF(C_TEST_WAS_RUN)\r
119   SET(CMAKE_D_PHOBOS_WORKS 1 CACHE INTERNAL "")\r
120 ENDIF(NOT CMAKE_D_PHOBOS_WORKS)\r
121 \r
122 IF(NOT CMAKE_D_TANGO_WORKS)\r
123   MESSAGE(STATUS "Check for working Tango")\r
124   FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
125     "import tango.io.Stdout;"\r
126     "int main(char[][] args)\n"\r
127     "{Stdout.newline();return args.sizeof-1;}\n")\r
128   IF(CMAKE_COMPILER_IS_GDC)\r
129           TRY_COMPILE(CMAKE_D_TANGO_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
130              CMAKE_FLAGS "-DLINK_LIBRARIES=gtango"\r
131              OUTPUT_VARIABLE OUTPUT) \r
132   ELSE(CMAKE_COMPILER_IS_GDC)\r
133       IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
134           TRY_COMPILE(CMAKE_D_TANGO_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
135              OUTPUT_VARIABLE OUTPUT) \r
136       ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
137           TRY_COMPILE(CMAKE_D_TANGO_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
138              CMAKE_FLAGS "-DLINK_LIBRARIES=${D_PATH}/lib/libtango.a;${D_PATH}/lib/libphobos.a"\r
139              COMPILE_DEFINITIONS "-I${D_PATH}/include -I${D_PATH}/import"\r
140              OUTPUT_VARIABLE OUTPUT) \r
141       ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
142   ENDIF(CMAKE_COMPILER_IS_GDC)\r
143   SET(C_TEST_WAS_RUN 1)\r
144 ENDIF(NOT CMAKE_D_TANGO_WORKS)\r
145 \r
146 IF(NOT CMAKE_D_TANGO_WORKS)\r
147   MESSAGE(STATUS "Check for working Tango -- unavailable")\r
148   FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log\r
149     "Determining if Tango works failed with "\r
150     "the following output:\n${OUTPUT}\n\n")\r
151   #MESSAGE(FATAL_ERROR "Tango does not work: \n${OUTPUT}\n\n")\r
152 ELSE(NOT CMAKE_D_TANGO_WORKS)\r
153   IF(C_TEST_WAS_RUN)\r
154     MESSAGE(STATUS "Check for working Tango -- works")\r
155     FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log\r
156       "Determining if Tango works passed with "\r
157       "the following output:\n${OUTPUT}\n\n") \r
158   ENDIF(C_TEST_WAS_RUN)\r
159   SET(CMAKE_D_TANGO_WORKS 1 CACHE INTERNAL "")\r
160 ENDIF(NOT CMAKE_D_TANGO_WORKS)\r
161
162 # if both tango and phobos are selected try to choose which one is available
163 IF(CMAKE_D_USE_TANGO AND CMAKE_D_USE_PHOBOS)
164         MESSAGE(FATAL_ERROR "Tango AND Phobos selected, please choose one or the other!")
165 ENDIF(CMAKE_D_USE_TANGO AND CMAKE_D_USE_PHOBOS)
166
167 # ensure the user has the appropriate std lib available
168 IF(CMAKE_D_USE_TANGO AND NOT CMAKE_D_TANGO_WORKS)
169         MESSAGE(FATAL_ERROR "Tango is required for this project, but it is not available!")
170 ENDIF(CMAKE_D_USE_TANGO AND NOT CMAKE_D_TANGO_WORKS)
171
172 IF(CMAKE_D_USE_PHOBOS AND NOT CMAKE_D_PHOBOS_WORKS)
173         MESSAGE(FATAL_ERROR "Phobos is required for this project, but it is not available!")
174 ENDIF(CMAKE_D_USE_PHOBOS AND NOT CMAKE_D_PHOBOS_WORKS)
175