1 /*
  2  * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.  Oracle designates this
  8  * particular file as subject to the "Classpath" exception as provided
  9  * by Oracle in the LICENSE file that accompanied this code.
 10  *
 11  * This code is distributed in the hope that it will be useful, but WITHOUT
 12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 14  * version 2 for more details (a copy is included in the LICENSE file that
 15  * accompanied this code).
 16  *
 17  * You should have received a copy of the GNU General Public License version
 18  * 2 along with this work; if not, write to the Free Software Foundation,
 19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 20  *
 21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 22  * or visit www.oracle.com if you need additional information or have any
 23  * questions.
 24  */
 25 
 26 ext.WIN = [:]
 27 
 28 WIN.canBuild = IS_WINDOWS
 29 if (!WIN.canBuild) return;
 30 
 31 WIN.compileSwing = true;
 32 WIN.compileSWT = true;
 33 
 34 WIN.includeNull3d = true
 35 
 36 // Lambda for naming the generated libs
 37 WIN.library = { name -> return "${name}.dll" as String }
 38 
 39 WIN.libDest = "bin"
 40 WIN.modLibDest = "lib"
 41 
 42 def CPU_BITS = IS_64 ? "x64" : "x86"
 43 
 44 setupTools("windows_tools",
 45     { propFile ->
 46         if (project.hasProperty('setupWinTools')) {
 47             setupWinTools(propFile)
 48         } else {
 49             // Create the properties file
 50             ByteArrayOutputStream results = new ByteArrayOutputStream();
 51             String winsdkDir = System.getenv().get("WINSDK_DIR");
 52             exec({
 53                 environment([
 54                         "WINSDKPATH" : winsdkDir == null ? "" : winsdkDir,
 55                         "CONF"       : "/$CONF", // TODO does this mean the generated properties must be reset when in a different configuration?
 56                         "VCARCH"     : IS_64 ? "amd64" : "x86",
 57                         "SDKARCH"    : IS_64 ? "/x64" : "/x86",
 58                 ]);
 59                 commandLine("cmd", "/q", "/c", "buildSrc\\genVSproperties.bat");
 60                 setStandardOutput(results);
 61             });
 62             BufferedReader reader = new BufferedReader(new StringReader(results.toString().trim()));
 63             reader.readLine();
 64             reader.readLine();
 65             String line;
 66             while ((line = reader.readLine()) != null && !line.startsWith("######")) {
 67                 line = line.replace("\\", "/").replace("/@@ENDOFLINE@@", "").replace("@@ENDOFLINE@@", "").replace("//", "/").replace("windows.vs.", "WINDOWS_VS_");
 68                 propFile << line << "\r\n";
 69             }
 70         }
 71     },
 72     { properties ->
 73         defineProperty("WINDOWS_VS_VSINSTALLDIR", properties, "c:/Program Files (x86)/Microsoft Visual Studio/2017/Professional");
 74         defineProperty("WINDOWS_VS_WINSDKDLLINSTALLDIR", properties, "c:/Program Files (x86)/Windows Kits/10/Redist/ucrt/DLLs");
 75         defineProperty("WINDOWS_SDK_DIR", properties, System.getenv().get("WINSDK_DIR"))
 76         defineProperty("WINDOWS_SDK_VERSION", properties, "")
 77         defineProperty("WINDOWS_VS_VCINSTALLDIR", properties, "$WINDOWS_VS_VSINSTALLDIR/VC")
 78         defineProperty("WINDOWS_VS_DEVENVDIR", properties, "$WINDOWS_VS_VSINSTALLDIR/Common7/IDE")
 79         defineProperty("WINDOWS_VS_DEVENVCMD", properties, "$WINDOWS_VS_DEVENVDIR/VCExpress.exe")
 80         defineProperty("WINDOWS_VS_MSVCDIR", properties, WINDOWS_VS_VCINSTALLDIR)
 81         defineProperty("WINDOWS_DXSDK_DIR", properties, System.getenv().get("DXSDK_DIR"))
 82         defineProperty("WINDOWS_VS_INCLUDE", properties, "$WINDOWS_VS_VCINSTALLDIR/INCLUDE;" + "$WINDOWS_SDK_DIR/include;")
 83         defineProperty("WINDOWS_VS_VER", properties, "150")
 84         defineProperty("WINDOWS_CRT_VER", properties, "150")
 85         defineProperty("WINDOWS_VS_LIB", properties, "$WINDOWS_VS_VCINSTALLDIR/LIB;" + "$WINDOWS_SDK_DIR/lib;")
 86         defineProperty("WINDOWS_VS_LIBPATH", properties, "$WINDOWS_VS_VCINSTALLDIR/LIB;")
 87         def parfaitPath = IS_COMPILE_PARFAIT ? System.getenv().get("PARFAIT_PATH") + ";" : "";
 88         defineProperty("WINDOWS_VS_PATH", properties, parfaitPath + "$WINDOWS_VS_DEVENVDIR;" +
 89                 "$WINDOWS_VS_VSINSTALLDIR/VC/BIN;" +
 90                 "$WINDOWS_VS_VSINSTALLDIR/Common7/Tools;" +
 91                 "$WINDOWS_VS_VCINSTALLDIR/VCPackages;" +
 92                 "$WINDOWS_SDK_DIR/bin/NETFX 4.0 Tools;" +
 93                 "$WINDOWS_SDK_DIR/bin;" +
 94                 System.getenv().get("PATH"))
 95     }
 96 )
 97 
 98 if (WINDOWS_SDK_DIR == null || WINDOWS_SDK_DIR == "") {
 99     throw new GradleException("FAIL: WINSDK_DIR not defined");
100 }
101 
102 // Define set of flags shared for all targets that support debug compilation
103 def ccDebugFlags =
104     IS_DEBUG_NATIVE ? ["/MDd", "/Od", "/Zi", "/DDEBUG"] : ["/O2", "/MD", "/DNDEBUG"]
105 
106 def winVsVer = Integer.parseInt(WINDOWS_VS_VER)
107 if (winVsVer >= 120) {
108     // Serialize access to PDB file for debug builds if on VS2013 or later
109     if (IS_DEBUG_NATIVE) ccDebugFlags += "/FS"
110 }
111 
112 
113 // Common set of flags for all modules
114 def ccFlags = ["/nologo", "/W3", "/EHsc", "/c",
115         "/D_STATIC_CPPLIB", "/D_DISABLE_DEPRECATE_STATIC_CPPLIB", "/DINLINE=__inline",
116         "/DUNICODE", "/D_UNICODE", "/DWIN32", "/DIAL", "/D_LITTLE_ENDIAN", "/DWIN32_LEAN_AND_MEAN",
117         "/I$JDK_HOME/include", "/I$JDK_HOME/include/win32",
118         ccDebugFlags].flatten();

