Import cmaked
[apps/madmutt.git] / cmake / Modules / CMakeTestDCompiler.cmake
diff --git a/cmake/Modules/CMakeTestDCompiler.cmake b/cmake/Modules/CMakeTestDCompiler.cmake
new file mode 100644 (file)
index 0000000..4fb7c7c
--- /dev/null
@@ -0,0 +1,175 @@
+#\r
+# CMakeD - CMake module for D Language\r
+#\r
+# Copyright (c) 2007, Selman Ulug <selman.ulug@gmail.com>\r
+#                     Tim Burrell <tim.burrell@gmail.com>\r
+#\r
+# All rights reserved.\r
+#\r
+# See Copyright.txt for details.\r
+#\r
+# Modified from CMake 2.6.5 CMakeTestCCompiler.cmake\r
+# See http://www.cmake.org/HTML/Copyright.html for details\r
+#\r
+\r
+# This file is used by EnableLanguage in cmGlobalGenerator to\r
+# determine that that selected D compiler can actually compile\r
+# and link the most basic of programs.   If not, a fatal error\r
+# is set and cmake stops processing commands and will not generate\r
+# any makefiles or projects.\r
+\r
+IF(NOT CMAKE_D_COMPILER_WORKS)\r
+  MESSAGE(STATUS "Check for working D compiler: ${CMAKE_D_COMPILER}")\r
+  FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+    "int main(char[][] args)\n"\r
+    "{return args.sizeof-1;}\n")\r
+  STRING(REGEX MATCH "dmd" DMDTEST "${CMAKE_D_COMPILER}")\r
+  IF(DMDTEST STREQUAL "dmd")\r
+      IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+         TRY_COMPILE(CMAKE_D_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+            OUTPUT_VARIABLE OUTPUT) \r
+      ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+         TRY_COMPILE(CMAKE_D_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+            CMAKE_FLAGS "-DLINK_LIBRARIES=${D_PATH}/lib/libphobos.a"\r
+            OUTPUT_VARIABLE OUTPUT) \r
+      ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+  ELSE(DMDTEST STREQUAL "dmd")\r
+         TRY_COMPILE(CMAKE_D_COMPILER_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+            OUTPUT_VARIABLE OUTPUT) \r
+  ENDIF(DMDTEST STREQUAL "dmd")\r
+  SET(C_TEST_WAS_RUN 1)\r
+ENDIF(NOT CMAKE_D_COMPILER_WORKS)\r
+\r
+IF(NOT CMAKE_D_COMPILER_WORKS)\r
+  MESSAGE(STATUS "Check for working D compiler: ${CMAKE_D_COMPILER} -- broken")\r
+  message(STATUS "To force a specific D compiler set the DC environment variable")\r
+  message(STATUS "    ie - export DC=\"/opt/dmd/bin/dmd\"")\r
+  message(STATUS "If the D path is not set please use the D_PATH variable")\r
+  message(STATUS "    ie - export D_PATH=\"/opt/dmd\"")\r
+  FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log\r
+    "Determining if the D compiler works failed with "\r
+    "the following output:\n${OUTPUT}\n\n")\r
+  MESSAGE(FATAL_ERROR "The D compiler \"${CMAKE_D_COMPILER}\" "\r
+    "is not able to compile a simple test program.\nIt fails "\r
+    "with the following output:\n ${OUTPUT}\n\n"\r
+    "CMake will not be able to correctly generate this project.")\r
+ELSE(NOT CMAKE_D_COMPILER_WORKS)\r
+  IF(C_TEST_WAS_RUN)\r
+    MESSAGE(STATUS "Check for working D compiler: ${CMAKE_D_COMPILER} -- works")\r
+    FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log\r
+      "Determining if the D compiler works passed with "\r
+      "the following output:\n${OUTPUT}\n\n") \r
+  ENDIF(C_TEST_WAS_RUN)\r
+  SET(CMAKE_D_COMPILER_WORKS 1 CACHE INTERNAL "")\r
+  # re-configure this file CMakeDCompiler.cmake so that it gets\r
+  # the value for CMAKE_SIZEOF_VOID_P\r
+  # configure variables set in this file for fast reload later on\r
+  IF(EXISTS ${CMAKE_SOURCE_DIR}/cmake/Modules/CMakeDCompiler.cmake.in)\r
+       CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/Modules/CMakeDCompiler.cmake.in \r
+         ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeDCompiler.cmake IMMEDIATE)\r
+  ELSE(EXISTS ${CMAKE_SOURCE_DIR}/cmake/Modules/CMakeDCompiler.cmake.in)\r
+       CONFIGURE_FILE(${CMAKE_ROOT}/Modules/CMakeDCompiler.cmake.in \r
+         ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeDCompiler.cmake IMMEDIATE)\r
+  ENDIF(EXISTS ${CMAKE_SOURCE_DIR}/cmake/Modules/CMakeDCompiler.cmake.in)\r
+ENDIF(NOT CMAKE_D_COMPILER_WORKS)\r
+\r
+IF(NOT CMAKE_D_PHOBOS_WORKS)\r
+  MESSAGE(STATUS "Check for working Phobos")\r
+  FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+    "import std.stdio;\n"\r
+    "int main(char[][] args)\n"\r
+    "{ writefln(\"%s\", args[0]); return args.sizeof-1;}\n")\r
+  IF(CMAKE_COMPILER_IS_GDC)\r
+      IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+               TRY_COMPILE(CMAKE_D_PHOBOS_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+                    #CMAKE_FLAGS "-DLINK_LIBRARIES=gphobos"\r
+                    OUTPUT_VARIABLE OUTPUT) \r
+      ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+               TRY_COMPILE(CMAKE_D_PHOBOS_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+                    CMAKE_FLAGS "-DLINK_LIBRARIES=gphobos"\r
+                    OUTPUT_VARIABLE OUTPUT) \r
+      ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+  ELSE(CMAKE_COMPILER_IS_GDC)\r
+      IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+               TRY_COMPILE(CMAKE_D_PHOBOS_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+                    OUTPUT_VARIABLE OUTPUT) \r
+      ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+               TRY_COMPILE(CMAKE_D_PHOBOS_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+                    CMAKE_FLAGS "-DLINK_LIBRARIES=${D_PATH}/lib/libphobos.a"\r
+                    COMPILE_DEFINITIONS "-I${D_PATH}/include -I${D_PATH}/import"\r
+                    OUTPUT_VARIABLE OUTPUT) \r
+      ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+  ENDIF(CMAKE_COMPILER_IS_GDC)\r
+  SET(C_TEST_WAS_RUN 1)\r
+ENDIF(NOT CMAKE_D_PHOBOS_WORKS)\r
+\r
+IF(NOT CMAKE_D_PHOBOS_WORKS)\r
+  MESSAGE(STATUS "Check for working Phobos -- unavailable")\r
+  FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log\r
+    "Determining if Phobos works failed with "\r
+    "the following output:\n${OUTPUT}\n\n")\r
+  #MESSAGE(FATAL_ERROR "Phobos does not work")\r
+ELSE(NOT CMAKE_D_PHOBOS_WORKS)\r
+  IF(C_TEST_WAS_RUN)\r
+    MESSAGE(STATUS "Check for working Phobos -- works")\r
+    FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log\r
+      "Determining if Phobos works passed with "\r
+      "the following output:\n${OUTPUT}\n\n") \r
+  ENDIF(C_TEST_WAS_RUN)\r
+  SET(CMAKE_D_PHOBOS_WORKS 1 CACHE INTERNAL "")\r
+ENDIF(NOT CMAKE_D_PHOBOS_WORKS)\r
+\r
+IF(NOT CMAKE_D_TANGO_WORKS)\r
+  MESSAGE(STATUS "Check for working Tango")\r
+  FILE(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+    "import tango.io.Stdout;"\r
+    "int main(char[][] args)\n"\r
+    "{Stdout.newline();return args.sizeof-1;}\n")\r
+  IF(CMAKE_COMPILER_IS_GDC)\r
+         TRY_COMPILE(CMAKE_D_TANGO_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+            CMAKE_FLAGS "-DLINK_LIBRARIES=gtango"\r
+            OUTPUT_VARIABLE OUTPUT) \r
+  ELSE(CMAKE_COMPILER_IS_GDC)\r
+      IF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+         TRY_COMPILE(CMAKE_D_TANGO_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+            OUTPUT_VARIABLE OUTPUT) \r
+      ELSE(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+         TRY_COMPILE(CMAKE_D_TANGO_WORKS ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testDCompiler.d\r
+            CMAKE_FLAGS "-DLINK_LIBRARIES=${D_PATH}/lib/libtango.a;${D_PATH}/lib/libphobos.a"\r
+            COMPILE_DEFINITIONS "-I${D_PATH}/include -I${D_PATH}/import"\r
+            OUTPUT_VARIABLE OUTPUT) \r
+      ENDIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")\r
+  ENDIF(CMAKE_COMPILER_IS_GDC)\r
+  SET(C_TEST_WAS_RUN 1)\r
+ENDIF(NOT CMAKE_D_TANGO_WORKS)\r
+\r
+IF(NOT CMAKE_D_TANGO_WORKS)\r
+  MESSAGE(STATUS "Check for working Tango -- unavailable")\r
+  FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log\r
+    "Determining if Tango works failed with "\r
+    "the following output:\n${OUTPUT}\n\n")\r
+  #MESSAGE(FATAL_ERROR "Tango does not work: \n${OUTPUT}\n\n")\r
+ELSE(NOT CMAKE_D_TANGO_WORKS)\r
+  IF(C_TEST_WAS_RUN)\r
+    MESSAGE(STATUS "Check for working Tango -- works")\r
+    FILE(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log\r
+      "Determining if Tango works passed with "\r
+      "the following output:\n${OUTPUT}\n\n") \r
+  ENDIF(C_TEST_WAS_RUN)\r
+  SET(CMAKE_D_TANGO_WORKS 1 CACHE INTERNAL "")\r
+ENDIF(NOT CMAKE_D_TANGO_WORKS)\r
+
+# if both tango and phobos are selected try to choose which one is available
+IF(CMAKE_D_USE_TANGO AND CMAKE_D_USE_PHOBOS)
+       MESSAGE(FATAL_ERROR "Tango AND Phobos selected, please choose one or the other!")
+ENDIF(CMAKE_D_USE_TANGO AND CMAKE_D_USE_PHOBOS)
+
+# ensure the user has the appropriate std lib available
+IF(CMAKE_D_USE_TANGO AND NOT CMAKE_D_TANGO_WORKS)
+       MESSAGE(FATAL_ERROR "Tango is required for this project, but it is not available!")
+ENDIF(CMAKE_D_USE_TANGO AND NOT CMAKE_D_TANGO_WORKS)
+
+IF(CMAKE_D_USE_PHOBOS AND NOT CMAKE_D_PHOBOS_WORKS)
+       MESSAGE(FATAL_ERROR "Phobos is required for this project, but it is not available!")
+ENDIF(CMAKE_D_USE_PHOBOS AND NOT CMAKE_D_PHOBOS_WORKS)
+