[waffle] [PATCH 3/4] cmake: Add the installed package files to the registry on windows
Dylan Baker
baker.dylan.c at gmail.com
Mon Dec 29 09:07:32 PST 2014
On Monday, December 29, 2014 11:35:20 AM Jose Fonseca wrote:
> 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.baker at 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.
I can't say whether it is a good idea or not, it's suggested by the
cmake documentation as the "right" way to do things on windows. I don't
have a strong opinion either way, and, like you, I doubt this works
correctly in it's current form. I provided mostly as a way to say "hey,
you can do this if you want", but I no problem dropping it.
>
>
> 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/waffle/attachments/20141229/22432a47/attachment-0001.sig>
More information about the waffle
mailing list