208 eval VS_DESCRIPTION=\${VS_DESCRIPTION_$version} |
208 eval VS_DESCRIPTION=\${VS_DESCRIPTION_$version} |
209 $PRINTF " %-10s %s\n" $version "$VS_DESCRIPTION" |
209 $PRINTF " %-10s %s\n" $version "$VS_DESCRIPTION" |
210 done |
210 done |
211 |
211 |
212 exit 0 |
212 exit 0 |
|
213 elif test "x$DEVKIT_VS_VERSION" != x; then |
|
214 VS_VERSION=$DEVKIT_VS_VERSION |
|
215 TOOLCHAIN_VERSION=$VS_VERSION |
|
216 eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}" |
|
217 eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}" |
|
218 eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}" |
|
219 eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}" |
|
220 eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}" |
|
221 VS_PATH="$TOOLCHAIN_PATH:$PATH" |
|
222 |
|
223 # Convert DEVKIT_VS_INCLUDE into windows style VS_INCLUDE so that it |
|
224 # can still be exported as INCLUDE for compiler invocations without |
|
225 # SYSROOT_CFLAGS |
|
226 OLDIFS="$IFS" |
|
227 IFS=";" |
|
228 for i in $DEVKIT_VS_INCLUDE; do |
|
229 ipath=$i |
|
230 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([ipath]) |
|
231 VS_INCLUDE="$VS_INCLUDE;$ipath" |
|
232 done |
|
233 # Convert DEVKIT_VS_LIB into VS_LIB so that it can still be exported |
|
234 # as LIB for compiler invocations without SYSROOT_LDFLAGS |
|
235 for i in $DEVKIT_VS_LIB; do |
|
236 libpath=$i |
|
237 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([libpath]) |
|
238 VS_LIB="$VS_LIB;$libpath" |
|
239 done |
|
240 IFS="$OLDIFS" |
|
241 |
|
242 AC_MSG_NOTICE([Found devkit $VS_DESCRIPTION]) |
|
243 |
213 elif test "x$with_toolchain_version" != x; then |
244 elif test "x$with_toolchain_version" != x; then |
214 # User override; check that it is valid |
245 # User override; check that it is valid |
215 if test "x${VALID_VS_VERSIONS/$with_toolchain_version/}" = "x${VALID_VS_VERSIONS}"; then |
246 if test "x${VALID_VS_VERSIONS/$with_toolchain_version/}" = "x${VALID_VS_VERSIONS}"; then |
216 AC_MSG_NOTICE([Visual Studio version $with_toolchain_version is not valid.]) |
247 AC_MSG_NOTICE([Visual Studio version $with_toolchain_version is not valid.]) |
217 AC_MSG_NOTICE([Valid Visual Studio versions: $VALID_VS_VERSIONS.]) |
248 AC_MSG_NOTICE([Valid Visual Studio versions: $VALID_VS_VERSIONS.]) |
260 fi |
291 fi |
261 |
292 |
262 # First-hand choice is to locate and run the vsvars bat file. |
293 # First-hand choice is to locate and run the vsvars bat file. |
263 TOOLCHAIN_FIND_VISUAL_STUDIO |
294 TOOLCHAIN_FIND_VISUAL_STUDIO |
264 |
295 |
265 if test "x$VS_ENV_CMD" != x; then |
296 # If we have a devkit, skip all of the below. |
266 # We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file. |
297 if test "x$DEVKIT_VS_VERSION" = x; then |
267 BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD) |
298 if test "x$VS_ENV_CMD" != x; then |
268 |
299 # We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file. |
269 # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat |
300 BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD) |
270 AC_MSG_NOTICE([Trying to extract Visual Studio environment variables]) |
301 |
271 |
302 # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat |
272 # We need to create a couple of temporary files. |
303 AC_MSG_NOTICE([Trying to extract Visual Studio environment variables]) |
273 VS_ENV_TMP_DIR="$OUTPUT_ROOT/vs-env" |
304 |
274 $MKDIR -p $VS_ENV_TMP_DIR |
305 # We need to create a couple of temporary files. |
275 |
306 VS_ENV_TMP_DIR="$OUTPUT_ROOT/vs-env" |
276 # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment). |
307 $MKDIR -p $VS_ENV_TMP_DIR |
277 # Instead create a shell script which will set the relevant variables when run. |
308 |
278 WINPATH_VS_ENV_CMD="$VS_ENV_CMD" |
309 # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment). |
279 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD]) |
310 # Instead create a shell script which will set the relevant variables when run. |
280 WINPATH_BASH="$BASH" |
311 WINPATH_VS_ENV_CMD="$VS_ENV_CMD" |
281 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH]) |
312 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD]) |
282 |
313 WINPATH_BASH="$BASH" |
283 # Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell |
314 BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH]) |
284 # script (executable by bash) that will setup the important variables. |
315 |
285 EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat" |
316 # Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell |
286 $ECHO "@echo off" > $EXTRACT_VC_ENV_BAT_FILE |
317 # script (executable by bash) that will setup the important variables. |
287 # This will end up something like: |
318 EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat" |
288 # call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat |
319 $ECHO "@echo off" > $EXTRACT_VC_ENV_BAT_FILE |
289 $ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE |
320 # This will end up something like: |
290 # These will end up something like: |
321 # call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat |
291 # C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh |
322 $ECHO "call $WINPATH_VS_ENV_CMD $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE |
292 # The trailing space for everyone except PATH is no typo, but is needed due |
323 # These will end up something like: |
293 # to trailing \ in the Windows paths. These will be stripped later. |
324 # C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh |
294 $ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE |
325 # The trailing space for everyone except PATH is no typo, but is needed due |
295 $ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE |
326 # to trailing \ in the Windows paths. These will be stripped later. |
296 $ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE |
327 $ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' \ |
297 $ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE |
328 >> $EXTRACT_VC_ENV_BAT_FILE |
298 $ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE |
329 $ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE \" >> set-vs-env.sh' \ |
299 $ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' >> $EXTRACT_VC_ENV_BAT_FILE |
330 >> $EXTRACT_VC_ENV_BAT_FILE |
300 |
331 $ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB \" >> set-vs-env.sh' \ |
301 # Now execute the newly created bat file. |
332 >> $EXTRACT_VC_ENV_BAT_FILE |
302 # The | cat is to stop SetEnv.Cmd to mess with system colors on msys. |
333 $ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' \ |
303 # Change directory so we don't need to mess with Windows paths in redirects. |
334 >> $EXTRACT_VC_ENV_BAT_FILE |
304 cd $VS_ENV_TMP_DIR |
335 $ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' \ |
305 cmd /c extract-vs-env.bat | $CAT |
336 >> $EXTRACT_VC_ENV_BAT_FILE |
306 cd $CURDIR |
337 $ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' \ |
307 |
338 >> $EXTRACT_VC_ENV_BAT_FILE |
308 if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then |
339 |
309 AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.]) |
340 # Now execute the newly created bat file. |
310 AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation]) |
341 # The | cat is to stop SetEnv.Cmd to mess with system colors on msys. |
311 AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.]) |
342 # Change directory so we don't need to mess with Windows paths in redirects. |
312 AC_MSG_ERROR([Cannot continue]) |
343 cd $VS_ENV_TMP_DIR |
313 fi |
344 cmd /c extract-vs-env.bat | $CAT |
314 |
345 cd $CURDIR |
315 # Now set all paths and other env variables. This will allow the rest of |
346 |
316 # the configure script to find and run the compiler in the proper way. |
347 if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then |
317 AC_MSG_NOTICE([Setting extracted environment variables]) |
348 AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.]) |
318 . $VS_ENV_TMP_DIR/set-vs-env.sh |
349 AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation]) |
319 # Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we |
350 AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.]) |
320 # also define VCINSTALLDIR, WindowsSdkDir and WINDOWSSDKDIR. |
351 AC_MSG_ERROR([Cannot continue]) |
321 else |
352 fi |
322 # We did not find a vsvars bat file, let's hope we are run from a VS command prompt. |
353 |
323 AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment]) |
354 # Now set all paths and other env variables. This will allow the rest of |
|
355 # the configure script to find and run the compiler in the proper way. |
|
356 AC_MSG_NOTICE([Setting extracted environment variables]) |
|
357 . $VS_ENV_TMP_DIR/set-vs-env.sh |
|
358 # Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we |
|
359 # also define VCINSTALLDIR, WindowsSdkDir and WINDOWSSDKDIR. |
|
360 else |
|
361 # We did not find a vsvars bat file, let's hope we are run from a VS command prompt. |
|
362 AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment]) |
|
363 fi |
324 fi |
364 fi |
325 |
365 |
326 # At this point, we should have correct variables in the environment, or we can't continue. |
366 # At this point, we should have correct variables in the environment, or we can't continue. |
327 AC_MSG_CHECKING([for Visual Studio variables]) |
367 AC_MSG_CHECKING([for Visual Studio variables]) |
328 |
368 |
329 if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x || test "x$WINDOWSSDKDIR" != x; then |
369 if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x \ |
|
370 || test "x$WINDOWSSDKDIR" != x || test "x$DEVKIT_NAME" != x; then |
330 if test "x$VS_INCLUDE" = x || test "x$VS_LIB" = x; then |
371 if test "x$VS_INCLUDE" = x || test "x$VS_LIB" = x; then |
331 AC_MSG_RESULT([present but broken]) |
372 AC_MSG_RESULT([present but broken]) |
332 AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.]) |
373 AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.]) |
333 else |
374 else |
334 AC_MSG_RESULT([ok]) |
375 AC_MSG_RESULT([ok]) |
479 if test "x$MSVC_DLL" = x; then |
520 if test "x$MSVC_DLL" = x; then |
480 AC_MSG_CHECKING([for $DLL_NAME]) |
521 AC_MSG_CHECKING([for $DLL_NAME]) |
481 AC_MSG_RESULT([no]) |
522 AC_MSG_RESULT([no]) |
482 AC_MSG_ERROR([Could not find $DLL_NAME. Please specify using --with-msvcr-dll.]) |
523 AC_MSG_ERROR([Could not find $DLL_NAME. Please specify using --with-msvcr-dll.]) |
483 fi |
524 fi |
484 |
|
485 $1=$MSVC_DLL |
|
486 BASIC_FIXUP_PATH($1) |
|
487 AC_SUBST($1, [$]$1) |
|
488 ]) |
525 ]) |
489 |
526 |
490 AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS], |
527 AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS], |
491 [ |
528 [ |
492 AC_ARG_WITH(msvcr-dll, [AS_HELP_STRING([--with-msvcr-dll], |
529 AC_ARG_WITH(msvcr-dll, [AS_HELP_STRING([--with-msvcr-dll], |
493 [path to microsoft C runtime dll (msvcr*.dll) (Windows only) @<:@probed@:>@])]) |
530 [path to microsoft C runtime dll (msvcr*.dll) (Windows only) @<:@probed@:>@])]) |
494 |
531 |
495 if test "x$with_msvcr_dll" != x; then |
532 if test "x$with_msvcr_dll" != x; then |
496 # If given explicitely by user, do not probe. If not present, fail directly. |
533 # If given explicitely by user, do not probe. If not present, fail directly. |
497 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$with_msvcr_dll], |
534 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$with_msvcr_dll], [--with-msvcr-dll]) |
498 [--with-msvcr-dll]) |
|
499 if test "x$MSVC_DLL" = x; then |
535 if test "x$MSVC_DLL" = x; then |
500 AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by --with-msvcr-dll]) |
536 AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by --with-msvcr-dll]) |
501 fi |
537 fi |
|
538 MSVCR_DLL="$MSVC_DLL" |
|
539 elif test "x$DEVKIT_MSVCR_DLL" != x; then |
|
540 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCR_NAME, [$DEVKIT_MSVCR_DLL], [devkit]) |
|
541 if test "x$MSVC_DLL" = x; then |
|
542 AC_MSG_ERROR([Could not find a proper $MSVCR_NAME as specified by devkit]) |
|
543 fi |
|
544 MSVCR_DLL="$MSVC_DLL" |
502 else |
545 else |
503 TOOLCHAIN_SETUP_MSVC_DLL([MSVCR_DLL], [${MSVCR_NAME}]) |
546 TOOLCHAIN_SETUP_MSVC_DLL([${MSVCR_NAME}]) |
504 fi |
547 MSVCR_DLL="$MSVC_DLL" |
|
548 fi |
|
549 AC_SUBST(MSVCR_DLL) |
505 |
550 |
506 AC_ARG_WITH(msvcp-dll, [AS_HELP_STRING([--with-msvcp-dll], |
551 AC_ARG_WITH(msvcp-dll, [AS_HELP_STRING([--with-msvcp-dll], |
507 [path to microsoft C++ runtime dll (msvcp*.dll) (Windows only) @<:@probed@:>@])]) |
552 [path to microsoft C++ runtime dll (msvcp*.dll) (Windows only) @<:@probed@:>@])]) |
508 |
553 |
509 if test "x$MSVCP_NAME" != "x"; then |
554 if test "x$MSVCP_NAME" != "x"; then |
510 if test "x$with_msvcp_dll" != x; then |
555 if test "x$with_msvcp_dll" != x; then |
511 # If given explicitely by user, do not probe. If not present, fail directly. |
556 # If given explicitely by user, do not probe. If not present, fail directly. |
512 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$with_msvcp_dll], |
557 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$with_msvcp_dll], [--with-msvcp-dll]) |
513 [--with-msvcp-dll]) |
|
514 if test "x$MSVC_DLL" = x; then |
558 if test "x$MSVC_DLL" = x; then |
515 AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by --with-msvcp-dll]) |
559 AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by --with-msvcp-dll]) |
516 fi |
560 fi |
517 else |
561 MSVCP_DLL="$MSVC_DLL" |
518 TOOLCHAIN_SETUP_MSVC_DLL([MSVCP_DLL], [${MSVCP_NAME}]) |
562 elif test "x$DEVKIT_MSVCP_DLL" != x; then |
519 fi |
563 TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($MSVCP_NAME, [$DEVKIT_MSVCP_DLL], [devkit]) |
520 fi |
564 if test "x$MSVC_DLL" = x; then |
521 ]) |
565 AC_MSG_ERROR([Could not find a proper $MSVCP_NAME as specified by devkit]) |
522 |
566 fi |
|
567 MSVCP_DLL="$MSVC_DLL" |
|
568 else |
|
569 TOOLCHAIN_SETUP_MSVC_DLL([${MSVCP_NAME}]) |
|
570 MSVCP_DLL="$MSVC_DLL" |
|
571 fi |
|
572 AC_SUBST(MSVCP_DLL) |
|
573 fi |
|
574 ]) |
|
575 |