9a87413984d19ea70b84e0752a570e77f3dac470
[platform/upstream/cmake.git] / bootstrap
1 #!/bin/sh
2 # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
3 # file Copyright.txt or https://cmake.org/licensing for details.
4
5 die() {
6   echo "$@" 1>&2 ; exit 1
7 }
8
9 # Compile flag extraction function.
10 cmake_extract_standard_flags()
11 {
12   id="${1:-*}"
13   lang="${2}"
14   ver="${3}"
15   sed -n "s/ *set *( *CMAKE_${lang}${ver}_EXTENSION_COMPILE_OPTION *\"\{0,1\}\([^\")]*\).*/\1/p" \
16     "${cmake_source_dir}/Modules/Compiler/"${id}-${lang}.cmake \
17     2>/dev/null | tr ';' ' '
18   # Clang's CXX compiler flags are in the common module.
19   sed -n "s/ *set *( *CMAKE_\\\${lang}${ver}_EXTENSION_COMPILE_OPTION *\"\{0,1\}\([^\")]*\).*/\1/p" \
20     "${cmake_source_dir}/Modules/Compiler/Clang.cmake" \
21     2>/dev/null | tr ';' ' '
22 }
23
24 # Version number extraction function.
25 cmake_version_component()
26 {
27   sed -n "
28 /^set(CMake_VERSION_${1}/ {s/set(CMake_VERSION_${1} *\([0-9]*\)).*/\1/;p;}
29 " "${cmake_source_dir}/Source/CMakeVersion.cmake"
30 }
31
32 # Install destination extraction function.
33 cmake_install_dest_default()
34 {
35   sed -n '
36 /^ *set(CMAKE_'"${1}"'_DIR_DEFAULT.*) # '"${2}"'$/ {
37   s/^ *set(CMAKE_'"${1}"'_DIR_DEFAULT *"\([^"]*\)").*$/\1/
38   s/${CMake_VERSION_MAJOR}/'"${cmake_version_major}"'/
39   s/${CMake_VERSION_MINOR}/'"${cmake_version_minor}"'/
40   s/${CMake_VERSION_PATCH}/'"${cmake_version_patch}"'/
41   p
42   q
43 }
44 ' "${cmake_source_dir}/Source/CMakeInstallDestinations.cmake"
45 }
46
47 cmake_toupper()
48 {
49     echo "$1" | tr '[a-z]' '[A-Z]'
50 }
51
52 # Detect system and directory information.
53 cmake_system=`uname`
54 cmake_source_dir=`cd "\`dirname \"$0\"\`";pwd`
55 cmake_binary_dir=`pwd`
56
57 # Load version information.
58 cmake_version_major="`cmake_version_component MAJOR`"
59 cmake_version_minor="`cmake_version_component MINOR`"
60 cmake_version_patch="`cmake_version_component PATCH`"
61 cmake_version="${cmake_version_major}.${cmake_version_minor}.${cmake_version_patch}"
62 cmake_version_rc="`cmake_version_component RC`"
63 if test "$cmake_version_rc" != ""; then
64   cmake_version="${cmake_version}-rc${cmake_version_rc}"
65 fi
66
67 cmake_copyright="`grep '^Copyright .* Kitware' "${cmake_source_dir}/Copyright.txt"`"
68
69 cmake_bin_dir_keyword="OTHER"
70 cmake_data_dir_keyword="OTHER"
71 cmake_doc_dir_keyword="OTHER"
72 cmake_man_dir_keyword="OTHER"
73 cmake_xdgdata_dir_keyword="OTHER"
74 cmake_bin_dir=""
75 cmake_data_dir=""
76 cmake_doc_dir=""
77 cmake_man_dir=""
78 cmake_xdgdata_dir=""
79 cmake_init_file=""
80 cmake_bootstrap_system_libs=""
81 cmake_bootstrap_qt_gui=""
82 cmake_bootstrap_qt_qmake=""
83 cmake_sphinx_info=""
84 cmake_sphinx_man=""
85 cmake_sphinx_html=""
86 cmake_sphinx_qthelp=""
87 cmake_sphinx_latexpdf=""
88 cmake_sphinx_build=""
89 cmake_sphinx_flags=""
90
91 # Determine whether this is a Cygwin environment.
92 if echo "${cmake_system}" | grep CYGWIN >/dev/null 2>&1; then
93   cmake_system_cygwin=true
94   cmake_doc_dir_keyword="CYGWIN"
95   cmake_man_dir_keyword="CYGWIN"
96 else
97   cmake_system_cygwin=false
98 fi
99
100 # Determine whether this is a MSYS environment.
101 if echo "${cmake_system}" | grep MSYS >/dev/null 2>&1; then
102   cmake_system_msys=true
103   cmake_doc_dir_keyword="MSYS"
104   cmake_man_dir_keyword="MSYS"
105 else
106   cmake_system_msys=false
107 fi
108
109 # Determine whether this is a MinGW environment.
110 if echo "${cmake_system}" | grep 'MINGW' >/dev/null 2>&1; then
111   cmake_system_mingw=true
112 else
113   cmake_system_mingw=false
114 fi
115
116 # Determine whether this is OS X
117 if echo "${cmake_system}" | grep Darwin >/dev/null 2>&1; then
118   cmake_system_darwin=true
119 else
120   cmake_system_darwin=false
121 fi
122
123 # Determine whether this is BeOS
124 if echo "${cmake_system}" | grep BeOS >/dev/null 2>&1; then
125   cmake_system_beos=true
126   cmake_doc_dir_keyword="HAIKU"
127   cmake_man_dir_keyword="HAIKU"
128 else
129   cmake_system_beos=false
130 fi
131
132 # Determine whether this is Haiku
133 if echo "${cmake_system}" | grep Haiku >/dev/null 2>&1; then
134   cmake_system_haiku=true
135   cmake_doc_dir_keyword="HAIKU"
136   cmake_man_dir_keyword="HAIKU"
137 else
138   cmake_system_haiku=false
139 fi
140
141 # Determine whether this is OpenVMS
142 if echo "${cmake_system}" | grep OpenVMS >/dev/null 2>&1; then
143   cmake_system_openvms=true
144 else
145   cmake_system_openvms=false
146 fi
147
148 # Determine whether this is HP-UX
149 if echo "${cmake_system}" | grep HP-UX >/dev/null 2>&1; then
150   die 'CMake no longer compiles on HP-UX.  See
151
152   https://gitlab.kitware.com/cmake/cmake/-/issues/17137
153
154 Use CMake 3.9 or lower instead.'
155   cmake_system_hpux=true
156 else
157   cmake_system_hpux=false
158 fi
159
160 # Determine whether this is AIX
161 if echo "${cmake_system}" | grep AIX >/dev/null 2>&1; then
162   cmake_system_aix=true
163 else
164   cmake_system_aix=false
165 fi
166
167 # Determine whether this is Linux
168 if echo "${cmake_system}" | grep Linux >/dev/null 2>&1; then
169   cmake_system_linux=true
170 else
171   cmake_system_linux=false
172 fi
173
174 # Determine whether this is a PA-RISC machine
175 # This only works for Linux or HP-UX, not other PA-RISC OSs (BSD maybe?). Also
176 # may falsely detect parisc on HP-UX m68k
177 cmake_machine_parisc=false
178 if ${cmake_system_linux}; then
179   if uname -m | grep parisc >/dev/null 2>&1; then
180     cmake_machine_parisc=true
181   fi
182 elif ${cmake_system_hpux}; then
183   if uname -m | grep ia64 >/dev/null 2>&1; then : ; else
184     cmake_machine_parisc=true
185   fi
186 fi
187
188 # Choose the generator to use for bootstrapping.
189 if ${cmake_system_mingw}; then
190   # Bootstrapping from an MSYS prompt.
191   cmake_bootstrap_generator="MSYS Makefiles"
192 else
193   # Bootstrapping from a standard UNIX prompt.
194   cmake_bootstrap_generator="Unix Makefiles"
195 fi
196
197 # Choose tools and extensions for this platform.
198 if ${cmake_system_openvms}; then
199   _tmp="_tmp"
200   _cmk="_cmk"
201   _diff=`which diff`
202 else
203   _tmp=".tmp"
204   _cmk=".cmk"
205   _diff="diff"
206 fi
207
208 # Construct bootstrap directory name.
209 cmake_bootstrap_dir="${cmake_binary_dir}/Bootstrap${_cmk}"
210
211 # Helper function to fix windows paths.
212 case "${cmake_system}" in
213 *MINGW*)
214   cmake_fix_slashes()
215   {
216     cmd //c echo "$(echo "$1" | sed 's/\\/\//g')" | sed 's/^"//;s/" *$//'
217   }
218   ;;
219 *)
220   cmake_fix_slashes()
221   {
222     echo "$1" | sed 's/\\/\//g'
223   }
224   ;;
225 esac
226
227 # Choose the default install prefix.
228 if ${cmake_system_mingw}; then
229   if test "x${PROGRAMFILES}" != "x"; then
230     cmake_default_prefix=`cmake_fix_slashes "${PROGRAMFILES}/CMake"`
231   elif test "x${ProgramFiles}" != "x"; then
232     cmake_default_prefix=`cmake_fix_slashes "${ProgramFiles}/CMake"`
233   elif test "x${SYSTEMDRIVE}" != "x"; then
234     cmake_default_prefix=`cmake_fix_slashes "${SYSTEMDRIVE}/Program Files/CMake"`
235   elif test "x${SystemDrive}" != "x"; then
236     cmake_default_prefix=`cmake_fix_slashes "${SystemDrive}/Program Files/CMake"`
237   else
238     cmake_default_prefix="c:/Program Files/CMake"
239   fi
240 elif ${cmake_system_haiku}; then
241   cmake_default_prefix=`finddir B_COMMON_DIRECTORY`
242 else
243   cmake_default_prefix="/usr/local"
244 fi
245
246 # Lookup default install destinations.
247 cmake_bin_dir_default="`cmake_install_dest_default BIN ${cmake_bin_dir_keyword}`"
248 cmake_data_dir_default="`cmake_install_dest_default DATA ${cmake_data_dir_keyword}`"
249 cmake_doc_dir_default="`cmake_install_dest_default DOC ${cmake_doc_dir_keyword}`"
250 cmake_man_dir_default="`cmake_install_dest_default MAN ${cmake_man_dir_keyword}`"
251 cmake_xdgdata_dir_default="`cmake_install_dest_default XDGDATA ${cmake_xdgdata_dir_keyword}`"
252
253 CMAKE_KNOWN_C_COMPILERS="cc gcc clang xlc icc tcc"
254 CMAKE_KNOWN_CXX_COMPILERS="aCC xlC CC g++ clang++ c++ icc como "
255 CMAKE_KNOWN_MAKE_PROCESSORS="gmake make smake"
256 CMAKE_KNOWN_NINJA_PROCESSORS="ninja-build ninja samu"
257
258 CMAKE_PROBLEMATIC_FILES="\
259   CMakeCache.txt \
260   CMakeSystem.cmake \
261   CMakeCCompiler.cmake \
262   CMakeCXXCompiler.cmake \
263   */CMakeSystem.cmake \
264   */CMakeCCompiler.cmake \
265   */CMakeCXXCompiler.cmake \
266   Source/cmConfigure.h \
267   Source/CTest/Curl/config.h \
268   Utilities/cmThirdParty.h \
269   Utilities/cmcurl/lib/curl_config.h \
270   Utilities/cmlibarchive/config.h \
271   Utilities/cmliblzma/config.h \
272   Utilities/cmnghttp2/config.h \
273   "
274
275 CMAKE_UNUSED_SOURCES="\
276   cmGlobalXCodeGenerator \
277   cmLocalXCodeGenerator \
278   cmXCodeObject \
279   cmXCode21Object \
280   cmSourceGroup \
281 "
282
283 CMAKE_CXX_SOURCES="\
284   cmAddCustomCommandCommand \
285   cmAddCustomTargetCommand \
286   cmAddDefinitionsCommand \
287   cmAddDependenciesCommand \
288   cmAddExecutableCommand \
289   cmAddLibraryCommand \
290   cmAddSubDirectoryCommand \
291   cmAddTestCommand \
292   cmArgumentParser \
293   cmBinUtilsLinker \
294   cmBinUtilsLinuxELFGetRuntimeDependenciesTool \
295   cmBinUtilsLinuxELFLinker \
296   cmBinUtilsLinuxELFObjdumpGetRuntimeDependenciesTool \
297   cmBinUtilsMacOSMachOGetRuntimeDependenciesTool \
298   cmBinUtilsMacOSMachOLinker \
299   cmBinUtilsMacOSMachOOToolGetRuntimeDependenciesTool \
300   cmBinUtilsWindowsPEGetRuntimeDependenciesTool \
301   cmBinUtilsWindowsPEDumpbinGetRuntimeDependenciesTool \
302   cmBinUtilsWindowsPELinker \
303   cmBinUtilsWindowsPEObjdumpGetRuntimeDependenciesTool \
304   cmBreakCommand \
305   cmBuildCommand \
306   cmCMakeLanguageCommand \
307   cmCMakeMinimumRequired \
308   cmCMakePath \
309   cmCMakePathCommand \
310   cmCMakePolicyCommand \
311   cmCPackPropertiesGenerator \
312   cmCacheManager \
313   cmCommand \
314   cmCommandArgumentParserHelper \
315   cmCommands \
316   cmCommonTargetGenerator \
317   cmComputeComponentGraph \
318   cmComputeLinkDepends \
319   cmComputeLinkInformation \
320   cmComputeTargetDepends \
321   cmConsoleBuf \
322   cmConditionEvaluator \
323   cmConfigureFileCommand \
324   cmContinueCommand \
325   cmCoreTryCompile \
326   cmCreateTestSourceList \
327   cmCryptoHash \
328   cmCustomCommand \
329   cmCustomCommandGenerator \
330   cmCustomCommandLines \
331   cmDefinePropertyCommand \
332   cmDefinitions \
333   cmDocumentationFormatter \
334   cmELF \
335   cmEnableLanguageCommand \
336   cmEnableTestingCommand \
337   cmExecProgramCommand \
338   cmExecuteProcessCommand \
339   cmExpandedCommandArgument \
340   cmExportBuildFileGenerator \
341   cmExportFileGenerator \
342   cmExportInstallFileGenerator \
343   cmExportSet \
344   cmExportTryCompileFileGenerator \
345   cmExprParserHelper \
346   cmExternalMakefileProjectGenerator \
347   cmFileCommand \
348   cmFileCopier \
349   cmFileInstaller \
350   cmFileSet \
351   cmFileTime \
352   cmFileTimeCache \
353   cmFileTimes \
354   cmFindBase \
355   cmFindCommon \
356   cmFindFileCommand \
357   cmFindLibraryCommand \
358   cmFindPackageCommand \
359   cmFindPathCommand \
360   cmFindProgramCommand \
361   cmForEachCommand \
362   cmFunctionBlocker \
363   cmFunctionCommand \
364   cmFSPermissions \
365   cmGeneratedFileStream \
366   cmGeneratorExpression \
367   cmGeneratorExpressionContext \
368   cmGeneratorExpressionDAGChecker \
369   cmGeneratorExpressionEvaluationFile \
370   cmGeneratorExpressionEvaluator \
371   cmGeneratorExpressionLexer \
372   cmGeneratorExpressionNode \
373   cmGeneratorExpressionParser \
374   cmGeneratorTarget \
375   cmGetCMakePropertyCommand \
376   cmGetDirectoryPropertyCommand \
377   cmGetFilenameComponentCommand \
378   cmGetPipes \
379   cmGetPropertyCommand \
380   cmGetSourceFilePropertyCommand \
381   cmGetTargetPropertyCommand \
382   cmGetTestPropertyCommand \
383   cmGlobalCommonGenerator \
384   cmGlobalGenerator \
385   cmGlobVerificationManager \
386   cmHexFileConverter \
387   cmIfCommand \
388   cmIncludeCommand \
389   cmIncludeGuardCommand \
390   cmIncludeDirectoryCommand \
391   cmIncludeRegularExpressionCommand \
392   cmInstallCommand \
393   cmInstallCommandArguments \
394   cmInstallDirectoryGenerator \
395   cmInstallExportGenerator \
396   cmInstallFileSetGenerator \
397   cmInstallFilesCommand \
398   cmInstallFilesGenerator \
399   cmInstallGenerator \
400   cmInstallGetRuntimeDependenciesGenerator \
401   cmInstallImportedRuntimeArtifactsGenerator \
402   cmInstallRuntimeDependencySet \
403   cmInstallRuntimeDependencySetGenerator \
404   cmInstallScriptGenerator \
405   cmInstallSubdirectoryGenerator \
406   cmInstallTargetGenerator \
407   cmInstallTargetsCommand \
408   cmInstalledFile \
409   cmLDConfigLDConfigTool \
410   cmLDConfigTool \
411   cmLinkDirectoriesCommand \
412   cmLinkItem \
413   cmLinkItemGraphVisitor \
414   cmLinkLineComputer \
415   cmLinkLineDeviceComputer \
416   cmListCommand \
417   cmListFileCache \
418   cmLocalCommonGenerator \
419   cmLocalGenerator \
420   cmMSVC60LinkLineComputer \
421   cmMacroCommand \
422   cmMakeDirectoryCommand \
423   cmMakefile \
424   cmMarkAsAdvancedCommand \
425   cmMathCommand \
426   cmMessageCommand \
427   cmMessenger \
428   cmNewLineStyle \
429   cmOSXBundleGenerator \
430   cmOptionCommand \
431   cmOrderDirectories \
432   cmOutputConverter \
433   cmParseArgumentsCommand \
434   cmPathLabel \
435   cmPolicies \
436   cmProcessOutput \
437   cmProjectCommand \
438   cmValue \
439   cmPropertyDefinition \
440   cmPropertyMap \
441   cmGccDepfileLexerHelper \
442   cmGccDepfileReader \
443   cmReturnCommand \
444   cmPlaceholderExpander \
445   cmRulePlaceholderExpander \
446   cmRuntimeDependencyArchive \
447   cmScriptGenerator \
448   cmSearchPath \
449   cmSeparateArgumentsCommand \
450   cmSetCommand \
451   cmSetDirectoryPropertiesCommand \
452   cmSetPropertyCommand \
453   cmSetSourceFilesPropertiesCommand \
454   cmSetTargetPropertiesCommand \
455   cmSetTestsPropertiesCommand \
456   cmSiteNameCommand \
457   cmSourceFile \
458   cmSourceFileLocation \
459   cmStandardLevelResolver \
460   cmState \
461   cmStateDirectory \
462   cmStateSnapshot \
463   cmString \
464   cmStringAlgorithms \
465   cmStringReplaceHelper \
466   cmStringCommand \
467   cmSubcommandTable \
468   cmSubdirCommand \
469   cmSystemTools \
470   cmTarget \
471   cmTargetCompileDefinitionsCommand \
472   cmTargetCompileFeaturesCommand \
473   cmTargetCompileOptionsCommand \
474   cmTargetIncludeDirectoriesCommand \
475   cmTargetLinkLibrariesCommand \
476   cmTargetLinkOptionsCommand \
477   cmTargetPrecompileHeadersCommand \
478   cmTargetPropCommandBase \
479   cmTargetPropertyComputer \
480   cmTargetSourcesCommand \
481   cmTest \
482   cmTestGenerator \
483   cmTimestamp \
484   cmTransformDepfile \
485   cmTryCompileCommand \
486   cmTryRunCommand \
487   cmUnsetCommand \
488   cmUVHandlePtr \
489   cmUVProcessChain \
490   cmVersion \
491   cmWhileCommand \
492   cmWindowsRegistry \
493   cmWorkingDirectory \
494   cmake  \
495   cmakemain \
496   cmcmd  \
497 "
498
499 if ${cmake_system_mingw}; then
500   CMAKE_CXX_SOURCES="${CMAKE_CXX_SOURCES}\
501     cmGlobalMSYSMakefileGenerator \
502     cmGlobalMinGWMakefileGenerator \
503     cmVSSetupHelper \
504   "
505 fi
506
507 CMAKE_STD_CXX_HEADERS="\
508   filesystem \
509   memory \
510   optional \
511   shared_mutex \
512   string_view \
513   utility \
514 "
515 CMAKE_STD_CXX_SOURCES="\
516   fs_path \
517   string_view \
518 "
519
520 LexerParser_CXX_SOURCES="\
521   cmCommandArgumentLexer \
522   cmCommandArgumentParser \
523   cmExprLexer \
524   cmExprParser \
525   cmGccDepfileLexer \
526 "
527
528 LexerParser_C_SOURCES="\
529   cmListFileLexer \
530 "
531
532 if ${cmake_system_mingw}; then
533   KWSYS_C_SOURCES="\
534     EncodingC \
535     ProcessWin32 \
536     String \
537     System \
538     Terminal"
539 else
540   KWSYS_C_SOURCES="\
541     EncodingC \
542     ProcessUNIX \
543     String \
544     System \
545     Terminal"
546 fi
547
548 KWSYS_CXX_SOURCES="\
549   Directory \
550   EncodingCXX \
551   FStream \
552   Glob \
553   RegularExpression \
554   Status \
555   SystemTools"
556
557 KWSYS_FILES="\
558   Directory.hxx \
559   Encoding.h \
560   Encoding.hxx \
561   FStream.hxx \
562   Glob.hxx \
563   Process.h \
564   RegularExpression.hxx \
565   Status.hxx \
566   String.h \
567   String.hxx \
568   System.h \
569   SystemTools.hxx \
570   Terminal.h"
571
572 LIBRHASH_C_SOURCES="\
573   librhash/algorithms.c \
574   librhash/byte_order.c \
575   librhash/hex.c \
576   librhash/md5.c \
577   librhash/rhash.c \
578   librhash/sha1.c \
579   librhash/sha256.c \
580   librhash/sha3.c \
581   librhash/sha512.c \
582   "
583
584 if ${cmake_system_mingw}; then
585   LIBUV_C_SOURCES="\
586     src/fs-poll.c \
587     src/idna.c
588     src/inet.c \
589     src/threadpool.c \
590     src/strscpy.c \
591     src/timer.c \
592     src/uv-common.c \
593     src/win/async.c \
594     src/win/core.c \
595     src/win/detect-wakeup.c \
596     src/win/dl.c \
597     src/win/error.c \
598     src/win/fs-event.c \
599     src/win/fs.c \
600     src/win/getaddrinfo.c \
601     src/win/getnameinfo.c \
602     src/win/handle.c \
603     src/win/loop-watcher.c \
604     src/win/pipe.c \
605     src/win/poll.c \
606     src/win/process-stdio.c \
607     src/win/process.c \
608     src/win/signal.c \
609     src/win/stream.c \
610     src/win/tcp.c \
611     src/win/thread.c \
612     src/win/tty.c \
613     src/win/udp.c \
614     src/win/util.c \
615     src/win/winapi.c \
616     src/win/winsock.c \
617     "
618 else
619   LIBUV_C_SOURCES="\
620     src/strscpy.c \
621     src/timer.c \
622     src/uv-common.c \
623     src/unix/cmake-bootstrap.c \
624     src/unix/core.c \
625     src/unix/fs.c \
626     src/unix/loop.c \
627     src/unix/loop-watcher.c \
628     src/unix/no-fsevents.c \
629     src/unix/pipe.c \
630     src/unix/poll.c \
631     src/unix/posix-hrtime.c \
632     src/unix/posix-poll.c \
633     src/unix/process.c \
634     src/unix/signal.c \
635     src/unix/stream.c \
636     src/unix/tcp.c \
637     "
638 fi
639
640 # Display CMake bootstrap usage
641 cmake_usage()
642 {
643 echo '
644 Usage: '"$0"' [<options>...] [-- <cmake-options>...]
645 Options: [defaults in brackets after descriptions]
646 Configuration:
647   --help                  print this message
648   --version               only print version information
649   --verbose               display more information
650   --parallel=n            bootstrap cmake in parallel, where n is
651                           number of nodes [1]
652   --generator=<generator> generator to use (MSYS Makefiles, Unix Makefiles,
653                           or Ninja)
654   --enable-ccache         Enable ccache when building cmake
655   --init=FILE             load FILE as script to populate cache
656   --system-libs           use all system-installed third-party libraries
657                           (for use only by package maintainers)
658   --no-system-libs        use all cmake-provided third-party libraries
659                           (default)
660   --system-curl           use system-installed curl library
661   --no-system-curl        use cmake-provided curl library (default)
662   --system-expat          use system-installed expat library
663   --no-system-expat       use cmake-provided expat library (default)
664   --system-jsoncpp        use system-installed jsoncpp library
665   --no-system-jsoncpp     use cmake-provided jsoncpp library (default)
666   --system-zlib           use system-installed zlib library
667   --no-system-zlib        use cmake-provided zlib library (default)
668   --system-bzip2          use system-installed bzip2 library
669   --no-system-bzip2       use cmake-provided bzip2 library (default)
670   --system-liblzma        use system-installed liblzma library
671   --no-system-liblzma     use cmake-provided liblzma library (default)
672   --system-nghttp2        use system-installed nghttp2 library
673   --no-system-nghttp2     use cmake-provided nghttp2 library (default)
674   --system-zstd           use system-installed zstd library
675   --no-system-zstd        use cmake-provided zstd library (default)
676   --system-libarchive     use system-installed libarchive library
677   --no-system-libarchive  use cmake-provided libarchive library (default)
678   --system-librhash       use system-installed librhash library
679   --no-system-librhash    use cmake-provided librhash library (default)
680   --system-libuv          use system-installed libuv library
681   --no-system-libuv       use cmake-provided libuv library (default)
682
683   --bootstrap-system-libuv use system-installed libuv library for bootstrap
684   --bootstrap-system-jsoncpp use system-installed jsoncpp library for bootstrap
685   --bootstrap-system-librhash use system-installed librhash library for bootstrap
686
687   --qt-gui                build the Qt-based GUI (requires Qt >= 4.2)
688   --no-qt-gui             do not build the Qt-based GUI (default)
689   --qt-qmake=<qmake>      use <qmake> as the qmake executable to find Qt
690
691   --sphinx-info           build Info manual with Sphinx
692   --sphinx-man            build man pages with Sphinx
693   --sphinx-html           build html help with Sphinx
694   --sphinx-qthelp         build qch help with Sphinx
695   --sphinx-latexpdf       build PDF with Sphinx using LaTeX
696   --sphinx-build=<sb>     use <sb> as the sphinx-build executable
697   --sphinx-flags=<flags>  pass <flags> to sphinx-build executable
698
699 Directory and file names:
700   --prefix=PREFIX         install files in tree rooted at PREFIX
701                           ['"${cmake_default_prefix}"']
702   --bindir=DIR            install binaries in PREFIX/DIR
703                           ['"${cmake_bin_dir_default}"']
704   --datadir=DIR           install data files in PREFIX/DIR
705                           ['"${cmake_data_dir_default}"']
706   --docdir=DIR            install documentation files in PREFIX/DIR
707                           ['"${cmake_doc_dir_default}"']
708   --mandir=DIR            install man pages files in PREFIX/DIR/manN
709                           ['"${cmake_man_dir_default}"']
710   --xdgdatadir=DIR        install XDG specific files in PREFIX/DIR
711                           ['"${cmake_xdgdata_dir_default}"']
712 '
713   exit 10
714 }
715
716 # Display CMake bootstrap usage
717 cmake_version_display()
718 {
719   echo "CMake ${cmake_version}, ${cmake_copyright}"
720 }
721
722 # Display CMake bootstrap error, display the log file and exit
723 cmake_error()
724 {
725   res=$1
726   shift 1
727   echo "---------------------------------------------"
728   echo "Error when bootstrapping CMake:"
729   echo "$*"
730   echo "---------------------------------------------"
731   if test -f cmake_bootstrap.log; then
732     echo "Log of errors: `pwd`/cmake_bootstrap.log"
733     #cat cmake_bootstrap.log
734     echo "---------------------------------------------"
735   fi
736   exit ${res}
737 }
738
739 cmake_generate_file_tmp ()
740 {
741   OUTFILE="$1"
742   TMPFILE="$2"
743   if "${_diff}" "$TMPFILE" "$OUTFILE" > /dev/null 2> /dev/null ; then
744     rm -f "$TMPFILE"
745   else
746     mv -f "$TMPFILE" "$OUTFILE"
747   fi
748 }
749
750 cmake_generate_file ()
751 {
752   OUTFILE="$1"
753   CONTENT="$2"
754   echo "$CONTENT" > "$OUTFILE.tmp"
755   cmake_generate_file_tmp "$OUTFILE" "$OUTFILE.tmp"
756 }
757
758 # Replace KWSYS_NAMESPACE with cmsys
759 cmake_replace_string ()
760 {
761   INFILE="$1"
762   OUTFILE="$2"
763   SEARCHFOR="$3"
764   REPLACEWITH="$4"
765   if test -f "${INFILE}" || ${cmake_system_openvms}; then
766     sed "s/\@${SEARCHFOR}\@/${REPLACEWITH}/g" "${INFILE}" > "${OUTFILE}${_tmp}"
767     if test -f "${OUTFILE}${_tmp}"; then
768       if "${_diff}" "${OUTFILE}" "${OUTFILE}${_tmp}" > /dev/null 2> /dev/null ; then
769         #echo "Files are the same"
770         rm -f "${OUTFILE}${_tmp}"
771       else
772         mv -f "${OUTFILE}${_tmp}" "${OUTFILE}"
773       fi
774     fi
775   else
776     cmake_error 1 "Cannot find file ${INFILE}"
777   fi
778 }
779
780 cmake_kwsys_config_replace_string ()
781 {
782   INFILE="$1"
783   OUTFILE="$2"
784   shift 2
785   APPEND="$*"
786   if test -f "${INFILE}" || ${cmake_system_openvms}; then
787     echo "${APPEND}" > "${OUTFILE}${_tmp}"
788     sed "/./ {s/\@KWSYS_NAMESPACE\@/cmsys/g;
789               s/@KWSYS_BUILD_SHARED@/${KWSYS_BUILD_SHARED}/g;
790               s/@KWSYS_LFS_AVAILABLE@/${KWSYS_LFS_AVAILABLE}/g;
791               s/@KWSYS_LFS_REQUESTED@/${KWSYS_LFS_REQUESTED}/g;
792               s/@KWSYS_NAME_IS_KWSYS@/${KWSYS_NAME_IS_KWSYS}/g;
793               s/@KWSYS_STL_HAS_WSTRING@/${KWSYS_STL_HAS_WSTRING}/g;
794               s/@KWSYS_CXX_HAS_EXT_STDIO_FILEBUF_H@/${KWSYS_CXX_HAS_EXT_STDIO_FILEBUF_H}/g;
795               s/@KWSYS_SYSTEMTOOLS_USE_TRANSLATION_MAP@/${KWSYS_SYSTEMTOOLS_USE_TRANSLATION_MAP}/g;
796              }" "${INFILE}" >> "${OUTFILE}${_tmp}"
797     if test -f "${OUTFILE}${_tmp}"; then
798       if "${_diff}" "${OUTFILE}" "${OUTFILE}${_tmp}" > /dev/null 2> /dev/null ; then
799         #echo "Files are the same"
800         rm -f "${OUTFILE}${_tmp}"
801       else
802         mv -f "${OUTFILE}${_tmp}" "${OUTFILE}"
803       fi
804     fi
805   else
806     cmake_error 2 "Cannot find file ${INFILE}"
807   fi
808 }
809 # Write string into a file
810 cmake_report ()
811 {
812   FILE=$1
813   shift
814   echo "$*" >> ${FILE}
815 }
816
817 # Escape spaces in strings for artifacts
818 cmake_escape_artifact ()
819 {
820   if test "${cmake_bootstrap_generator}" = "Ninja"; then
821     echo $1 | sed "s/ /$ /g"
822   else
823     echo $1 | sed "s/ /\\\\ /g"
824   fi
825 }
826
827 # Escape spaces in strings for shell
828 cmake_escape_shell ()
829 {
830   echo $1 | sed "s/ /\\\\ /g"
831 }
832
833 # Encode object file names.
834 cmake_obj ()
835 {
836   echo $1 | sed 's/\//-/g' | sed 's/$/\.o/'
837 }
838
839 # Strip prefix from argument
840 cmake_arg ()
841 {
842   echo "$1" | sed "s/^${2-[^=]*=}//"
843 }
844
845 # Write message to the log
846 cmake_log ()
847 {
848   echo "$*" >> cmake_bootstrap.log
849 }
850
851 # Return temp file
852 cmake_tmp_file ()
853 {
854   echo "cmake_bootstrap_$$_test"
855 }
856
857 # Run a compiler test. First argument is compiler, second one are compiler
858 # flags, third one is test source file to be compiled
859 cmake_try_run ()
860 {
861   COMPILER=$1
862   FLAGS=$2
863   TESTFILE=$3
864   if test ! -f "${TESTFILE}"; then
865     echo "Test file ${TESTFILE} missing. Please verify your CMake source tree."
866     exit 4
867   fi
868   TMPFILE=`cmake_tmp_file`
869   echo "Try: ${COMPILER}"
870   echo "Line: ${COMPILER} ${FLAGS} ${TESTFILE} -o ${TMPFILE}"
871   echo "----------  file   -----------------------"
872   cat "${TESTFILE}"
873   echo "------------------------------------------"
874   "${COMPILER}" ${FLAGS} "${TESTFILE}" -o "${TMPFILE}"
875   RES=$?
876   if test "${RES}" -ne "0"; then
877     echo "Test failed to compile"
878     return 1
879   fi
880   if test ! -f "${TMPFILE}" && test ! -f "${TMPFILE}.exe"; then
881     echo "Test failed to produce executable"
882     return 2
883   fi
884   ./${TMPFILE}
885   RES=$?
886   rm -f "${TMPFILE}"
887   if test "${RES}" -ne "0"; then
888     echo "Test produced non-zero return code"
889     return 3
890   fi
891   echo "Test succeeded"
892   return 0
893 }
894
895 # Run a make test. First argument is the make interpreter.
896 cmake_try_make ()
897 {
898   MAKE_PROC="$1"
899   MAKE_FLAGS="$2"
900   echo "Try: ${MAKE_PROC}"
901   "${MAKE_PROC}" ${MAKE_FLAGS}
902   RES=$?
903   if test "${RES}" -ne "0"; then
904     echo "${MAKE_PROC} does not work"
905     return 1
906   fi
907   if test ! -f "test" && test ! -f "test.exe"; then
908     echo "${COMPILER} does not produce output"
909     return 2
910   fi
911   ./test
912   RES=$?
913   rm -f "test"
914   if test "${RES}" -ne "0"; then
915     echo "${MAKE_PROC} produces strange executable"
916     return 3
917   fi
918   echo "${MAKE_PROC} works"
919   return 0
920 }
921
922 # Parse arguments
923 cmake_verbose=
924 cmake_parallel_make=
925 cmake_ccache_enabled=
926 cmake_prefix_dir="${cmake_default_prefix}"
927 bootstrap_system_libuv=
928 bootstrap_system_jsoncpp=
929 bootstrap_system_librhash=
930 while test $# != 0; do
931   case "$1" in
932   --prefix=*) dir=`cmake_arg "$1"`
933               cmake_prefix_dir=`cmake_fix_slashes "$dir"` ;;
934   --parallel=*) cmake_parallel_make=`cmake_arg "$1"` ;;
935   --generator=*) cmake_bootstrap_generator=`cmake_arg "$1"` ;;
936   --bindir=*) cmake_bin_dir=`cmake_arg "$1"` ;;
937   --datadir=*) cmake_data_dir=`cmake_arg "$1"` ;;
938   --docdir=*) cmake_doc_dir=`cmake_arg "$1"` ;;
939   --mandir=*) cmake_man_dir=`cmake_arg "$1"` ;;
940   --xdgdatadir=*) cmake_xdgdata_dir=`cmake_arg "$1"` ;;
941   --init=*) cmake_init_file=`cmake_arg "$1"` ;;
942   --system-libs) cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARIES=1" ;;
943   --no-system-libs) cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARIES=0" ;;
944   --system-bzip2|--system-curl|--system-expat|--system-jsoncpp|--system-libarchive|--system-librhash|--system-zlib|--system-liblzma|--system-nghttp2|--system-zstd|--system-libuv)
945     lib=`cmake_arg "$1" "--system-"`
946     cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARY_`cmake_toupper $lib`=1" ;;
947   --no-system-bzip2|--no-system-curl|--no-system-expat|--no-system-jsoncpp|--no-system-libarchive|--no-system-librhash|--no-system-zlib|--no-system-liblzma|--no-system-nghttp2|--no-system-zstd|--no-system-libuv)
948     lib=`cmake_arg "$1" "--no-system-"`
949     cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARY_`cmake_toupper $lib`=0" ;;
950   --bootstrap-system-libuv) bootstrap_system_libuv="1" ;;
951   --bootstrap-system-jsoncpp) bootstrap_system_jsoncpp="1" ;;
952   --bootstrap-system-librhash) bootstrap_system_librhash="1" ;;
953   --qt-gui) cmake_bootstrap_qt_gui="1" ;;
954   --no-qt-gui) cmake_bootstrap_qt_gui="0" ;;
955   --qt-qmake=*) cmake_bootstrap_qt_qmake=`cmake_arg "$1"` ;;
956   --sphinx-info) cmake_sphinx_info="1" ;;
957   --sphinx-man) cmake_sphinx_man="1" ;;
958   --sphinx-html) cmake_sphinx_html="1" ;;
959   --sphinx-qthelp) cmake_sphinx_qthelp="1" ;;
960   --sphinx-latexpdf) cmake_sphinx_latexpdf="1" ;;
961   --sphinx-build=*) cmake_sphinx_build=`cmake_arg "$1"` ;;
962   --sphinx-flags=*) cmake_sphinx_flags=`cmake_arg "$1"` ;;
963   --help) cmake_usage ;;
964   --version) cmake_version_display ; exit 2 ;;
965   --verbose) cmake_verbose=TRUE ;;
966   --enable-ccache) cmake_ccache_enabled=TRUE ;;
967   CC=*) CC=`cmake_arg "$1"` ;;
968   CXX=*) CXX=`cmake_arg "$1"` ;;
969   CFLAGS=*) CFLAGS=`cmake_arg "$1"` ;;
970   CXXFLAGS=*) CXXFLAGS=`cmake_arg "$1"` ;;
971   LDFLAGS=*) LDFLAGS=`cmake_arg "$1"` ;;
972   --) shift; break ;;
973   *) die "Unknown option: $1" ;;
974   esac
975   shift
976 done
977
978 # Make sure the generator is valid
979 case "${cmake_bootstrap_generator}" in
980   'MSYS Makefiles'|'Unix Makefiles'|'Ninja') ;;
981   *) cmake_error 10 "Invalid generator: ${cmake_bootstrap_generator}"
982 esac
983
984 # If verbose, display some information about bootstrap
985 if test -n "${cmake_verbose}"; then
986   echo "---------------------------------------------"
987   echo "Source directory: ${cmake_source_dir}"
988   echo "Binary directory: ${cmake_binary_dir}"
989   echo "Prefix directory: ${cmake_prefix_dir}"
990   echo "System:           ${cmake_system}"
991   echo "Generator:        ${cmake_bootstrap_generator}"
992   if test "x${cmake_parallel_make}" != "x"; then
993     echo "Doing parallel make: ${cmake_parallel_make}"
994   fi
995   echo ""
996 fi
997
998 echo "---------------------------------------------"
999 # Get CMake version
1000 echo "`cmake_version_display`"
1001
1002 # Check for in-source build
1003 cmake_in_source_build=
1004 if test -f "${cmake_binary_dir}/Source/cmake.cxx" &&
1005      test -f "${cmake_binary_dir}/Source/cmake.h"; then
1006   if test -n "${cmake_verbose}"; then
1007     echo "Warning: This is an in-source build"
1008   fi
1009   cmake_in_source_build=TRUE
1010 fi
1011
1012 # If this is not an in-source build, then Bootstrap stuff should not exist.
1013 if test -z "${cmake_in_source_build}"; then
1014   # Did somebody bootstrap in the source tree?
1015   if test -d "${cmake_source_dir}/Bootstrap${_cmk}"; then
1016     cmake_error 10 "Found directory \"${cmake_source_dir}/Bootstrap${_cmk}\".
1017 Looks like somebody did bootstrap CMake in the source tree, but now you are
1018 trying to do bootstrap in the binary tree. Please remove Bootstrap${_cmk}
1019 directory from the source tree."
1020   fi
1021   # Is there a cache in the source tree?
1022   for cmake_problematic_file in ${CMAKE_PROBLEMATIC_FILES}; do
1023     if test -f "${cmake_source_dir}/${cmake_problematic_file}"; then
1024       cmake_error 10 "Found \"${cmake_source_dir}/${cmake_problematic_file}\".
1025 Looks like somebody tried to build CMake in the source tree, but now you are
1026 trying to do bootstrap in the binary tree. Please remove \"${cmake_problematic_file}\"
1027 from the source tree."
1028     fi
1029   done
1030 fi
1031
1032 # Make bootstrap directory
1033 test -d "${cmake_bootstrap_dir}" || mkdir "${cmake_bootstrap_dir}"
1034 if test ! -d "${cmake_bootstrap_dir}"; then
1035   cmake_error 3 "Cannot create directory ${cmake_bootstrap_dir} to bootstrap CMake."
1036 fi
1037 cd "${cmake_bootstrap_dir}"
1038
1039 test -d "cmsys" || mkdir "cmsys"
1040 if test ! -d "cmsys"; then
1041   cmake_error 4 "Cannot create directory ${cmake_bootstrap_dir}/cmsys"
1042 fi
1043
1044 # Delete all the bootstrap files
1045 rm -f "${cmake_bootstrap_dir}/cmake_bootstrap.log"
1046 rm -f "${cmake_bootstrap_dir}/cmConfigure.h${_tmp}"
1047 rm -f "${cmake_bootstrap_dir}/cmVersionConfig.h${_tmp}"
1048
1049 # If building in-source, remove any cmConfigure.h that may
1050 # have been created by a previous run of the bootstrap cmake.
1051 if test -n "${cmake_in_source_build}"; then
1052   rm -f "${cmake_source_dir}/Source/cmConfigure.h"
1053 fi
1054
1055 # If exist compiler flags, set them
1056 cmake_c_flags=${CFLAGS}
1057 cmake_cxx_flags=${CXXFLAGS}
1058 cmake_ld_flags=${LDFLAGS}
1059
1060 # Add generator-specific files
1061 if test "${cmake_bootstrap_generator}" = "Ninja"; then
1062   CMAKE_CXX_SOURCES="${CMAKE_CXX_SOURCES} \
1063     cmFortranParserImpl \
1064     cmGlobalNinjaGenerator \
1065     cmLocalNinjaGenerator \
1066     cmNinjaLinkLineComputer \
1067     cmNinjaLinkLineDeviceComputer \
1068     cmNinjaNormalTargetGenerator \
1069     cmNinjaTargetGenerator \
1070     cmNinjaUtilityTargetGenerator \
1071     "
1072
1073   LexerParser_CXX_SOURCES="${LexerParser_CXX_SOURCES} \
1074     cmFortranLexer \
1075     cmFortranParser \
1076     "
1077
1078   JSONCPP_CXX_SOURCES="\
1079     src/lib_json/json_reader.cpp \
1080     src/lib_json/json_value.cpp \
1081     src/lib_json/json_writer.cpp \
1082     "
1083 else
1084   CMAKE_CXX_SOURCES="${CMAKE_CXX_SOURCES} \
1085     cmDepends \
1086     cmDependsC \
1087     cmDependsCompiler \
1088     cmGlobalUnixMakefileGenerator3 \
1089     cmLocalUnixMakefileGenerator3 \
1090     cmMakefileExecutableTargetGenerator \
1091     cmMakefileLibraryTargetGenerator \
1092     cmMakefileTargetGenerator \
1093     cmMakefileUtilityTargetGenerator \
1094     cmProcessTools \
1095     "
1096
1097   JSONCPP_CXX_SOURCES=
1098 fi
1099
1100 # Add Cygwin-specific flags
1101 if ${cmake_system_cygwin} || ${cmake_system_msys}; then
1102   cmake_ld_flags="${LDFLAGS} -Wl,--enable-auto-import"
1103 fi
1104
1105 # Add CoreFoundation framework on Darwin
1106 if ${cmake_system_darwin}; then
1107   cmake_ld_flags="${LDFLAGS} -framework CoreFoundation"
1108 fi
1109
1110 # Add BeOS toolkits...
1111 if ${cmake_system_beos}; then
1112   cmake_ld_flags="${LDFLAGS} -lroot -lbe"
1113 fi
1114
1115 # Add Haiku toolkits...
1116 if ${cmake_system_haiku}; then
1117   cmake_ld_flags="${LDFLAGS} -lroot -lbe"
1118 fi
1119
1120 # Add AIX arch-specific link flags.
1121 if ${cmake_system_aix}; then
1122   if uname -p | grep powerpc >/dev/null 2>&1; then
1123     cmake_ld_flags="${LDFLAGS} -Wl,-bbigtoc"
1124   fi
1125 fi
1126
1127 #-----------------------------------------------------------------------------
1128 # Detect known toolchains on some platforms.
1129 cmake_toolchains=''
1130 case "${cmake_system}" in
1131   *AIX*)   cmake_toolchains='XL GNU' ;;
1132   *CYGWIN*) cmake_toolchains='GNU' ;;
1133   *MSYS*) cmake_toolchains='GNU' ;;
1134   *Darwin*) cmake_toolchains='Clang GNU' ;;
1135   *Linux*) cmake_toolchains='GNU Clang XL PGI PathScale' ;;
1136   *MINGW*) cmake_toolchains='GNU' ;;
1137 esac
1138
1139 # Toolchain compiler name table.
1140 cmake_toolchain_Clang_CC='clang'
1141 cmake_toolchain_Clang_CXX='clang++'
1142 cmake_toolchain_GNU_CC='gcc'
1143 cmake_toolchain_GNU_CXX='g++'
1144 cmake_toolchain_PGI_CC='pgcc'
1145 cmake_toolchain_PGI_CXX='pgCC'
1146 cmake_toolchain_PathScale_CC='pathcc'
1147 cmake_toolchain_PathScale_CXX='pathCC'
1148 cmake_toolchain_XL_CC='xlc'
1149 cmake_toolchain_XL_CXX='xlC'
1150
1151 cmake_toolchain_try()
1152 {
1153   tc="$1"
1154   TMPFILE=`cmake_tmp_file`
1155
1156   eval "tc_CC=\${cmake_toolchain_${tc}_CC}"
1157   echo 'int main() { return 0; }' > "${TMPFILE}.c"
1158   cmake_try_run "$tc_CC" "" "${TMPFILE}.c" >> cmake_bootstrap.log 2>&1
1159   tc_result_CC="$?"
1160   rm -f "${TMPFILE}.c"
1161   test "${tc_result_CC}" = "0" || return 1
1162
1163   eval "tc_CXX=\${cmake_toolchain_${tc}_CXX}"
1164   echo 'int main() { return 0; }' > "${TMPFILE}.cpp"
1165   cmake_try_run "$tc_CXX" "" "${TMPFILE}.cpp" >> cmake_bootstrap.log 2>&1
1166   tc_result_CXX="$?"
1167   rm -f "${TMPFILE}.cpp"
1168   test "${tc_result_CXX}" = "0" || return 1
1169
1170   cmake_toolchain="$tc"
1171 }
1172
1173 cmake_toolchain_detect()
1174 {
1175   cmake_toolchain=
1176   for tc in ${cmake_toolchains}; do
1177     echo "Checking for $tc toolchain" >> cmake_bootstrap.log 2>&1
1178     cmake_toolchain_try "$tc" &&
1179     echo "Found $tc toolchain" &&
1180     break
1181   done
1182 }
1183
1184 if test -z "${CC}" && test -z "${CXX}"; then
1185   cmake_toolchain_detect
1186 fi
1187
1188 thread_flags=''
1189 case "${cmake_system}" in
1190   *AIX*)   thread_flags='-pthread' ;;
1191 esac
1192
1193 #-----------------------------------------------------------------------------
1194 # Test C compiler
1195 cmake_c_compiler=
1196
1197 # If CC is set, use that for compiler, otherwise use list of known compilers
1198 if test -n "${cmake_toolchain}"; then
1199   eval cmake_c_compilers="\${cmake_toolchain_${cmake_toolchain}_CC}"
1200 elif test -n "${CC}"; then
1201   cmake_c_compilers="${CC}"
1202 else
1203   cmake_c_compilers="${CMAKE_KNOWN_C_COMPILERS}"
1204 fi
1205
1206 # Check if C compiler works
1207 TMPFILE=`cmake_tmp_file`
1208 echo '
1209 #ifdef __cplusplus
1210 # error "The CMAKE_C_COMPILER is set to a C++ compiler"
1211 #endif
1212
1213 #if defined(_AIX) && defined(__GNUC__) && !defined(_THREAD_SAFE)
1214 #error "On AIX with GNU we need the -pthread flag."
1215 #endif
1216
1217 #if defined(__sun) && __STDC_VERSION__ < 199901L
1218 #error "On Solaris we need C99."
1219 #endif
1220
1221 #if defined(__hpux) && !(defined(__GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 409)
1222 #error "On HP-UX we need GCC 4.9 or higher."
1223 #endif
1224
1225 #include <stdio.h>
1226
1227 int main(int argc, char* argv[])
1228 {
1229   printf("%d%c", (argv != 0), (char)0x0a);
1230   return argc - 1;
1231 }
1232 ' > "${TMPFILE}.c"
1233 for std in 11 99 90; do
1234   std_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" C \"${std}\"`"
1235   for compiler in ${cmake_c_compilers}; do
1236     for std_flag in '' $std_flags; do
1237       for thread_flag in '' $thread_flags; do
1238         echo "Checking whether '${compiler} ${cmake_c_flags} ${cmake_ld_flags} ${std_flag} ${thread_flag}' works." >> cmake_bootstrap.log 2>&1
1239         if cmake_try_run "${compiler}" "${cmake_c_flags} ${cmake_ld_flags} ${std_flag} ${thread_flag}" \
1240           "${TMPFILE}.c" >> cmake_bootstrap.log 2>&1; then
1241           cmake_c_compiler="${compiler}"
1242           cmake_c_flags="${cmake_c_flags} ${std_flag} ${thread_flag}"
1243           break 4
1244         fi
1245       done
1246     done
1247   done
1248 done
1249 rm -f "${TMPFILE}.c"
1250
1251 if test -z "${cmake_c_compiler}"; then
1252   cmake_error 6 "Cannot find appropriate C compiler on this system.
1253 Please specify one using environment variable CC.
1254 See cmake_bootstrap.log for compilers attempted.
1255 "
1256 fi
1257 echo "C compiler on this system is: ${cmake_c_compiler} ${cmake_c_flags}"
1258
1259 #-----------------------------------------------------------------------------
1260 # Test CXX compiler
1261 cmake_cxx_compiler=
1262
1263 # On Mac OSX, CC is the same as cc, so make sure not to try CC as c++ compiler.
1264
1265 # If CC is set, use that for compiler, otherwise use list of known compilers
1266 if test -n "${cmake_toolchain}"; then
1267   eval cmake_cxx_compilers="\${cmake_toolchain_${cmake_toolchain}_CXX}"
1268 elif test -n "${CXX}"; then
1269   cmake_cxx_compilers="${CXX}"
1270 else
1271   cmake_cxx_compilers="${CMAKE_KNOWN_CXX_COMPILERS}"
1272 fi
1273
1274 # Check if C++ compiler works
1275 TMPFILE=`cmake_tmp_file`
1276 echo '
1277 #include <iostream>
1278 #include <memory>
1279 #include <unordered_map>
1280
1281 #if __cplusplus < 201103L
1282 #error "Compiler is not in a mode aware of C++11."
1283 #endif
1284
1285 #if defined(_AIX) && defined(__GNUC__) && !defined(_THREAD_SAFE)
1286 #error "On AIX with GNU we need the -pthread flag."
1287 #endif
1288
1289 #if defined(__SUNPRO_CC) && __SUNPRO_CC < 0x5140
1290 #error "SunPro <= 5.13 mode not supported due to bug in move semantics."
1291 #endif
1292
1293 #if defined(__hpux) && !(defined(__GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 409)
1294 #error "On HP-UX we need GCC 4.9 or higher."
1295 #endif
1296
1297 #if __cplusplus > 201103L
1298 #include <iterator>
1299 int check_cxx14()
1300 {
1301   int a[] = { 0, 1, 2 };
1302   auto ai = std::cbegin(a);
1303
1304   int b[] = { 2, 1, 0 };
1305   auto bi = std::cend(b);
1306
1307   return *ai + *(bi - 1);
1308 }
1309 #else
1310 int check_cxx14()
1311 {
1312   return 0;
1313 }
1314 #endif
1315
1316 #if (__cplusplus >= 201703L || defined(__INTEL_COMPILER) && defined(__cpp_deduction_guides))
1317 #include <optional>
1318 template <typename T,
1319           typename std::invoke_result<decltype(&T::get), T>::type = nullptr>
1320 typename T::pointer get_ptr(T& item)
1321 {
1322   return item.get();
1323 }
1324
1325 int check_cxx17()
1326 {
1327   // Intel compiler do not handle correctly 'decltype' inside 'invoke_result'
1328   std::unique_ptr<int> u(new int(0));
1329   get_ptr(u);
1330   std::optional<int> oi = 0;
1331   return oi.value();
1332 }
1333 #else
1334 int check_cxx17()
1335 {
1336   return 0;
1337 }
1338 #endif
1339
1340 class Class
1341 {
1342 public:
1343   int Get() const { return this->Member; }
1344 private:
1345   int Member = 1;
1346 };
1347 int main()
1348 {
1349   auto const c = std::unique_ptr<Class>(new Class);
1350   std::cout << c->Get() << check_cxx14() << check_cxx17() << std::endl;
1351   return 0;
1352 }
1353 ' > "${TMPFILE}.cxx"
1354 for std in 17 14 11; do
1355   std_flags="`cmake_extract_standard_flags \"${cmake_toolchain}\" CXX \"${std}\"`"
1356   for compiler in ${cmake_cxx_compilers}; do
1357     for std_flag in '' $std_flags; do
1358       for thread_flag in '' $thread_flags; do
1359         echo "Checking whether '${compiler} ${cmake_cxx_flags} ${cmake_ld_flags} ${std_flag} ${thread_flag}' works." >> cmake_bootstrap.log 2>&1
1360         if cmake_try_run "${compiler}" "${cmake_cxx_flags} ${cmake_ld_flags} ${std_flag} ${thread_flag}" \
1361           "${TMPFILE}.cxx" >> cmake_bootstrap.log 2>&1; then
1362           cmake_cxx_compiler="${compiler}"
1363           cmake_cxx_flags="${cmake_cxx_flags} ${std_flag} ${thread_flag} "
1364           break 4
1365         fi
1366       done
1367     done
1368   done
1369 done
1370 rm -f "${TMPFILE}.cxx"
1371
1372 if test -z "${cmake_cxx_compiler}"; then
1373 cmake_error 7 "Cannot find a C++ compiler that supports both C++11 and the specified C++ flags.
1374 Please specify one using environment variable CXX.
1375 The C++ flags are \"$cmake_cxx_flags\".
1376 They can be changed using the environment variable CXXFLAGS.
1377 See cmake_bootstrap.log for compilers attempted."
1378 fi
1379 echo "C++ compiler on this system is: ${cmake_cxx_compiler} ${cmake_cxx_flags}"
1380
1381 #-----------------------------------------------------------------------------
1382 # Test CXX features
1383
1384 cmake_cxx_features="make_unique filesystem"
1385
1386 for feature in ${cmake_cxx_features}; do
1387   eval "cmake_have_cxx_${feature}=0"
1388   echo "Checking whether '${cmake_cxx_compiler} ${cmake_cxx_flags} ${cmake_ld_flags}' supports '${feature}'." >> cmake_bootstrap.log 2>&1
1389   if cmake_try_run "${cmake_cxx_compiler}" "${cmake_cxx_flags} ${cmake_ld_flags}" \
1390                    "${cmake_source_dir}/Source/Checks/cm_cxx_${feature}.cxx" >> cmake_bootstrap.log 2>&1; then
1391     eval "cmake_have_cxx_${feature}=1"
1392   fi
1393 done
1394
1395 cmake_have_cxx_features=""
1396 for feature in ${cmake_cxx_features}; do
1397   feature_variable="cmake_have_cxx_${feature}"
1398   eval "feature_value=\${${feature_variable}}"
1399   if test "${feature_value}" -eq "1"; then
1400     cmake_have_cxx_features="${cmake_have_cxx_features} -DCMake_HAVE_CXX_`cmake_toupper ${feature}`=${feature_value}"
1401   fi
1402 done
1403
1404 cmake_generate_file "${cmake_bootstrap_dir}/cmSTL.hxx" ""
1405
1406
1407 #-----------------------------------------------------------------------------
1408 # Test Make
1409
1410 cmake_make_processor=
1411 cmake_make_flags=
1412
1413 # If MAKE is set, use that for make processor, otherwise use list of known make
1414 if test -n "${MAKE}"; then
1415   cmake_make_processors="${MAKE}"
1416 elif test "${cmake_bootstrap_generator}" = "Ninja"; then
1417   cmake_make_processors="${CMAKE_KNOWN_NINJA_PROCESSORS}"
1418 else
1419   cmake_make_processors="${CMAKE_KNOWN_MAKE_PROCESSORS}"
1420 fi
1421
1422 TMPFILE="`cmake_tmp_file`_dir"
1423 rm -rf "${cmake_bootstrap_dir}/${TMPFILE}"
1424 mkdir "${cmake_bootstrap_dir}/${TMPFILE}"
1425 cd "${cmake_bootstrap_dir}/${TMPFILE}"
1426 if test "${cmake_bootstrap_generator}" = "Ninja"; then
1427   echo '
1428 rule cc
1429   command = "'"${cmake_c_compiler}"'" '"${cmake_ld_flags} ${cmake_c_flags}"' -o $out $in
1430 build test: cc test.c
1431 '>"build.ninja"
1432 else
1433   echo '
1434 test: test.c
1435         "'"${cmake_c_compiler}"'" '"${cmake_ld_flags} ${cmake_c_flags}"' -o test test.c
1436 '>"Makefile"
1437 fi
1438 echo '
1439 #include <stdio.h>
1440 int main(){ printf("1%c", (char)0x0a); return 0; }
1441 ' > "test.c"
1442 cmake_original_make_flags="${cmake_make_flags}"
1443 if test "x${cmake_parallel_make}" != "x"; then
1444   cmake_make_flags="${cmake_make_flags} -j ${cmake_parallel_make}"
1445 fi
1446 for a in ${cmake_make_processors}; do
1447   if test -z "${cmake_make_processor}" && cmake_try_make "${a}" "${cmake_make_flags}" >> ../cmake_bootstrap.log 2>&1; then
1448     cmake_make_processor="${a}"
1449   fi
1450 done
1451 cmake_full_make_flags="${cmake_make_flags}"
1452 if test "x${cmake_original_make_flags}" != "x${cmake_make_flags}"; then
1453   if test -z "${cmake_make_processor}"; then
1454     cmake_make_flags="${cmake_original_make_flags}"
1455     for a in ${cmake_make_processors}; do
1456       if test -z "${cmake_make_processor}" && cmake_try_make "${a}" "${cmake_make_flags}" >> ../cmake_bootstrap.log 2>&1; then
1457         cmake_make_processor="${a}"
1458       fi
1459     done
1460   fi
1461 fi
1462 cd "${cmake_bootstrap_dir}"
1463
1464 if test "${cmake_bootstrap_generator}" = "Ninja"; then
1465   mf_str=Ninja
1466 else
1467   mf_str=Makefile
1468 fi
1469 if test -z "${cmake_make_processor}"; then
1470   cmake_error 8 "Cannot find appropriate ${mf_str} processor on this system.
1471 Please specify one using environment variable MAKE."
1472 fi
1473 rm -rf "${cmake_bootstrap_dir}/${TMPFILE}"
1474 echo "${mf_str} processor on this system is: ${cmake_make_processor}"
1475 if test "x${cmake_full_make_flags}" != "x${cmake_make_flags}"; then
1476   echo "---------------------------------------------"
1477   echo "${mf_str} processor ${cmake_make_processor} does not support parallel build"
1478   echo "---------------------------------------------"
1479 fi
1480
1481 # Test for kwsys features
1482 KWSYS_NAME_IS_KWSYS=0
1483 KWSYS_BUILD_SHARED=0
1484 KWSYS_LFS_AVAILABLE=0
1485 KWSYS_LFS_REQUESTED=0
1486 KWSYS_STL_HAS_WSTRING=0
1487 KWSYS_CXX_HAS_EXT_STDIO_FILEBUF_H=0
1488 KWSYS_CXX_HAS_SETENV=0
1489 KWSYS_CXX_HAS_UNSETENV=0
1490 KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H=0
1491 KWSYS_CXX_HAS_UTIMENSAT=0
1492 KWSYS_CXX_HAS_UTIMES=0
1493 KWSYS_SYSTEMTOOLS_USE_TRANSLATION_MAP=1
1494
1495 if cmake_try_run "${cmake_cxx_compiler}" \
1496   "${cmake_cxx_flags} ${cmake_ld_flags} -DTEST_KWSYS_CXX_HAS_SETENV" \
1497   "${cmake_source_dir}/Source/kwsys/kwsysPlatformTestsCXX.cxx" >> cmake_bootstrap.log 2>&1; then
1498   KWSYS_CXX_HAS_SETENV=1
1499   echo "${cmake_cxx_compiler} has setenv"
1500 else
1501   echo "${cmake_cxx_compiler} does not have setenv"
1502 fi
1503
1504 if cmake_try_run "${cmake_cxx_compiler}" \
1505   "${cmake_cxx_flags} ${cmake_ld_flags} -DTEST_KWSYS_CXX_HAS_UNSETENV" \
1506   "${cmake_source_dir}/Source/kwsys/kwsysPlatformTestsCXX.cxx" >> cmake_bootstrap.log 2>&1; then
1507   KWSYS_CXX_HAS_UNSETENV=1
1508   echo "${cmake_cxx_compiler} has unsetenv"
1509 else
1510   echo "${cmake_cxx_compiler} does not have unsetenv"
1511 fi
1512
1513 if cmake_try_run "${cmake_cxx_compiler}" \
1514   "${cmake_cxx_flags} ${cmake_ld_flags} -DTEST_KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H" \
1515   "${cmake_source_dir}/Source/kwsys/kwsysPlatformTestsCXX.cxx" >> cmake_bootstrap.log 2>&1; then
1516   KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H=1
1517   echo "${cmake_cxx_compiler} has environ in stdlib.h"
1518 else
1519   echo "${cmake_cxx_compiler} does not have environ in stdlib.h"
1520 fi
1521
1522 if cmake_try_run "${cmake_cxx_compiler}" \
1523   "${cmake_cxx_flags} ${cmake_ld_flags} -DTEST_KWSYS_STL_HAS_WSTRING" \
1524   "${cmake_source_dir}/Source/kwsys/kwsysPlatformTestsCXX.cxx" >> cmake_bootstrap.log 2>&1; then
1525   KWSYS_STL_HAS_WSTRING=1
1526   echo "${cmake_cxx_compiler} has stl wstring"
1527 else
1528   echo "${cmake_cxx_compiler} does not have stl wstring"
1529 fi
1530
1531 if cmake_try_run "${cmake_cxx_compiler}" \
1532   "${cmake_cxx_flags} ${cmake_ld_flags} -DTEST_KWSYS_CXX_HAS_EXT_STDIO_FILEBUF_H" \
1533   "${cmake_source_dir}/Source/kwsys/kwsysPlatformTestsCXX.cxx" >> cmake_bootstrap.log 2>&1; then
1534   KWSYS_CXX_HAS_EXT_STDIO_FILEBUF_H=1
1535   echo "${cmake_cxx_compiler} has <ext/stdio_filebuf.h>"
1536 else
1537   echo "${cmake_cxx_compiler} does not have <ext/stdio_filebuf.h>"
1538 fi
1539
1540 if test -n "${cmake_ccache_enabled}"; then
1541   echo "Building CMake with ccache"
1542   cmake_c_compiler="ccache ${cmake_c_compiler}"
1543   cmake_cxx_compiler="ccache ${cmake_cxx_compiler}"
1544 fi
1545
1546 # Just to be safe, let us store compiler and flags to the header file
1547
1548 cmake_bootstrap_version='$Revision$'
1549 cmake_compiler_settings_comment="/*
1550  * Generated by ${cmake_source_dir}/bootstrap
1551  * Version:     ${cmake_bootstrap_version}
1552  *
1553  * Source directory: ${cmake_source_dir}
1554  * Binary directory: ${cmake_bootstrap_dir}
1555  *
1556  * C compiler:   ${cmake_c_compiler}
1557  * C flags:      ${cmake_c_flags}
1558  *
1559  * C++ compiler: ${cmake_cxx_compiler}
1560  * C++ flags:    ${cmake_cxx_flags}
1561  *
1562  * Make:         ${cmake_make_processor}
1563  *
1564  * Sources:
1565  * ${CMAKE_CXX_SOURCES} ${CMAKE_C_SOURCES}
1566  * STD Sources:
1567  * ${CMAKE_STD_CXX_HEADERS} ${CMAKE_STD_CXX_SOURCES}
1568  * LexerParser Sources:
1569  * ${LexerParser_CXX_SOURCES} ${LexerParser_C_SOURCES}
1570  * kwSys Sources:
1571  * ${KWSYS_CXX_SOURCES} ${KWSYS_C_SOURCES}
1572  * libuv Sources:
1573  * ${LIBUV_C_SOURCES}
1574  * jsoncpp Sources:
1575  * ${JSONCPP_CXX_SOURCES}
1576  * librhash Sources:
1577  * ${LIBRHASH_C_SOURCES}
1578  */
1579 "
1580
1581 cmake_report cmConfigure.h${_tmp} "${cmake_compiler_settings_comment}"
1582
1583 # When bootstrapping on MinGW with MSYS we must convert the source
1584 # directory to a windows path.
1585 if ${cmake_system_mingw}; then
1586     CMAKE_BOOTSTRAP_SOURCE_DIR=`cd "${cmake_source_dir}"; pwd -W`
1587     CMAKE_BOOTSTRAP_BINARY_DIR=`cd "${cmake_binary_dir}"; pwd -W`
1588 else
1589     CMAKE_BOOTSTRAP_SOURCE_DIR="${cmake_source_dir}"
1590     CMAKE_BOOTSTRAP_BINARY_DIR="${cmake_binary_dir}"
1591 fi
1592
1593 # Write CMake version
1594 cmake_report cmVersionConfig.h${_tmp} "#define CMake_VERSION_MAJOR ${cmake_version_major}"
1595 cmake_report cmVersionConfig.h${_tmp} "#define CMake_VERSION_MINOR ${cmake_version_minor}"
1596 cmake_report cmVersionConfig.h${_tmp} "#define CMake_VERSION_PATCH ${cmake_version_patch}"
1597 cmake_report cmVersionConfig.h${_tmp} "#define CMake_VERSION \"${cmake_version}\""
1598 cmake_report cmConfigure.h${_tmp} "#define CMAKE_BOOTSTRAP_SOURCE_DIR \"${CMAKE_BOOTSTRAP_SOURCE_DIR}\""
1599 cmake_report cmConfigure.h${_tmp} "#define CMAKE_BOOTSTRAP_BINARY_DIR \"${CMAKE_BOOTSTRAP_BINARY_DIR}\""
1600 cmake_report cmConfigure.h${_tmp} "#define CMake_DEFAULT_RECURSION_LIMIT 400"
1601 cmake_report cmConfigure.h${_tmp} "#define CMAKE_BIN_DIR \"/bootstrap-not-insalled\""
1602 cmake_report cmConfigure.h${_tmp} "#define CMAKE_DATA_DIR \"/bootstrap-not-insalled\""
1603 cmake_report cmConfigure.h${_tmp} "#define CM_FALLTHROUGH"
1604
1605 if test "${cmake_bootstrap_generator}" = "Ninja"; then
1606   cmake_report cmConfigure.h${_tmp} "#define CMAKE_BOOTSTRAP_NINJA"
1607 else
1608   cmake_report cmConfigure.h${_tmp} "#define CMAKE_BOOTSTRAP_MAKEFILES"
1609 fi
1610
1611 if ${cmake_system_mingw}; then
1612   cmake_report cmConfigure.h${_tmp} "#if defined(_WIN32) && !defined(NOMINMAX)"
1613   cmake_report cmConfigure.h${_tmp} "#  define NOMINMAX"
1614   cmake_report cmConfigure.h${_tmp} "#endif"
1615   cmake_report cmConfigure.h${_tmp} "#if defined(_WIN32) && !defined(KWSYS_ENCODING_DEFAULT_CODEPAGE)"
1616   cmake_report cmConfigure.h${_tmp} "#  define KWSYS_ENCODING_DEFAULT_CODEPAGE CP_UTF8"
1617   cmake_report cmConfigure.h${_tmp} "#endif"
1618 fi
1619
1620 # Regenerate configured headers
1621 for h in Configure VersionConfig; do
1622   if "${_diff}" cm${h}.h cm${h}.h${_tmp} > /dev/null 2> /dev/null; then
1623     rm -f cm${h}.h${_tmp}
1624   else
1625     mv -f cm${h}.h${_tmp} cm${h}.h
1626   fi
1627 done
1628
1629 # Prepare KWSYS
1630 cmsys_header_files="cmsys/Configure.h cmsys/Configure.hxx"
1631 cmake_kwsys_config_replace_string \
1632   "${cmake_source_dir}/Source/kwsys/Configure.hxx.in" \
1633   "${cmake_bootstrap_dir}/cmsys/Configure.hxx" \
1634   "${cmake_compiler_settings_comment}"
1635 cmake_kwsys_config_replace_string \
1636   "${cmake_source_dir}/Source/kwsys/Configure.h.in" \
1637   "${cmake_bootstrap_dir}/cmsys/Configure.h" \
1638   "${cmake_compiler_settings_comment}"
1639
1640 for a in ${KWSYS_FILES}; do
1641   cmake_replace_string "${cmake_source_dir}/Source/kwsys/${a}.in" \
1642      "${cmake_bootstrap_dir}/cmsys/${a}" KWSYS_NAMESPACE cmsys
1643   cmsys_header_files="${cmsys_header_files} cmsys/${a}"
1644 done
1645
1646 echo "#pragma once" > "${cmake_bootstrap_dir}/cmThirdParty.h.tmp"
1647 if test "x${bootstrap_system_libuv}" != "x"; then
1648   echo "#define CMAKE_USE_SYSTEM_LIBUV" >> "${cmake_bootstrap_dir}/cmThirdParty.h.tmp"
1649 fi
1650 if test "x${bootstrap_system_jsoncpp}" != "x"; then
1651   echo "#define CMAKE_USE_SYSTEM_JSONCPP" >> "${cmake_bootstrap_dir}/cmThirdParty.h.tmp"
1652 fi
1653 if test "x${bootstrap_system_librhash}" != "x"; then
1654   echo "#define CMAKE_USE_SYSTEM_LIBRHASH" >> "${cmake_bootstrap_dir}/cmThirdParty.h.tmp"
1655 fi
1656 cmake_generate_file_tmp "${cmake_bootstrap_dir}/cmThirdParty.h" "${cmake_bootstrap_dir}/cmThirdParty.h.tmp"
1657
1658 # Generate Makefile
1659 dep="cmConfigure.h ${cmsys_header_files}"
1660 for h in "${cmake_source_dir}"/Source/*.hxx; do
1661   dep="${dep} `cmake_escape_artifact \"${h}\"`"
1662 done
1663 for h in "${cmake_source_dir}"/Source/*.h; do
1664   dep="${dep} `cmake_escape_artifact \"${h}\"`"
1665 done
1666 for h in ${CMAKE_STD_CXX_HEADERS}; do
1667   dep="${dep} `cmake_escape_artifact \"${cmake_source_dir}\"`/Utilities/std/cm/${h}"
1668 done
1669 objs=""
1670 for a in ${CMAKE_CXX_SOURCES} ${CMAKE_C_SOURCES} ${CMAKE_STD_CXX_SOURCES} ${LexerParser_CXX_SOURCES} ${LexerParser_C_SOURCES} ${KWSYS_CXX_SOURCES} ${KWSYS_C_SOURCES}; do
1671   objs="${objs} ${a}.o"
1672 done
1673 if test "x${bootstrap_system_libuv}" = "x"; then
1674   for a in ${LIBUV_C_SOURCES}; do
1675     objs="${objs} uv-`cmake_obj ${a}`"
1676   done
1677 fi
1678 if test "x${bootstrap_system_librhash}" = "x"; then
1679   for a in ${LIBRHASH_C_SOURCES}; do
1680     objs="${objs} rhash-`cmake_obj ${a}`"
1681   done
1682 fi
1683 if test "${cmake_bootstrap_generator}" = "Ninja"; then
1684   if test "x${bootstrap_system_jsoncpp}" = "x"; then
1685     for a in ${JSONCPP_CXX_SOURCES}; do
1686       objs="${objs} jsoncpp-`cmake_obj ${a}`"
1687     done
1688   fi
1689 fi
1690
1691 libs=""
1692
1693 uv_c_flags=""
1694 if ${cmake_system_mingw}; then
1695   uv_c_flags="${uv_c_flags} -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0600"
1696   libs="${libs} -lws2_32 -lpsapi -liphlpapi -lshell32 -luserenv -lole32 -loleaut32"
1697 else
1698   case "${cmake_system}" in
1699     *AIX*)
1700       uv_c_flags="${uv_c_flags} -D_ALL_SOURCE -D_XOPEN_SOURCE=500 -D_LINUX_SOURCE_COMPAT"
1701       libs="${libs} -lperfstat"
1702       ;;
1703     *Darwin*)
1704       uv_c_flags="${uv_c_flags} -D_DARWIN_USE_64_BIT_INODE=1 -D_DARWIN_UNLIMITED_SELECT=1"
1705       ;;
1706     *HP-UX*)
1707       uv_c_flags="${uv_c_flags} -D_XOPEN_SOURCE_EXTENDED"
1708       ;;
1709     *Linux*)
1710       uv_c_flags="${uv_c_flags} -D_GNU_SOURCE"
1711       libs="${libs} -ldl -lrt"
1712       ;;
1713     *kFreeBSD*)
1714       libs="${libs} -lkvm -lfreebsd-glue"
1715       ;;
1716     *BSD*)
1717       libs="${libs} -lkvm"
1718       ;;
1719     *SunOS*)
1720       # Normally libuv uses '-D_XOPEN_SOURCE=500 -std=c90' on Solaris 5.10,
1721       # but we do not need to do that because we bootstrap using POSIX APIs.
1722       uv_c_flags="${uv_c_flags} -D__EXTENSIONS__ -D_XOPEN_SOURCE=600"
1723       libs="${libs} -lkstat -lnsl -lsendfile -lsocket -lrt"
1724       ;;
1725     *QNX*)
1726       uv_c_flags="${uv_c_flags} -D_XOPEN_SOURCE=700"
1727       libs="${libs} -lsocket"
1728       ;;
1729   esac
1730 fi
1731 if test "x${bootstrap_system_libuv}" = "x"; then
1732   uv_c_flags="${uv_c_flags} `cmake_escape_shell "-I${cmake_source_dir}/Utilities/cmlibuv/include"`"
1733   if ${cmake_system_mingw}; then
1734     uv_c_flags="${uv_c_flags} `cmake_escape_shell "-I${cmake_source_dir}/Utilities/cmlibuv/src/win"`"
1735   else
1736     uv_c_flags="${uv_c_flags} `cmake_escape_shell "-I${cmake_source_dir}/Utilities/cmlibuv/src/unix"`"
1737   fi
1738   uv_c_flags="${uv_c_flags} `cmake_escape_shell "-I${cmake_source_dir}/Utilities/cmlibuv/src"`"
1739 else
1740   if test `which pkg-config`; then
1741     use_uv_flags="`pkg-config --cflags libuv`"
1742     cmake_c_flags="${cmake_c_flags} ${use_uv_flags}"
1743     cmake_cxx_flags="${cmake_cxx_flags} ${use_uv_flags}"
1744   fi
1745   libs="${libs} -luv"
1746 fi
1747
1748 if test "x${bootstrap_system_librhash}" != "x"; then
1749   if test `which pkg-config`; then
1750     use_librhash_flags="`pkg-config --cflags librhash`"
1751     cmake_c_flags="${cmake_c_flags} ${use_librhash_flags}"
1752     cmake_cxx_flags="${cmake_cxx_flags} ${use_librhash_flags}"
1753   fi
1754   libs="${libs} -lrhash"
1755 fi
1756
1757 if test "${cmake_bootstrap_generator}" = "Ninja"; then
1758   jsoncpp_cxx_flags=
1759   if test "x${bootstrap_system_jsoncpp}" = "x"; then
1760     jsoncpp_cxx_flags="${jsoncpp_cxx_flags} `cmake_escape_shell "-I${cmake_source_dir}/Utilities/cmjsoncpp/include"`"
1761   else
1762     if test `which pkg-config`; then
1763       use_jsoncpp_flags="`pkg-config --cflags jsoncpp`"
1764       cmake_cxx_flags="${cmake_cxx_flags} ${use_jsoncpp_flags}"
1765     fi
1766     libs="${libs} -ljsoncpp"
1767   fi
1768 fi
1769
1770 if test "x${cmake_ansi_cxx_flags}" != "x"; then
1771   cmake_cxx_flags="${cmake_ansi_cxx_flags} ${cmake_cxx_flags}"
1772 fi
1773
1774 system_flags=''
1775 case "${cmake_system}" in
1776   # Ensure filesystem access uses 64-bit offsets even on 32-bit hosts.
1777   *Linux*) system_flags='-D_FILE_OFFSET_BITS=64' ;;
1778 esac
1779 if test "x${system_flags}" != "x"; then
1780   cmake_c_flags="${cmake_c_flags} ${system_flags}"
1781   cmake_cxx_flags="${cmake_cxx_flags} ${system_flags}"
1782 fi
1783
1784 if test "x${cmake_c_flags}" != "x"; then
1785   cmake_c_flags="${cmake_c_flags} "
1786 fi
1787
1788 if test "x${cmake_cxx_flags}" != "x"; then
1789   cmake_cxx_flags="${cmake_cxx_flags} "
1790 fi
1791
1792 write_source_rule() {
1793   lang="$1"
1794   obj="$2"
1795   src="$3"
1796   src_flags="$4"
1797
1798   if test "${lang}" = "c"; then
1799     ninja_rule=cc
1800     compiler="${cmake_c_compiler}"
1801     flags="${cmake_c_flags}"
1802   elif test "${lang}" = "cxx"; then
1803     ninja_rule=cxx
1804     compiler="${cmake_cxx_compiler}"
1805     flags="${cmake_cxx_flags}"
1806   fi
1807
1808   if test "${cmake_bootstrap_generator}" = "Ninja"; then
1809     echo "build ${obj} : ${ninja_rule} ${src} | ${dep}" >> "${cmake_bootstrap_dir}/build.ninja"
1810     echo "  srcflags = ${src_flags}" >> "${cmake_bootstrap_dir}/build.ninja"
1811   else
1812     echo "${obj} : ${src} ${dep}" >> "${cmake_bootstrap_dir}/Makefile"
1813     echo "      ${compiler} ${flags} ${src_flags} -c ${src} -o ${obj}" >> "${cmake_bootstrap_dir}/Makefile"
1814   fi
1815 }
1816
1817 cmake_c_flags_String="-DKWSYS_STRING_C"
1818 if ${cmake_system_mingw}; then
1819   cmake_c_flags_EncodingC="-DKWSYS_ENCODING_DEFAULT_CODEPAGE=CP_ACP"
1820   cmake_cxx_flags_EncodingCXX="${cmake_c_flags_EncodingC}"
1821   cmake_cxx_flags_cmProcessOutput="${cmake_c_flags_EncodingC}"
1822 fi
1823 cmake_cxx_flags_SystemTools="
1824   -DKWSYS_CXX_HAS_SETENV=${KWSYS_CXX_HAS_SETENV}
1825   -DKWSYS_CXX_HAS_UNSETENV=${KWSYS_CXX_HAS_UNSETENV}
1826   -DKWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H=${KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H}
1827   -DKWSYS_CXX_HAS_UTIMENSAT=${KWSYS_CXX_HAS_UTIMENSAT}
1828   -DKWSYS_CXX_HAS_UTIMES=${KWSYS_CXX_HAS_UTIMES}
1829 "
1830 cmake_c_flags="${cmake_c_flags} \
1831   -DCMAKE_BOOTSTRAP \
1832   -I`cmake_escape_shell \"${cmake_bootstrap_dir}\"` \
1833   -I`cmake_escape_shell \"${cmake_source_dir}/Source\"` \
1834   -I`cmake_escape_shell \"${cmake_source_dir}/Source/LexerParser\"` \
1835   -I`cmake_escape_shell \"${cmake_source_dir}/Utilities\"`"
1836 cmake_cxx_flags="${cmake_cxx_flags} \
1837   -DCMAKE_BOOTSTRAP \
1838   ${cmake_have_cxx_features} \
1839   -I`cmake_escape_shell \"${cmake_bootstrap_dir}\"` \
1840   -I`cmake_escape_shell \"${cmake_source_dir}/Source\"` \
1841   -I`cmake_escape_shell \"${cmake_source_dir}/Source/LexerParser\"` \
1842   -I`cmake_escape_shell \"${cmake_source_dir}/Utilities/std\"` \
1843   -I`cmake_escape_shell \"${cmake_source_dir}/Utilities\"`"
1844 if test "${cmake_bootstrap_generator}" = "Ninja"; then
1845   echo "cc = ${cmake_c_compiler}" > "${cmake_bootstrap_dir}/build.ninja"
1846   echo "cxx = ${cmake_cxx_compiler}" >> "${cmake_bootstrap_dir}/build.ninja"
1847   echo "cflags = ${cmake_c_flags}" >> "${cmake_bootstrap_dir}/build.ninja"
1848   echo "cxxflags = ${cmake_cxx_flags}" >> "${cmake_bootstrap_dir}/build.ninja"
1849   echo "ldflags = ${cmake_ld_flags}" >> "${cmake_bootstrap_dir}/build.ninja"
1850   echo "rule cc" >> "${cmake_bootstrap_dir}/build.ninja"
1851   echo "  command = \$cc \$cflags \$srcflags -c \$in -o \$out" >> "${cmake_bootstrap_dir}/build.ninja"
1852   echo "rule cxx" >> "${cmake_bootstrap_dir}/build.ninja"
1853   echo "  command = \$cxx \$cxxflags \$srcflags -c \$in -o \$out" >> "${cmake_bootstrap_dir}/build.ninja"
1854   echo "rule link" >> "${cmake_bootstrap_dir}/build.ninja"
1855   echo "  command = \$cxx \$ldflags \$cxxflags \$in \$libs -o \$out" >> "${cmake_bootstrap_dir}/build.ninja"
1856   echo "build cmake: link ${objs}" >> "${cmake_bootstrap_dir}/build.ninja"
1857   echo "  libs = ${libs}" >> "${cmake_bootstrap_dir}/build.ninja"
1858 else
1859   echo "cmake: ${objs}" > "${cmake_bootstrap_dir}/Makefile"
1860   echo "        ${cmake_cxx_compiler} ${cmake_ld_flags} ${cmake_cxx_flags} ${objs} ${libs} -o cmake" >> "${cmake_bootstrap_dir}/Makefile"
1861 fi
1862 for a in ${CMAKE_CXX_SOURCES}; do
1863   src=`cmake_escape_artifact "${cmake_source_dir}/Source/${a}.cxx"`
1864   src_flags=`eval echo \\${cmake_cxx_flags_\${a}}`
1865   write_source_rule "cxx" "${a}.o" "${src}" "${src_flags}"
1866 done
1867 for a in ${CMAKE_C_SOURCES}; do
1868   src=`cmake_escape_artifact "${cmake_source_dir}/Source/${a}.c"`
1869   write_source_rule "c" "${a}.o" "${src}" ""
1870 done
1871 for a in ${CMAKE_STD_CXX_SOURCES}; do
1872   src=`cmake_escape_artifact "${cmake_source_dir}/Utilities/std/cm/bits/${a}.cxx"`
1873   src_flags=`eval echo \\${cmake_cxx_flags_\${a}}`
1874   write_source_rule "cxx" "${a}.o" "${src}" "${src_flags}"
1875 done
1876 for a in ${LexerParser_CXX_SOURCES}; do
1877   src=`cmake_escape_artifact "${cmake_source_dir}/Source/LexerParser/${a}.cxx"`
1878   src_flags=`eval echo \\${cmake_cxx_flags_\${a}}`
1879   write_source_rule "cxx" "${a}.o" "${src}" "${src_flags}"
1880 done
1881 for a in ${LexerParser_C_SOURCES}; do
1882   src=`cmake_escape_artifact "${cmake_source_dir}/Source/LexerParser/${a}.c"`
1883   write_source_rule "c" "${a}.o" "${src}" ""
1884 done
1885 for a in ${KWSYS_C_SOURCES}; do
1886   src=`cmake_escape_artifact "${cmake_source_dir}/Source/kwsys/${a}.c"`
1887   src_flags="`eval echo \\${cmake_c_flags_\${a}}` -DKWSYS_NAMESPACE=cmsys"
1888   write_source_rule "c" "${a}.o" "${src}" "${src_flags}"
1889 done
1890 for a in ${KWSYS_CXX_SOURCES}; do
1891   src=`cmake_escape_artifact "${cmake_source_dir}/Source/kwsys/${a}.cxx"`
1892   src_flags="`eval echo \\${cmake_cxx_flags_\${a}}` -DKWSYS_NAMESPACE=cmsys"
1893   write_source_rule "cxx" "${a}.o" "${src}" "${src_flags}"
1894 done
1895 if test "x${bootstrap_system_libuv}" = "x"; then
1896   for a in ${LIBUV_C_SOURCES}; do
1897     src=`cmake_escape_artifact "${cmake_source_dir}/Utilities/cmlibuv/${a}"`
1898     write_source_rule "c" "uv-`cmake_obj ${a}`" "${src}" "${uv_c_flags}"
1899   done
1900 fi
1901 if test "x${bootstrap_system_librhash}" = "x"; then
1902   for a in ${LIBRHASH_C_SOURCES}; do
1903     src=`cmake_escape_artifact "${cmake_source_dir}/Utilities/cmlibrhash/${a}"`
1904     write_source_rule "c" "rhash-`cmake_obj ${a}`" "${src}" ""
1905   done
1906 fi
1907 if test "${cmake_bootstrap_generator}" = "Ninja"; then
1908   if test "x${bootstrap_system_jsoncpp}" = "x"; then
1909     for a in ${JSONCPP_CXX_SOURCES}; do
1910       src=`cmake_escape_artifact "${cmake_source_dir}/Utilities/cmjsoncpp/${a}"`
1911       write_source_rule "cxx" "jsoncpp-`cmake_obj ${a}`" "${src}" "${jsoncpp_cxx_flags}"
1912     done
1913   fi
1914 fi
1915 if test "${cmake_bootstrap_generator}" = "Ninja"; then
1916   echo "
1917 rule rebuild_cache
1918   command = cd \"${cmake_binary_dir}\" && \"${cmake_source_dir}/bootstrap\" --generator=\"${cmake_bootstrap_generator}\"
1919   generator = 1
1920 build build.ninja : rebuild_cache
1921 " >> "${cmake_bootstrap_dir}/build.ninja"
1922 else
1923   echo "
1924 rebuild_cache:
1925         cd \"${cmake_binary_dir}\" && \"${cmake_source_dir}/bootstrap\" --generator=\"${cmake_bootstrap_generator}\"
1926 " >> "${cmake_bootstrap_dir}/Makefile"
1927 fi
1928
1929 # Write our default settings to Bootstrap${_cmk}/InitialCacheFlags.cmake.
1930 echo '
1931 # Generated by '"${cmake_source_dir}"'/bootstrap
1932 # Default cmake settings.  These may be overridden any settings below.
1933 set (CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build.") # not FORCE to preserve defaults specified elsewhere
1934 set (CMAKE_INSTALL_PREFIX "'"${cmake_prefix_dir}"'" CACHE PATH "Install path prefix, prepended onto install directories." FORCE)
1935 set (CMAKE_DOC_DIR "'"${cmake_doc_dir}"'" CACHE PATH "Install location for documentation (relative to prefix)." FORCE)
1936 set (CMAKE_MAN_DIR "'"${cmake_man_dir}"'" CACHE PATH "Install location for man pages (relative to prefix)." FORCE)
1937 set (CMAKE_BIN_DIR "'"${cmake_bin_dir}"'" CACHE PATH "Install location for binaries (relative to prefix)." FORCE)
1938 set (CMAKE_DATA_DIR "'"${cmake_data_dir}"'" CACHE PATH "Install location for data (relative to prefix)." FORCE)
1939 set (CMAKE_XDGDATA_DIR "'"${cmake_xdgdata_dir}"'" CACHE PATH "Install location for XDG specific files (relative to prefix)." FORCE)
1940 ' > "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1941
1942 # Add configuration settings given as command-line options.
1943 if test "x${cmake_bootstrap_qt_gui}" != "x"; then
1944   echo '
1945 set (BUILD_QtDialog '"${cmake_bootstrap_qt_gui}"' CACHE BOOL "Build Qt dialog for CMake" FORCE)
1946 ' >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1947 fi
1948 if test "x${cmake_bootstrap_qt_qmake}" != "x"; then
1949   echo '
1950 set (QT_QMAKE_EXECUTABLE "'"${cmake_bootstrap_qt_qmake}"'" CACHE FILEPATH "Location of Qt qmake" FORCE)
1951 ' >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1952 fi
1953 if test "x${cmake_sphinx_info}" != "x"; then
1954   echo '
1955 set (SPHINX_INFO "'"${cmake_sphinx_info}"'" CACHE BOOL "Build Info manual with Sphinx" FORCE)
1956 ' >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1957 fi
1958 if test "x${cmake_sphinx_man}" != "x"; then
1959   echo '
1960 set (SPHINX_MAN "'"${cmake_sphinx_man}"'" CACHE BOOL "Build man pages with Sphinx" FORCE)
1961 ' >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1962 fi
1963 if test "x${cmake_sphinx_html}" != "x"; then
1964   echo '
1965 set (SPHINX_HTML "'"${cmake_sphinx_html}"'" CACHE BOOL "Build html help with Sphinx" FORCE)
1966 ' >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1967 fi
1968 if test "x${cmake_sphinx_qthelp}" != "x"; then
1969   echo '
1970 set (SPHINX_QTHELP "'"${cmake_sphinx_qthelp}"'" CACHE BOOL "Build qch help with Sphinx" FORCE)
1971 ' >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1972 fi
1973 if test "x${cmake_sphinx_latexpdf}" != "x"; then
1974   echo '
1975 set (SPHINX_LATEXPDF "'"${cmake_sphinx_latexpdf}"'" CACHE BOOL "Build PDF help with Sphinx using LaTeX" FORCE)
1976 ' >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1977 fi
1978 if test "x${cmake_sphinx_build}" != "x"; then
1979   echo '
1980 set (SPHINX_EXECUTABLE "'"${cmake_sphinx_build}"'" CACHE FILEPATH "Location of Qt sphinx-build" FORCE)
1981 ' >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1982 fi
1983 if test "x${cmake_sphinx_flags}" != "x"; then
1984   echo '
1985 set (SPHINX_FLAGS [==['"${cmake_sphinx_flags}"']==] CACHE STRING "Flags to pass to sphinx-build" FORCE)
1986 ' >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1987 fi
1988
1989 # Add user-specified settings.  Handle relative-path case for
1990 # specification of cmake_init_file.
1991 (
1992 cd "${cmake_binary_dir}"
1993 if test -f "${cmake_init_file}"; then
1994   cat "${cmake_init_file}" >> "${cmake_bootstrap_dir}/InitialCacheFlags.cmake"
1995 fi
1996 )
1997
1998 echo "---------------------------------------------"
1999
2000 # Run make to build bootstrap cmake
2001 if test "${cmake_bootstrap_generator}" = "Ninja"; then
2002   ninja_v=-v
2003 else
2004   ninja_v=
2005 fi
2006 if test "x${cmake_parallel_make}" != "x"; then
2007   ${cmake_make_processor} ${cmake_make_flags} ${ninja_v}
2008 else
2009   ${cmake_make_processor} ${ninja_v}
2010 fi
2011 RES=$?
2012 if test "${RES}" -ne "0"; then
2013   cmake_error 9 "Problem while running ${cmake_make_processor}"
2014 fi
2015 cd "${cmake_binary_dir}"
2016
2017 # Set C, CXX, and MAKE environment variables, so that real real cmake will be
2018 # build with same compiler and make
2019 CC="${cmake_c_compiler}"
2020 CXX="${cmake_cxx_compiler}"
2021 MAKE="${cmake_make_processor}"
2022 export CC
2023 export CXX
2024 export MAKE
2025 export CFLAGS
2026 export CXXFLAGS
2027 export LDFLAGS
2028
2029 # Run bootstrap CMake to configure real CMake
2030 cmake_options="-DCMAKE_BOOTSTRAP=1"
2031 if test -n "${cmake_verbose}"; then
2032   cmake_options="${cmake_options} -DCMAKE_VERBOSE_MAKEFILE=1"
2033 fi
2034 "${cmake_bootstrap_dir}/cmake" "${cmake_source_dir}" "-C${cmake_bootstrap_dir}/InitialCacheFlags.cmake" "-G${cmake_bootstrap_generator}" ${cmake_options} ${cmake_bootstrap_system_libs} "$@"
2035 RES=$?
2036 if test "${RES}" -ne "0"; then
2037   cmake_error 11 "Problem while running initial CMake"
2038 fi
2039
2040 echo "---------------------------------------------"
2041
2042 # And we are done. Now just run make
2043 echo "CMake has bootstrapped.  Now run ${cmake_make_processor}."