119 
120 def linkFlags = ["/nologo", "/dll", "/manifest", "/opt:REF", "/incremental:no", "/dynamicbase", "/nxcompat"];



121 if (!IS_64) linkFlags.add("/safeseh");
122 if (IS_DEBUG_NATIVE) linkFlags.add("/debug");
123 
124 // Remove C++ static linking if not on VS2010
125 if (WINDOWS_VS_VER != "100") {
126     ccFlags -= ["/D_STATIC_CPPLIB", "/D_DISABLE_DEPRECATE_STATIC_CPPLIB"]
127 }
128 
129 ext.WINDOWS_NATIVE_COMPILE_ENVIRONMENT = [
130         "VCINSTALLDIR"         : WINDOWS_VS_VCINSTALLDIR,
131         "VSINSTALLDIR"         : WINDOWS_VS_VSINSTALLDIR,
132         "DEVENVDIR"            : WINDOWS_VS_DEVENVDIR,
133         "MSVCDIR"              : WINDOWS_VS_MSVCDIR,
134         "VS_VER"               : WINDOWS_VS_VER,
135         "PATH"                 : WINDOWS_VS_PATH,
136         "INCLUDE"              : WINDOWS_VS_INCLUDE,
137         "LIB"                  : WINDOWS_VS_LIB,
138         "LIBPATH"              : WINDOWS_VS_LIBPATH,
139         "DXSDK_DIR"            : WINDOWS_DXSDK_DIR
140 ];
141 def msvcVer = System.getenv("MSVC_VER") ?: "14.10.25017"
142 def msvcBinDir = ""
143 if (hasProperty('toolchainDir')) {
144     msvcBinDir = "$WINDOWS_VS_VSINSTALLDIR/VC/bin/$CPU_BITS"
145 } else if (winVsVer == 150) {
146     msvcBinDir = "$WINDOWS_VS_VSINSTALLDIR/VC/Tools/MSVC/$msvcVer/bin/Host${CPU_BITS}/$CPU_BITS"
147 } else if (winVsVer <= 120) {
148     msvcBinDir = (IS_64
149                       ? "$WINDOWS_VS_VSINSTALLDIR/VC/BIN/amd64"
150                       : "$WINDOWS_VS_VSINSTALLDIR/VC/BIN")
151 }
152 def compiler = IS_COMPILE_PARFAIT ? "cl.exe" : cygpath("$msvcBinDir/cl.exe")
153 def linker = IS_COMPILE_PARFAIT ? "link.exe" : cygpath("$msvcBinDir/link.exe")
154 def winSdkBinDir = "$WINDOWS_SDK_DIR/Bin"
155 if (WINDOWS_VS_VER != "100") {
156     winSdkBinDir += "/$CPU_BITS"
157 }
158 
159 if (!file(cygpath("$winSdkBinDir/RC.Exe")).exists()) {
160     winSdkBinDir = "$WINDOWS_SDK_DIR/Bin/$WINDOWS_SDK_VERSION"
161     if (WINDOWS_VS_VER != "100") {
162         winSdkBinDir += "/$CPU_BITS"
163     }
164 }
165 
166 ext.RC = cygpath("$winSdkBinDir/rc.exe")
167 def rcCompiler = RC
168 ext.FXC = cygpath("$winSdkBinDir/fxc.exe")
169 
170 if (!file(FXC).exists()) {
171     if (WINDOWS_DXSDK_DIR == null || WINDOWS_DXSDK_DIR == "") {
172         throw new GradleException("FAIL: DXSDK_DIR not defined");
173     }
174     ext.FXC = cygpath("$WINDOWS_DXSDK_DIR/utilities/bin/x86/fxc.exe")
175 }
176 
177 ext.MC = cygpath("$winSdkBinDir/mt.exe")
178 
179 if (!file(RC).exists()) throw new GradleException("FAIL: cannot find RC: " + RC)
180 if (!file(FXC).exists()) throw new GradleException("FAIL: cannot find FXC: " + FXC)
181 
182 def msvcRedstDir
183 if (hasProperty('toolchainDir')) {
184     msvcRedstDir = "$WINDOWS_VS_VSINSTALLDIR/VC/Redist/$CPU_BITS"
185 } else {
186     def msvcRedistVer = System.getenv("MSVC_REDIST_VER") ?: "14.10.25008"
187     msvcRedstDir = "$WINDOWS_VS_VSINSTALLDIR/VC/Redist/MSVC/$msvcRedistVer/$CPU_BITS"
188 }
189 
190 def winSdkDllDir = "$WINDOWS_VS_WINSDKDLLINSTALLDIR/$CPU_BITS"
191 
192 def WINDOWS_DLL_VER = WINDOWS_VS_VER
193 
194 def windowsCRTVer = System.getenv("WINDOWS_CRT_VER") ?: WINDOWS_CRT_VER
195 if (WINDOWS_VS_VER == "150") {
196     WINDOWS_DLL_VER = "140"
197 }
198 
199 def vs2017DllPath = cygpath("${msvcRedstDir}/Microsoft.VC${windowsCRTVer}.CRT")
200 if (file(vs2017DllPath).exists()) {
201     ext.WIN.VS2017DLLNames = [
202         "msvcp140.dll",
203         "vcruntime140.dll",
204         "vcruntime140_1.dll"
205     ];
206     ext.WIN.VS2017DLLs = []
207     ext.WIN.VS2017DLLNames.each { vsdll->
208         ext.WIN.VS2017DLLs += "$vs2017DllPath/$vsdll"
209     }
210 }
211 else {
212     ext.WIN.VS2017DLLNames = [
213 	];
214     ext.WIN.VS2017DLLs = [
215 	];
216 }
217 
218 def WinSDKDLLsPath = cygpath("${winSdkDllDir}")
219 if (file(WinSDKDLLsPath).exists()) {
220     ext.WIN.WinSDKDLLNames = [
221         "api-ms-win-core-console-l1-1-0.dll",
222         "api-ms-win-core-datetime-l1-1-0.dll",
223         "api-ms-win-core-debug-l1-1-0.dll",
224         "api-ms-win-core-errorhandling-l1-1-0.dll",
225         "api-ms-win-core-file-l1-1-0.dll",
226         "api-ms-win-core-file-l1-2-0.dll",
227         "api-ms-win-core-file-l2-1-0.dll",
228         "api-ms-win-core-handle-l1-1-0.dll",
229         "api-ms-win-core-heap-l1-1-0.dll",
230         "api-ms-win-core-interlocked-l1-1-0.dll",
231         "api-ms-win-core-libraryloader-l1-1-0.dll",
232         "api-ms-win-core-localization-l1-2-0.dll",
233         "api-ms-win-core-memory-l1-1-0.dll",
234         "api-ms-win-core-namedpipe-l1-1-0.dll",
235         "api-ms-win-core-processenvironment-l1-1-0.dll",
236         "api-ms-win-core-processthreads-l1-1-0.dll",
237         "api-ms-win-core-processthreads-l1-1-1.dll",
238         "api-ms-win-core-profile-l1-1-0.dll",
239         "api-ms-win-core-rtlsupport-l1-1-0.dll",
240         "api-ms-win-core-string-l1-1-0.dll",
241         "api-ms-win-core-synch-l1-1-0.dll",
242         "api-ms-win-core-synch-l1-2-0.dll",
243         "api-ms-win-core-sysinfo-l1-1-0.dll",
244         "api-ms-win-core-timezone-l1-1-0.dll",
245         "api-ms-win-core-util-l1-1-0.dll",
246         "api-ms-win-crt-conio-l1-1-0.dll",
247         "api-ms-win-crt-convert-l1-1-0.dll",
248         "api-ms-win-crt-environment-l1-1-0.dll",
249         "api-ms-win-crt-filesystem-l1-1-0.dll",
250         "api-ms-win-crt-heap-l1-1-0.dll",
251         "api-ms-win-crt-locale-l1-1-0.dll",
252         "api-ms-win-crt-math-l1-1-0.dll",
253         "api-ms-win-crt-multibyte-l1-1-0.dll",
254         "api-ms-win-crt-private-l1-1-0.dll",
255         "api-ms-win-crt-process-l1-1-0.dll",
256         "api-ms-win-crt-runtime-l1-1-0.dll",
257         "api-ms-win-crt-stdio-l1-1-0.dll",
258         "api-ms-win-crt-string-l1-1-0.dll",
259         "api-ms-win-crt-time-l1-1-0.dll",
260         "api-ms-win-crt-utility-l1-1-0.dll",
261         "ucrtbase.dll"
262     ];
263     ext.WIN.WinSDKDLLs = []
264     ext.WIN.WinSDKDLLNames.each { winsdkdll->
265         ext.WIN.WinSDKDLLs += "$WinSDKDLLsPath/$winsdkdll"
266     }
267 }
268 else {
269     ext.WIN.WinSDKDLLNames = [
270     ];
271     ext.WIN.WinSDKDLLs = [
272     ];
273 }
274 
275 // Product version variables passed to RC:
276 def rcVer = "$RELEASE_VERSION"
277 def rcVerMajor = Integer.parseInt(jfxReleaseMajorVersion)
278 def rcVerMinor = Integer.parseInt(jfxReleaseMinorVersion)
279 def rcVerSecurity = Integer.parseInt(jfxReleaseSecurityVersion)
280 def rcVerPatch = Integer.parseInt(jfxReleasePatchVersion)
281 def rcVerFile = "${rcVerMajor},${rcVerMinor},${rcVerSecurity},${rcVerPatch}"
282 def rcVerBuild = "$RELEASE_VERSION_LONG"
283 def rcVerCopyrYear = "${Calendar.getInstance().get(Calendar.YEAR)}"
284 
285 def rcFlags = [
286     "/d", "\"JFX_COMPANY=${COMPANY_NAME}\"",
287     "/d", "\"JFX_COMPONENT=${PRODUCT_NAME} ${PLATFORM_NAME} binary\"",
288     "/d", "\"JFX_NAME=${PRODUCT_NAME} ${PLATFORM_NAME} ${rcVerMajor}\"",
289     "/d", "\"JFX_VER=${rcVer}\"",
290     "/d", "\"JFX_BUILD_ID=${rcVerBuild}\"",
291     "/d", "\"JFX_COPYRIGHT=Copyright \u00A9 ${rcVerCopyrYear}\"",
292     "/d", "\"JFX_FVER=${rcVerFile}\"",
293     "/d", "\"JFX_FTYPE=0x2L\"",
294     "/nologo"
295 ];
296 
297 def defaultRcSource = file("${project("graphics").projectDir}/src/main/resources/version.rc");
298 
299 WIN.glass = [:]
300 WIN.glass.javahInclude = [
301     "com/sun/glass/events/**",
302     "com/sun/glass/ui/*",
303     "com/sun/glass/ui/win/*"]
304 WIN.glass.nativeSource = file("${project("graphics").projectDir}/src/main/native-glass/win")
305 WIN.glass.compiler = compiler
306 WIN.glass.rcCompiler = rcCompiler;
307 WIN.glass.rcSource = file("${project("graphics").projectDir}/src/main/native-glass/win/GlassResources.rc");
308 WIN.glass.rcFlags = [
309     "/I", file("${project("graphics").projectDir}/src/main/resources"),
310     "/d", "JFX_FNAME=glass.dll",
311     "/d", "JFX_INTERNAL_NAME=glass",
312     rcFlags].flatten();
313 WIN.glass.ccFlags = [ccFlags, "/WX"].flatten()
314 if (WINDOWS_VS_VER != "100") WIN.glass.ccFlags -= ["/WX"]
315 WIN.glass.linker = linker
316 WIN.glass.linkFlags = [linkFlags, "delayimp.lib", "gdi32.lib", "urlmon.lib", "Comdlg32.lib",
317         "winmm.lib", "imm32.lib", "shell32.lib", "Uiautomationcore.lib", "dwmapi.lib",
318         "/DELAYLOAD:user32.dll", "/DELAYLOAD:urlmon.dll", "/DELAYLOAD:winmm.dll", "/DELAYLOAD:shell32.dll",
319         "/DELAYLOAD:Uiautomationcore.dll", "/DELAYLOAD:dwmapi.dll"].flatten()
320 WIN.glass.lib = "glass"
321 
322 WIN.decora = [:]
323 WIN.decora.compiler = compiler
324 WIN.decora.ccFlags = [IS_64 ? [] : ["/arch:SSE"], "/fp:fast", ccFlags].flatten()
325 WIN.decora.linker = linker
326 WIN.decora.linkFlags = [linkFlags].flatten()
327 WIN.decora.lib = "decora_sse"
328 WIN.decora.rcCompiler = rcCompiler;
329 WIN.decora.rcSource = defaultRcSource
330 WIN.decora.rcFlags = ["/d", "JFX_FNAME=decora_sse.dll", "/d", "JFX_INTERNAL_NAME=decora", rcFlags].flatten()
331 
332 WIN.prism = [:]
333 WIN.prism.javahInclude = ["com/sun/prism/impl/**/*", "com/sun/prism/PresentableState*"]
334 WIN.prism.nativeSource = file("${project("graphics").projectDir}/src/main/native-prism")
335 WIN.prism.compiler = compiler
336 WIN.prism.ccFlags = [ccFlags].flatten()
337 WIN.prism.linker = linker
338 WIN.prism.linkFlags = [linkFlags].flatten()
339 WIN.prism.lib = "prism_common"
340 WIN.prism.rcCompiler = rcCompiler;
341 WIN.prism.rcSource = defaultRcSource
342 WIN.prism.rcFlags = ["/d", "JFX_FNAME=prism_common.dll", "/d", "JFX_INTERNAL_NAME=prism", rcFlags].flatten()
343 
344 WIN.prismSW = [:]
345 WIN.prismSW.javahInclude = ["com/sun/pisces/**/*"]
346 WIN.prismSW.nativeSource = file("${project("graphics").projectDir}/src/main/native-prism-sw")
347 WIN.prismSW.compiler = compiler
348 WIN.prismSW.ccFlags = [ccFlags].flatten()
349 WIN.prismSW.linker = linker
350 WIN.prismSW.linkFlags = [linkFlags].flatten()
351 WIN.prismSW.lib = "prism_sw"
352 WIN.prismSW.rcCompiler = rcCompiler;
353 WIN.prismSW.rcSource = defaultRcSource
354 WIN.prismSW.rcFlags = ["/d", "JFX_FNAME=prism_sw.dll", "/d", "JFX_INTERNAL_NAME=prismSW", rcFlags].flatten()
355 
356 WIN.prismD3D = [:]
357 WIN.prismD3D.javahInclude = ["com/sun/prism/d3d/**/*"]
358 WIN.prismD3D.nativeSource = [
359     file("${project("graphics").projectDir}/src/main/native-prism-d3d"),
360     file("${project("graphics").projectDir}/src/main/native-prism-d3d/hlsl")]
361 WIN.prismD3D.compiler = compiler
362 WIN.prismD3D.ccFlags = [ccFlags, "/Ibuild/headers/PrismD3D"].flatten()
363 WIN.prismD3D.linker = linker
364 WIN.prismD3D.linkFlags = [linkFlags, "user32.lib"].flatten()
365 WIN.prismD3D.lib = "prism_d3d"
366 WIN.prismD3D.rcCompiler = rcCompiler;
367 WIN.prismD3D.rcSource = defaultRcSource
368 WIN.prismD3D.rcFlags = ["/d", "JFX_FNAME=prism_d3d.dll", "/d", "JFX_INTERNAL_NAME=prismD3D", rcFlags].flatten();
369 
370 WIN.iio = [:]
371 WIN.iio.javahInclude = ["com/sun/javafx/iio/**/*"]
372 WIN.iio.nativeSource = [
373     file("${project("graphics").projectDir}/src/main/native-iio"),
374     file("${project("graphics").projectDir}/src/main/native-iio/libjpeg")]
375 WIN.iio.compiler = compiler
376 WIN.iio.ccFlags = [ccFlags].flatten()
377 WIN.iio.linker = linker
378 WIN.iio.linkFlags = [linkFlags].flatten()
379 WIN.iio.lib = "javafx_iio"
380 WIN.iio.rcCompiler = rcCompiler;
381 WIN.iio.rcSource = defaultRcSource
382 WIN.iio.rcFlags = ["/d", "JFX_FNAME=javafx_iio.dll", "/d", "JFX_INTERNAL_NAME=iio", rcFlags].flatten();
383 
384 WIN.prismES2 = [:]
385 WIN.prismES2.javahInclude = ["com/sun/prism/es2/**/*"]
386 WIN.prismES2.nativeSource = [
387     file("${project("graphics").projectDir}/src/main/native-prism-es2"),
388     file("${project("graphics").projectDir}/src/main/native-prism-es2/GL"),
389     file("${project("graphics").projectDir}/src/main/native-prism-es2/windows")
390 ]
391 WIN.prismES2.compiler = compiler
392 WIN.prismES2.ccFlags = ["/Ob1", "/GF", "/Gy", "/GS", "/DWIN32", ccFlags].flatten()
393 WIN.prismES2.linker = linker
394 WIN.prismES2.linkFlags = [linkFlags, "/SUBSYSTEM:WINDOWS", "opengl32.lib", "gdi32.lib", "user32.lib", "kernel32.lib"].flatten()
395 WIN.prismES2.lib = "prism_es2"
396 WIN.prismES2.rcCompiler = rcCompiler;
397 WIN.prismES2.rcSource = defaultRcSource
398 WIN.prismES2.rcFlags = ["/d", "JFX_FNAME=prism_es2.dll", "/d", "JFX_INTERNAL_NAME=prismES2", rcFlags].flatten();
399 
400 def closedDir = file("$projectDir/../rt-closed")
401 WIN.font = [:]
402 WIN.font.javahInclude = [
403         "com/sun/javafx/font/**/*",
404         "com/sun/javafx/text/**/*"]
405 WIN.font.nativeSource = [file("${project("graphics").projectDir}/src/main/native-font")]
406 WIN.font.compiler = compiler
407 WIN.font.ccFlags = ["/DJFXFONT_PLUS", "/D_WIN32_WINNT=0x0601", ccFlags].flatten()
408 WIN.font.ccFlags -= ["/DUNICODE", "/D_UNICODE"]
409 WIN.font.linker = linker
410 WIN.font.linkFlags = [linkFlags, "advapi32.lib", "gdi32.lib", "user32.lib", "dwrite.lib", "d2d1.lib", "windowscodecs.lib", "ole32.lib"].flatten()
411 WIN.font.lib = "javafx_font"
412 WIN.font.rcCompiler = rcCompiler;
413 WIN.font.rcSource = defaultRcSource
414 WIN.font.rcFlags = ["/d", "JFX_FNAME=javafx_font.dll", "/d", "JFX_INTERNAL_NAME=font", rcFlags].flatten();
415 
416 WIN.media = [:]
417 WIN.media.rcCompiler = rcCompiler
418 WIN.media.rcSource = defaultRcSource
419 WIN.media.glibRcFile = "glib-lite.res"
420 WIN.media.gstreamerRcFile = "gstreamer-lite.res"
421 WIN.media.fxpluginsRcFile = "fxplugins.res"
422 WIN.media.jfxmediaRcFile = "jfxmedia.res"
423 WIN.media.glibRcFlags = ["/d", "JFX_FNAME=glib-lite.dll", "/d", "JFX_INTERNAL_NAME=glib", rcFlags].flatten()
424 WIN.media.gstreamerRcFlags = ["/d", "JFX_FNAME=gstreamer-lite.dll", "/d", "JFX_INTERNAL_NAME=gstreamer", rcFlags].flatten()
425 WIN.media.fxpluginsRcFlags = ["/d", "JFX_FNAME=fxplugins.dll", "/d", "JFX_INTERNAL_NAME=fxplugins", rcFlags].flatten()
426 WIN.media.jfxmediaRcFlags = ["/d", "JFX_FNAME=jfxmedia.dll", "/d", "JFX_INTERNAL_NAME=jfxmedia", rcFlags].flatten()
427 def parfaitPath = System.getenv("PARFAIT_PATH");
428 WIN.media.compiler = IS_COMPILE_PARFAIT ? "${parfaitPath}/parfait-cl.exe" : "cl.exe";
429 WIN.media.linker = IS_COMPILE_PARFAIT ? "${parfaitPath}/parfait-link.exe" : "link.exe";
430 WIN.media.ar = IS_COMPILE_PARFAIT ? "${parfaitPath}/parfait-lib.exe" : "lib.exe";
431 
432 WIN.webkit = [:]
433 WIN.webkit.compiler = compiler
434 WIN.webkit.linker = linker
435 WIN.webkit.rcCompiler = rcCompiler
436 WIN.webkit.rcSource = defaultRcSource
437 WIN.webkit.rcFlags = ["/d", "JFX_FNAME=jfxwebkit.dll", "/d", "JFX_INTERNAL_NAME=webkit", rcFlags].flatten();
--- EOF ---