Import cmaked
[apps/madmutt.git] / cmake / Modules / CMakeDInformation.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 CMakeCInformation.cmake\r
12 # See http://www.cmake.org/HTML/Copyright.html for details\r
13 #\r
14 \r
15 # This file sets the basic flags for the D language in CMake.\r
16 # It also loads the available platform file for the system-compiler\r
17 # if it exists.\r
18 \r
19 GET_FILENAME_COMPONENT(CMAKE_BASE_NAME ${CMAKE_D_COMPILER} NAME_WE)\r
20 IF(CMAKE_COMPILER_IS_GDC)\r
21   SET(CMAKE_BASE_NAME gdc)\r
22 ELSE(CMAKE_COMPILER_IS_GDC)\r
23   SET(CMAKE_BASE_NAME dmd)\r
24 ENDIF(CMAKE_COMPILER_IS_GDC)\r
25 SET(CMAKE_SYSTEM_AND_D_COMPILER_INFO_FILE \r
26   ${CMAKE_ROOT}/Modules/Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME}.cmake)\r
27 INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL)\r
28 \r
29 # This should be included before the _INIT variables are\r
30 # used to initialize the cache.  Since the rule variables \r
31 # have if blocks on them, users can still define them here.\r
32 # But, it should still be after the platform file so changes can\r
33 # be made to those values.\r
34 \r
35 IF(CMAKE_USER_MAKE_RULES_OVERRIDE)\r
36    INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE})\r
37 ENDIF(CMAKE_USER_MAKE_RULES_OVERRIDE)\r
38 \r
39 IF(CMAKE_USER_MAKE_RULES_OVERRIDE_D)\r
40    INCLUDE(${CMAKE_USER_MAKE_RULES_OVERRIDE_D})\r
41 ENDIF(CMAKE_USER_MAKE_RULES_OVERRIDE_D)\r
42 \r
43 # for most systems a module is the same as a shared library\r
44 # so unless the variable CMAKE_MODULE_EXISTS is set just\r
45 # copy the values from the LIBRARY variables\r
46 IF(NOT CMAKE_MODULE_EXISTS)\r
47   SET(CMAKE_SHARED_MODULE_D_FLAGS ${CMAKE_SHARED_LIBRARY_D_FLAGS})\r
48   SET(CMAKE_SHARED_MODULE_CREATE_D_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_D_FLAGS})\r
49 ENDIF(NOT CMAKE_MODULE_EXISTS)\r
50 \r
51 SET (CMAKE_D_FLAGS "$ENV{CFLAGS} ${CMAKE_D_FLAGS_INIT}" CACHE STRING\r
52      "Flags for D compiler.")\r
53 \r
54 IF(NOT CMAKE_NOT_USING_CONFIG_FLAGS)\r
55 # default build type is none\r
56   IF(NOT CMAKE_NO_BUILD_TYPE)\r
57     SET (CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_INIT} CACHE STRING \r
58       "Choose the type of build, options are: None(CMAKE_D_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.")\r
59   ENDIF(NOT CMAKE_NO_BUILD_TYPE)\r
60   SET (CMAKE_D_FLAGS_DEBUG "${CMAKE_D_FLAGS_DEBUG_INIT}" CACHE STRING\r
61     "Flags used by the compiler during debug builds.")\r
62   SET (CMAKE_D_FLAGS_MINSIZEREL "${CMAKE_D_FLAGS_MINSIZEREL_INIT}" CACHE STRING\r
63     "Flags used by the compiler during release minsize builds.")\r
64   SET (CMAKE_D_FLAGS_RELEASE "${CMAKE_D_FLAGS_RELEASE_INIT}" CACHE STRING\r
65     "Flags used by the compiler during release builds (/MD /Ob1 /Oi /Ot /Oy /Gs will produce slightly less optimized but smaller files).")\r
66   SET (CMAKE_D_FLAGS_RELWITHDEBINFO "${CMAKE_D_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING\r
67     "Flags used by the compiler during Release with Debug Info builds.")\r
68 ENDIF(NOT CMAKE_NOT_USING_CONFIG_FLAGS)\r
69 \r
70 IF(CMAKE_D_STANDARD_LIBRARIES_INIT)\r
71   SET(CMAKE_D_STANDARD_LIBRARIES "${CMAKE_D_STANDARD_LIBRARIES_INIT}"\r
72     CACHE STRING "Libraries linked by defalut with all D applications.")\r
73   MARK_AS_ADVANCED(CMAKE_D_STANDARD_LIBRARIES)\r
74 ENDIF(CMAKE_D_STANDARD_LIBRARIES_INIT)\r
75 \r
76 INCLUDE(CMakeCommonLanguageInclude)\r
77 \r
78 # now define the following rule variables\r
79 \r
80 # CMAKE_D_CREATE_SHARED_LIBRARY\r
81 # CMAKE_D_CREATE_SHARED_MODULE\r
82 # CMAKE_D_CREATE_STATIC_LIBRARY\r
83 # CMAKE_D_COMPILE_OBJECT\r
84 # CMAKE_D_LINK_EXECUTABLE\r
85 \r
86 # variables supplied by the generator at use time\r
87 # <TARGET>\r
88 # <TARGET_BASE> the target without the suffix\r
89 # <OBJECTS>\r
90 # <OBJECT>\r
91 # <LINK_LIBRARIES>\r
92 # <FLAGS>\r
93 # <LINK_FLAGS>\r
94 \r
95 # D compiler information\r
96 # <CMAKE_D_COMPILER>  \r
97 # <CMAKE_SHARED_LIBRARY_CREATE_D_FLAGS>\r
98 # <CMAKE_SHARED_MODULE_CREATE_D_FLAGS>\r
99 # <CMAKE_D_LINK_FLAGS>\r
100 \r
101 # Static library tools\r
102 # <CMAKE_AR> \r
103 # <CMAKE_RANLIB>\r
104 \r
105 IF("$ENV{D_PATH}" STREQUAL "")\r
106         STRING(LENGTH ${CMAKE_D_COMPILER} CMAKE_D_COMPILER_LENGTH)\r
107         IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
108                 MATH(EXPR CMAKE_D_COMPILER_LENGTH "${CMAKE_D_COMPILER_LENGTH} - 12")\r
109         ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
110                 MATH(EXPR CMAKE_D_COMPILER_LENGTH "${CMAKE_D_COMPILER_LENGTH} - 8")\r
111         ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
112         STRING(SUBSTRING ${CMAKE_D_COMPILER} 0 ${CMAKE_D_COMPILER_LENGTH} D_PATH)\r
113 ELSE("$ENV{D_PATH}" STREQUAL "")\r
114         SET(D_PATH "$ENV{D_PATH}")\r
115 ENDIF("$ENV{D_PATH}" STREQUAL "")\r
116 MESSAGE(STATUS "D Compiler Install Prefix (use D_PATH env var to override): ${D_PATH}")\r
117 \r
118 IF(CMAKE_COMPILER_IS_GDC)\r
119   SET(CMAKE_OUTPUT_D_FLAG "-o ")\r
120   SET(CMAKE_SHARED_LIBRARY_D_FLAGS "-fPIC")\r
121   SET(CMAKE_SHARED_LIBRARY_CREATE_D_FLAGS "-shared")\r
122   SET(CMAKE_INCLUDE_FLAG_D "-I")       # -I\r
123   SET(CMAKE_INCLUDE_FLAG_D_SEP "")     # , or empty\r
124   SET(CMAKE_LIBRARY_PATH_FLAG "-L")\r
125   SET(CMAKE_LINK_LIBRARY_FLAG "-l")\r
126   SET(CMAKE_D_VERSION_FLAG "-fversion=")\r
127 ELSE(CMAKE_COMPILER_IS_GDC)\r
128   SET(CMAKE_OUTPUT_D_FLAG "-of")\r
129   SET(CMAKE_D_VERSION_FLAG "-version=")\r
130   IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
131     SET(CMAKE_INCLUDE_FLAG_D "-I")       # -I\r
132     SET(CMAKE_INCLUDE_FLAG_D_SEP "")     # , or empty\r
133     SET(CMAKE_LINK_LIBRARY_FLAG "-L+")\r
134     SET(CMAKE_LIBRARY_PATH_FLAG "-L+")\r
135     SET(CMAKE_LIBRARY_PATH_TERMINATOR "\\")\r
136     FIND_PROGRAM(DMD_LIBRARIAN "lib.exe")\r
137   ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
138     SET(CMAKE_SHARED_LIBRARY_D_FLAGS "-fPIC")\r
139     SET(CMAKE_SHARED_LIBRARY_CREATE_D_FLAGS "-shared")\r
140     SET(CMAKE_INCLUDE_FLAG_D "-I")       # -I\r
141     SET(CMAKE_INCLUDE_FLAG_D_SEP "")     # , or empty\r
142     SET(CMAKE_LIBRARY_PATH_FLAG "-L")\r
143   ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
144 ENDIF(CMAKE_COMPILER_IS_GDC)\r
145
146 IF(CMAKE_D_USE_TANGO)\r
147         IF(CMAKE_COMPILER_IS_GDC)\r
148                 SET(DSTDLIB_TYPE "-fversion=Tango")\r
149                 SET(DSTDLIB_FLAGS "-lgtango")\r
150         ELSE(CMAKE_COMPILER_IS_GDC)\r
151                 SET(DSTDLIB_TYPE "-version=Tango")\r
152                 SET(DSTDLIB_FLAGS "-L${D_PATH}/lib -ltango -lphobos")\r
153         ENDIF(CMAKE_COMPILER_IS_GDC)\r
154 ENDIF(CMAKE_D_USE_TANGO)\r
155 IF(CMAKE_D_USE_PHOBOS)\r
156         IF(CMAKE_COMPILER_IS_GDC)\r
157                 SET(DSTDLIB_TYPE "-fversion=Phobos")\r
158                 SET(DSTDLIB_FLAGS "-lgphobos")\r
159         ELSE(CMAKE_COMPILER_IS_GDC)\r
160                 SET(DSTDLIB_TYPE "-version=Phobos")\r
161                 SET(DSTDLIB_FLAGS "-L${D_PATH}/lib -lphobos")\r
162         ENDIF(CMAKE_COMPILER_IS_GDC)\r
163 ENDIF(CMAKE_D_USE_PHOBOS)\r
164 \r
165 # create a D shared library\r
166 IF(NOT CMAKE_D_CREATE_SHARED_LIBRARY)\r
167   IF(CMAKE_COMPILER_IS_GDC)\r
168           SET(CMAKE_D_CREATE_SHARED_LIBRARY\r
169             "<CMAKE_D_COMPILER> <CMAKE_SHARED_LIBRARY_D_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_D_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_D_FLAG><TARGET_SONAME> ${CMAKE_OUTPUT_D_FLAG}<TARGET> <OBJECTS> <LINK_LIBRARIES>")\r
170   ELSE(CMAKE_COMPILER_IS_GDC)\r
171           SET(CMAKE_D_CREATE_SHARED_LIBRARY\r
172             "<CMAKE_D_COMPILER> <CMAKE_SHARED_LIBRARY_D_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_D_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_D_FLAG><TARGET_SONAME> ${CMAKE_OUTPUT_D_FLAG}<TARGET> <OBJECTS> <LINK_LIBRARIES> ${DSTDLIB_FLAGS}")\r
173   ENDIF(CMAKE_COMPILER_IS_GDC)\r
174 ENDIF(NOT CMAKE_D_CREATE_SHARED_LIBRARY)\r
175 \r
176 # create a D shared module just copy the shared library rule\r
177 IF(NOT CMAKE_D_CREATE_SHARED_MODULE)\r
178   SET(CMAKE_D_CREATE_SHARED_MODULE ${CMAKE_D_CREATE_SHARED_LIBRARY})\r
179 ENDIF(NOT CMAKE_D_CREATE_SHARED_MODULE)\r
180 \r
181 # create a D static library\r
182 IF(NOT CMAKE_D_CREATE_STATIC_LIBRARY)\r
183   IF(CMAKE_COMPILER_IS_GDC)\r
184         IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
185                 SET(CMAKE_D_CREATE_STATIC_LIBRARY\r
186                 "<CMAKE_AR> cr <TARGET>.lib <LINK_FLAGS> <OBJECTS> "\r
187                 "<CMAKE_RANLIB> <TARGET>.lib "\r
188                 "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS> "\r
189                       "<CMAKE_RANLIB> <TARGET> "\r
190               )\r
191         ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
192                 SET(CMAKE_D_CREATE_STATIC_LIBRARY\r
193                 "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS> "\r
194                       "<CMAKE_RANLIB> <TARGET> "\r
195               )\r
196         ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
197   ELSE(CMAKE_COMPILER_IS_GDC)\r
198     IF(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")\r
199       SET(CMAKE_D_CREATE_STATIC_LIBRARY\r
200         "<CMAKE_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS>"\r
201         "<CMAKE_RANLIB> <TARGET>")\r
202     ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")\r
203       SET(CMAKE_D_CREATE_STATIC_LIBRARY\r
204         "${DMD_LIBRARIAN} -c -p256 <TARGET> <OBJECTS>")\r
205     ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")\r
206   ENDIF(CMAKE_COMPILER_IS_GDC)  \r
207 ENDIF(NOT CMAKE_D_CREATE_STATIC_LIBRARY)\r
208 \r
209 # compile a D file into an object file\r
210 IF(NOT CMAKE_D_COMPILE_OBJECT)\r
211     SET(CMAKE_D_COMPILE_OBJECT\r
212       "<CMAKE_D_COMPILER> <FLAGS> ${CMAKE_OUTPUT_D_FLAG}<OBJECT> -c <SOURCE>")\r
213 ENDIF(NOT CMAKE_D_COMPILE_OBJECT)\r
214 \r
215 IF(NOT CMAKE_D_LINK_EXECUTABLE)\r
216   IF(CMAKE_COMPILER_IS_GDC)\r
217     SET(CMAKE_D_LINK_EXECUTABLE\r
218       "<CMAKE_D_COMPILER> <FLAGS> <CMAKE_D_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> ${CMAKE_OUTPUT_D_FLAG}<TARGET> <LINK_LIBRARIES> ${DSTDLIB_FLAGS} ${DSTDLIB_TYPE}")\r
219   ELSE(CMAKE_COMPILER_IS_GDC)\r
220     IF(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")\r
221       SET(CMAKE_D_LINK_EXECUTABLE\r
222         "gcc ${DLINK_FLAGS} <CMAKE_D_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES> -lpthread -lm ${DSTDLIB_FLAGS}")\r
223     ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")\r
224       SET(CMAKE_D_LINK_EXECUTABLE\r
225         "<CMAKE_D_COMPILER> <FLAGS> <CMAKE_D_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> ${CMAKE_OUTPUT_D_FLAG}<TARGET> <LINK_LIBRARIES>")\r
226     ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")\r
227   ENDIF(CMAKE_COMPILER_IS_GDC)\r
228 ENDIF(NOT CMAKE_D_LINK_EXECUTABLE)\r
229 \r
230 MARK_AS_ADVANCED(\r
231 CMAKE_D_FLAGS\r
232 CMAKE_D_FLAGS_DEBUG\r
233 CMAKE_D_FLAGS_MINSIZEREL\r
234 CMAKE_D_FLAGS_RELEASE\r
235 CMAKE_D_FLAGS_RELWITHDEBINFO\r
236 )\r
237 SET(CMAKE_D_INFORMATION_LOADED 1)\r