On 22/12/14 22:36, Dylan Baker wrote:
This adds the locations of the package files to the registry on windows,
which should allow them to be auto detected by cmake on windows when
linking against waffle in other projects.

Signed-off-by: Dylan Baker <dylanx.c.ba...@intel.com>
---

This patch is completely untested (I don't have access to a windows
development machine, nor do I want to maintain one), I've sent this as a
courtesy to windows users, and hopefully it can point an interested part
in the correct direction.

Note that this installs into the local machine registry, and there is
also the option of using local user registry instead, and that can be
done by changing waffle to use export(), though I'm not exactly sure how
that works either

  CMakeLists.txt | 10 ++++++++++
  1 file changed, 10 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 729ebc1..0ac2d4b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -182,6 +182,16 @@ install(
      COMPONENT Devel
  )

+# If running on windows add waffle to the registry so it can be auto detected
+# by consuming projects
+if (WIN32)

This will break cross-compiling from Linux to Windows (via MinGW), because "WIN32" is true.

Replacing it with

  if (WIN32 AND NOT CMAKE_CROSSCOMPILING)

should do the trick.


+    execute_process(
+        COMMAND "REG ADD HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\Waffle 
/v Waffle-1 /t REG_SZ /d ${ConfigPackageLocation} /f"

I suspect this will fail when there are spaces in the path (e.g., when waffle is in "C:\Program Files\..."


+        ERROR_QUIET
+        OUTPUT_QUIET
+    )
+endif ()

Also I believe execute_process() will execute the command when configuring -- not when building --, or even better, not when installing.




I'm not sure this is a great idea overall. Are any other packages doing anything like this? It all seems very non-standard, so I wonder if this will really simplify things or be too surprising.


FWIW, IMO the best way of finding things with CMake on Windows is using the `-C` cmake option.

For example, this is part of my MSVC Cmake cache:

$ cat msvc32/Cache.cmake
set (CMAKE_ASM_MASM_COMPILER "${CMAKE_CURRENT_LIST_DIR}/masm/ml.exe" CACHE FILEPATH "" FORCE)

set (GLEXT_INCLUDE_DIR "H:/noarch/glext" CACHE PATH "" FORCE)

set (GLEW_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/glew/include" CACHE PATH "" FORCE) set (GLEW_glew_LIBRARY "${CMAKE_CURRENT_LIST_DIR}/glew/lib/glew32.lib" CACHE FILEPATH "" FORCE)

set (GLFW_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/glfw/include" CACHE PATH "" FORCE) set (GLFW_LIBRARY "${CMAKE_CURRENT_LIST_DIR}/glfw/lib/glfw32.lib" CACHE FILEPATH "" FORCE)

set (GLUT_INCLUDE_DIR "H:/msvc32/freeglut/include" CACHE PATH "" FORCE)
set (GLUT_glut_LIBRARY "H:/msvc32/freeglut/lib/freeglut.lib" CACHE FILEPATH "" FORCE)

set (PNG_PNG_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/libpng/include" CACHE PATH "" FORCE) set (PNG_LIBRARY "${CMAKE_CURRENT_LIST_DIR}/libpng/lib/libpng.lib" CACHE FILEPATH "" FORCE)

set (ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/zlib/include" CACHE PATH "" FORCE) set (ZLIB_LIBRARY "${CMAKE_CURRENT_LIST_DIR}/zlib/lib/zlib.lib" CACHE FILEPATH "" FORCE)

[...]


So all I need to do when building any Cmake project is to pass -C /path/to/Cache.cmake and it will find everything I need. All this is in a network share so it can be used both from my Windows development machines and build slaves.


Of course, this only works if the cmake project is not too smart for its own good.


Jose
_______________________________________________
waffle mailing list
waffle@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/waffle

Reply via email to