1 # Copyright 2012 Intel Corporation
3 # Permission is hereby granted, free of charge, to any person obtaining a
4 # copy of this software and associated documentation files (the "Software"),
5 # to deal in the Software without restriction, including without limitation
6 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
7 # and/or sell copies of the Software, and to permit persons to whom the
8 # Software is furnished to do so, subject to the following conditions:
10 # The above copyright notice and this permission notice (including the next
11 # paragraph) shall be included in all copies or substantial portions of the
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22 # function piglit_include_target_api
24 # If the file CMakeLists.${piglit_target_api}.txt exists in the current source
25 # directory, then include it.
27 function(piglit_include_target_api)
29 # Verify that the value of `piglit_target_api` is valid.
32 foreach(api "gl" "gles1" "gles2" "gles3" "cl" "no_api")
33 if(piglit_target_api STREQUAL ${api})
36 endif(piglit_target_api STREQUAL ${api})
40 message(FATAL_ERROR "Invalid value for piglit_target_api: ${piglit_target_api}")
43 # Include CMakeLists.${piglit_target_api}.txt` if it exists.
44 set(api_file ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.${piglit_target_api}.txt)
45 if(EXISTS ${api_file})
47 endif(EXISTS ${api_file})
49 endfunction(piglit_include_target_api)
52 # function piglit_add_executable
54 # This function wraps `add_executable` and has the same signature.
56 # In addition to calling `add_executable`, it adds to each object file
57 # a dependency on piglit_dispatch's generated files.
59 function(piglit_add_executable name)
61 piglit_create_manifest_file(${name})
63 list(REMOVE_AT ARGV 0)
64 add_executable(${name} ${ARGV})
65 add_dependencies(${name} piglit_dispatch_gen)
67 install(TARGETS ${name} DESTINATION ${PIGLIT_INSTALL_LIBDIR}/bin)
69 endfunction(piglit_add_executable)
72 # function piglit_add_library
74 # This function wraps `add_library` and has the same signature.
76 # In addition to calling `add_library`, it adds to each object file
77 # a dependency on piglit_dispatch's generated files.
79 function(piglit_add_library name)
81 list(REMOVE_AT ARGV 0)
83 add_library(${name} STATIC ${ARGV})
85 add_library(${name} SHARED ${ARGV})
86 install(TARGETS ${name} DESTINATION ${PIGLIT_INSTALL_LIBDIR}/lib)
88 add_dependencies(${name} piglit_dispatch_gen)
89 if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
90 set_target_properties(${name} PROPERTIES SOVERSION "0")
93 endfunction(piglit_add_library)
96 # This is lame, but Windows 10 (and maybe Win8) asks for confirmation
97 # before running .exe files containing the strings "patch", "setup",
98 # "update", etc. In Cygwin, we simply get "Permission Denied".
99 # This causes the Piglit test to fail.
100 # The work-around is to create a "manifest" file for such executables.
101 # This function examines the target name and creates the manifest file
102 # if needed. The file will be named "${target}.exe.manifest".
103 # See https://answers.microsoft.com/en-us/windows/forum/windows_7-security/uac-prompts-on-any-program-with-the-word-patch-or/c5359497-d16e-43c6-99f2-db3d8eecc9c0?auth=1
104 function(piglit_create_manifest_file target)
106 # look for known strings
107 string(FIND ${target} "patch" r1)
108 string(FIND ${target} "setup" r2)
109 string(FIND ${target} "update" r3)
111 # if any of those strings is in the target filename
112 if((${r1} GREATER -1) OR (${r2} GREATER -1) OR (${r3} GREATER -1))
113 # XXX we should probably use add_custom_command() here to copy
114 # the manifest file, but I've been unsuccessful in getting
117 OUTPUT $<TARGET_FILE:${target}>.manifest
118 INPUT ${CMAKE_SOURCE_DIR}/cmake/win10-manifest.txt)
120 install(FILES $<TARGET_FILE:${target}>.manifest
121 DESTINATION ${PIGLIT_INSTALL_LIBDIR}/bin)
124 endfunction(piglit_create_manifest_file)