Begin adding linux installation
This commit is contained in:
		
							parent
							
								
									12c57fa222
								
							
						
					
					
						commit
						acc5d57340
					
				
							
								
								
									
										197
									
								
								devenver.py
									
									
									
									
									
								
							
							
						
						
									
										197
									
								
								devenver.py
									
									
									
									
									
								
							| @ -24,74 +24,6 @@ from enum import Enum | |||||||
| # Internal | # Internal | ||||||
| # ------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------ | ||||||
| DOWNLOAD_CHUNK_SIZE = 1 * 1024 * 1024 # 1 megabyte | DOWNLOAD_CHUNK_SIZE = 1 * 1024 * 1024 # 1 megabyte | ||||||
| IS_WINDOWS          = os.name == "nt" |  | ||||||
| 
 |  | ||||||
| # ------------------------------------------------------------------------------ |  | ||||||
| # This app list must always be installed, they provide the tools to install all |  | ||||||
| # other archives. Upon installation, we will collect the installation executable |  | ||||||
| # path and store them in global variables for the rest of the progam to use to |  | ||||||
| # unzip the files. |  | ||||||
| internal_app_list = [] |  | ||||||
| 
 |  | ||||||
| internal_app_list.append({ |  | ||||||
|     'label': '7zip', |  | ||||||
|     'manifests': [], |  | ||||||
| }) |  | ||||||
| 
 |  | ||||||
| version = "920" |  | ||||||
| internal_app_list[-1]['manifests'].append({ # Download the bootstrap 7zip, this can be unzipped using shutils |  | ||||||
|     'download_checksum': '2a3afe19c180f8373fa02ff00254d5394fec0349f5804e0ad2f6067854ff28ac', |  | ||||||
|     'download_url': f'https://www.7-zip.org/a/7za{version}.zip', |  | ||||||
|     'version': version, |  | ||||||
|     'executables': [ |  | ||||||
|         { |  | ||||||
|             'path': '7za.exe', |  | ||||||
|             'symlink': [], |  | ||||||
|             'add_to_devenv_path': False, |  | ||||||
|             'checksum': 'c136b1467d669a725478a6110ebaaab3cb88a3d389dfa688e06173c066b76fcf' |  | ||||||
|         } |  | ||||||
|     ], |  | ||||||
|     'add_to_devenv_script': [], |  | ||||||
| }) |  | ||||||
| 
 |  | ||||||
| version = "2201" |  | ||||||
| internal_app_list[-1]['manifests'].append({ # Download proper 7zip, extract this exe with the bootstrap 7zip |  | ||||||
|     'download_checksum': 'b055fee85472921575071464a97a79540e489c1c3a14b9bdfbdbab60e17f36e4', |  | ||||||
|     'download_url':      f'https://www.7-zip.org/a/7z{version}-x64.exe', |  | ||||||
|     'version': version, |  | ||||||
|     'executables': [ |  | ||||||
|         { |  | ||||||
|             'path': '7z.exe', |  | ||||||
|             'symlink': [], |  | ||||||
|             'add_to_devenv_path': True, |  | ||||||
|             'checksum': '254cf6411d38903b2440819f7e0a847f0cfee7f8096cfad9e90fea62f42b0c23' |  | ||||||
|         } |  | ||||||
|     ], |  | ||||||
|     'add_to_devenv_script':  [], |  | ||||||
| }) |  | ||||||
| 
 |  | ||||||
| # ------------------------------------------------------------------------------ |  | ||||||
| 
 |  | ||||||
| version = "1.5.2" |  | ||||||
| internal_app_list.append({ |  | ||||||
|     "label": "zstd", |  | ||||||
|     "manifests": [ |  | ||||||
|         { |  | ||||||
|             "download_checksum": "68897cd037ee5e44c6d36b4dbbd04f1cc4202f9037415a3251951b953a257a09", |  | ||||||
|             "download_url": f"https://github.com/facebook/zstd/releases/download/v{version}/zstd-v{version}-win64.zip", |  | ||||||
|             "version": version, |  | ||||||
|             "executables": [ |  | ||||||
|                 { |  | ||||||
|                     "path": "zstd.exe", |  | ||||||
|                     "symlink": [], |  | ||||||
|                     "add_to_devenv_path": True, |  | ||||||
|                     "checksum": "f14e78c0651851a670f508561d2c5d647da0ba08e6b73231f2e7539812bae311", |  | ||||||
|                 }, |  | ||||||
|             ], |  | ||||||
|             "add_to_devenv_script": [], |  | ||||||
|         }, |  | ||||||
|     ], |  | ||||||
| }) |  | ||||||
| 
 | 
 | ||||||
| # ------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------ | ||||||
| 
 | 
 | ||||||
| @ -101,7 +33,6 @@ zstd_exe           = "" | |||||||
| zip7_exe           = "" | zip7_exe           = "" | ||||||
| zip7_bootstrap_exe = "" | zip7_bootstrap_exe = "" | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| # Functions | # Functions | ||||||
| # ------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------ | ||||||
| def print_header(title): | def print_header(title): | ||||||
| @ -216,7 +147,8 @@ def download_and_install_archive(download_url, | |||||||
|                                  label, |                                  label, | ||||||
|                                  unzip_method, |                                  unzip_method, | ||||||
|                                  download_dir, |                                  download_dir, | ||||||
|                                  install_dir): |                                  install_dir, | ||||||
|  |                                  is_windows): | ||||||
| 
 | 
 | ||||||
|     exe_install_dir  = get_exe_install_dir(install_dir=install_dir, |     exe_install_dir  = get_exe_install_dir(install_dir=install_dir, | ||||||
|                                            label=label, |                                            label=label, | ||||||
| @ -321,7 +253,7 @@ def download_and_install_archive(download_url, | |||||||
|                     # We call this an intermediate zip file, we will extract that file |                     # We call this an intermediate zip file, we will extract that file | ||||||
|                     # with 7zip. After we're done, we will delete that _intermediate_ |                     # with 7zip. After we're done, we will delete that _intermediate_ | ||||||
|                     # file to cleanup our install directory. |                     # file to cleanup our install directory. | ||||||
|                     if archive_path.suffix == '.zst' or archive_path.suffix == '.xz': |                     if archive_path.suffix == '.zst' or archive_path.suffix == '.xz' or archive_path.suffix == '.gz': | ||||||
| 
 | 
 | ||||||
|                         archive_without_suffix = pathlib.Path(str(archive_path)[:-len(archive_path.suffix)]).name |                         archive_without_suffix = pathlib.Path(str(archive_path)[:-len(archive_path.suffix)]).name | ||||||
|                         next_archive_path = pathlib.Path(exe_install_dir, archive_without_suffix) |                         next_archive_path = pathlib.Path(exe_install_dir, archive_without_suffix) | ||||||
| @ -445,7 +377,7 @@ def download_and_install_archive(download_url, | |||||||
|             if os.path.exists(symlink_dest): |             if os.path.exists(symlink_dest): | ||||||
|                 # Windows uses hardlinks because symlinks require you to enable "developer" mode |                 # Windows uses hardlinks because symlinks require you to enable "developer" mode | ||||||
|                 # Everyone else uses symlinks |                 # Everyone else uses symlinks | ||||||
|                 if (IS_WINDOWS and not os.path.isfile(symlink_dest)) or (not IS_WINDOWS and not os.path.islink(symlink_dest)): |                 if (is_windows and not os.path.isfile(symlink_dest)) or (not is_windows and not os.path.islink(symlink_dest)): | ||||||
|                     lprint( "- Cannot create symlink! The destination file to create the symlink at.", level=1) |                     lprint( "- Cannot create symlink! The destination file to create the symlink at.", level=1) | ||||||
|                     lprint( "  already exists and is *not* a link. We cannot remove this safely as we", level=1) |                     lprint( "  already exists and is *not* a link. We cannot remove this safely as we", level=1) | ||||||
|                     lprint( "  don't know what it is, exiting.", level=1) |                     lprint( "  don't know what it is, exiting.", level=1) | ||||||
| @ -458,7 +390,7 @@ def download_and_install_archive(download_url, | |||||||
|                     os.unlink(symlink_dest) |                     os.unlink(symlink_dest) | ||||||
| 
 | 
 | ||||||
|             if not skip_link: |             if not skip_link: | ||||||
|                 if IS_WINDOWS == True: |                 if is_windows == True: | ||||||
|                     os.link(src=symlink_src, dst=symlink_dest) |                     os.link(src=symlink_src, dst=symlink_dest) | ||||||
|                 else: |                 else: | ||||||
|                     os.symlink(src=symlink_src, dst=symlink_dest) |                     os.symlink(src=symlink_src, dst=symlink_dest) | ||||||
| @ -471,7 +403,7 @@ def download_and_install_archive(download_url, | |||||||
| 
 | 
 | ||||||
|     global devenv_script_buffer |     global devenv_script_buffer | ||||||
|     for path in paths_to_add_to_devenv_script: |     for path in paths_to_add_to_devenv_script: | ||||||
|         if IS_WINDOWS: |         if is_windows: | ||||||
|             devenv_script_buffer += f"set PATH=%~dp0{path};%PATH%\n" |             devenv_script_buffer += f"set PATH=%~dp0{path};%PATH%\n" | ||||||
|         else: |         else: | ||||||
|             devenv_script_buffer += f"PATH=$( cd -- \"$( dirname -- \"${BASH_SOURCE[0]}\" ) &> /dev/null && pwd ){path}\";%PATH%\n" |             devenv_script_buffer += f"PATH=$( cd -- \"$( dirname -- \"${BASH_SOURCE[0]}\" ) &> /dev/null && pwd ){path}\";%PATH%\n" | ||||||
| @ -547,8 +479,10 @@ def validate_app_list(app_list): | |||||||
| 
 | 
 | ||||||
|     return result |     return result | ||||||
| 
 | 
 | ||||||
|  | internal_app_list = [] | ||||||
| devenv_script_buffer = "" | devenv_script_buffer = "" | ||||||
| def install_app_list(app_list, download_dir, install_dir): | 
 | ||||||
|  | def install_app_list(app_list, download_dir, install_dir, is_windows): | ||||||
|     title = "Internal Apps" if app_list is internal_app_list else "User Apps" |     title = "Internal Apps" if app_list is internal_app_list else "User Apps" | ||||||
|     print_header(title) |     print_header(title) | ||||||
|     result = {} |     result = {} | ||||||
| @ -573,22 +507,24 @@ def install_app_list(app_list, download_dir, install_dir): | |||||||
|             # Bootstrapping code, when installing the internal app list, we will |             # Bootstrapping code, when installing the internal app list, we will | ||||||
|             # assign the variables to point to our unarchiving tools. |             # assign the variables to point to our unarchiving tools. | ||||||
|             # ------------------------------------------------------------------ |             # ------------------------------------------------------------------ | ||||||
|             if app_list is internal_app_list: |             if is_windows: | ||||||
|                 global zip7_exe |                 if app_list is internal_app_list: | ||||||
|                 global zip7_bootstrap_exe |                     global zip7_exe | ||||||
|                 global zstd_exe |                     global zip7_bootstrap_exe | ||||||
|                 exe_path = get_exe_install_path(install_dir, label, version, manifest['executables'][0]['path']) |                     global zstd_exe | ||||||
|                 if label == '7zip': |                     exe_path = get_exe_install_path(install_dir, label, version, manifest['executables'][0]['path']) | ||||||
|                     if version == '920': |                     if label == '7zip': | ||||||
|                         unzip_method       = UnzipMethod.SHUTILS |                         if version == '920': | ||||||
|                         zip7_bootstrap_exe = exe_path |                             unzip_method       = UnzipMethod.SHUTILS | ||||||
|                     else: |                             zip7_bootstrap_exe = exe_path | ||||||
|                         unzip_method = UnzipMethod.ZIP7_BOOTSTRAP |                         else: | ||||||
|                         zip7_exe     = exe_path |                             unzip_method = UnzipMethod.ZIP7_BOOTSTRAP | ||||||
| 
 |                             zip7_exe     = exe_path | ||||||
|                 if label == 'zstd': |  | ||||||
|                     zstd_exe = exe_path |  | ||||||
| 
 | 
 | ||||||
|  |                     if label == 'zstd': | ||||||
|  |                         zstd_exe = exe_path | ||||||
|  |             else: | ||||||
|  |                 unzip_method = UnzipMethod.SHUTILS | ||||||
| 
 | 
 | ||||||
|             # Download and install |             # Download and install | ||||||
|             # ------------------------------------------------------------------ |             # ------------------------------------------------------------------ | ||||||
| @ -600,7 +536,8 @@ def install_app_list(app_list, download_dir, install_dir): | |||||||
|                                          label=label, |                                          label=label, | ||||||
|                                          unzip_method=unzip_method, |                                          unzip_method=unzip_method, | ||||||
|                                          download_dir=download_dir, |                                          download_dir=download_dir, | ||||||
|                                          install_dir=install_dir) |                                          install_dir=install_dir, | ||||||
|  |                                          is_windows=is_windows) | ||||||
| 
 | 
 | ||||||
|             # Post-installation |             # Post-installation | ||||||
|             # ------------------------------------------------------------------ |             # ------------------------------------------------------------------ | ||||||
| @ -645,6 +582,7 @@ base_install_dir   = default_base_install_dir | |||||||
| 
 | 
 | ||||||
| def run(user_app_list, | def run(user_app_list, | ||||||
|         devenv_script_name, |         devenv_script_name, | ||||||
|  |         is_windows, | ||||||
|         download_dir=base_downloads_dir, |         download_dir=base_downloads_dir, | ||||||
|         install_dir=base_install_dir): |         install_dir=base_install_dir): | ||||||
|     """ Download and install the given user app list at the specified |     """ Download and install the given user app list at the specified | ||||||
| @ -668,6 +606,75 @@ def run(user_app_list, | |||||||
|     base_downloads_dir = download_dir |     base_downloads_dir = download_dir | ||||||
|     base_install_dir = install_dir |     base_install_dir = install_dir | ||||||
| 
 | 
 | ||||||
|  |     # -------------------------------------------------------------------------- | ||||||
|  |     # This app list must always be installed, they provide the tools to install all | ||||||
|  |     # other archives. Upon installation, we will collect the installation executable | ||||||
|  |     # path and store them in global variables for the rest of the progam to use to | ||||||
|  |     # unzip the files. | ||||||
|  |     global internal_app_list | ||||||
|  |     internal_app_list = [] | ||||||
|  | 
 | ||||||
|  |     if is_windows: | ||||||
|  |         internal_app_list.append({ | ||||||
|  |             'label': '7zip', | ||||||
|  |             'manifests': [], | ||||||
|  |         }) | ||||||
|  | 
 | ||||||
|  |         version = "920" | ||||||
|  |         internal_app_list[-1]['manifests'].append({ # Download the bootstrap 7zip, this can be unzipped using shutils | ||||||
|  |             'download_checksum': '2a3afe19c180f8373fa02ff00254d5394fec0349f5804e0ad2f6067854ff28ac', | ||||||
|  |             'download_url': f'https://www.7-zip.org/a/7za{version}.zip', | ||||||
|  |             'version': version, | ||||||
|  |             'executables': [ | ||||||
|  |                 { | ||||||
|  |                     'path': '7za.exe', | ||||||
|  |                     'symlink': [], | ||||||
|  |                     'add_to_devenv_path': False, | ||||||
|  |                     'checksum': 'c136b1467d669a725478a6110ebaaab3cb88a3d389dfa688e06173c066b76fcf' | ||||||
|  |                 } | ||||||
|  |             ], | ||||||
|  |             'add_to_devenv_script': [], | ||||||
|  |         }) | ||||||
|  | 
 | ||||||
|  |         version = "2201" | ||||||
|  |         internal_app_list[-1]['manifests'].append({ # Download proper 7zip, extract this exe with the bootstrap 7zip | ||||||
|  |             'download_checksum': 'b055fee85472921575071464a97a79540e489c1c3a14b9bdfbdbab60e17f36e4', | ||||||
|  |             'download_url':      f'https://www.7-zip.org/a/7z{version}-x64.exe', | ||||||
|  |             'version': version, | ||||||
|  |             'executables': [ | ||||||
|  |                 { | ||||||
|  |                     'path': '7z.exe', | ||||||
|  |                     'symlink': [], | ||||||
|  |                     'add_to_devenv_path': True, | ||||||
|  |                     'checksum': '254cf6411d38903b2440819f7e0a847f0cfee7f8096cfad9e90fea62f42b0c23' | ||||||
|  |                 } | ||||||
|  |             ], | ||||||
|  |             'add_to_devenv_script':  [], | ||||||
|  |         }) | ||||||
|  | 
 | ||||||
|  |         # ------------------------------------------------------------------------------ | ||||||
|  | 
 | ||||||
|  |         version = "1.5.2" | ||||||
|  |         internal_app_list.append({ | ||||||
|  |             "label": "zstd", | ||||||
|  |             "manifests": [ | ||||||
|  |                 { | ||||||
|  |                     "download_checksum": "68897cd037ee5e44c6d36b4dbbd04f1cc4202f9037415a3251951b953a257a09", | ||||||
|  |                     "download_url": f"https://github.com/facebook/zstd/releases/download/v{version}/zstd-v{version}-win64.zip", | ||||||
|  |                     "version": version, | ||||||
|  |                     "executables": [ | ||||||
|  |                         { | ||||||
|  |                             "path": "zstd.exe", | ||||||
|  |                             "symlink": [], | ||||||
|  |                             "add_to_devenv_path": True, | ||||||
|  |                             "checksum": "f14e78c0651851a670f508561d2c5d647da0ba08e6b73231f2e7539812bae311", | ||||||
|  |                         }, | ||||||
|  |                     ], | ||||||
|  |                     "add_to_devenv_script": [], | ||||||
|  |                 }, | ||||||
|  |             ], | ||||||
|  |         }) | ||||||
|  | 
 | ||||||
|     # Run |     # Run | ||||||
|     # -------------------------------------------------------------------------- |     # -------------------------------------------------------------------------- | ||||||
|     # Create the starting directories and install the internal app list (e.g. |     # Create the starting directories and install the internal app list (e.g. | ||||||
| @ -705,16 +712,18 @@ def run(user_app_list, | |||||||
|     # Install apps |     # Install apps | ||||||
|     internal_apps = install_app_list(app_list=internal_app_list, |     internal_apps = install_app_list(app_list=internal_app_list, | ||||||
|                                      download_dir=download_dir, |                                      download_dir=download_dir, | ||||||
|                                      install_dir=install_dir) |                                      install_dir=install_dir, | ||||||
|  |                                      is_windows=is_windows) | ||||||
| 
 | 
 | ||||||
|     user_apps     = install_app_list(app_list=user_app_list, |     user_apps     = install_app_list(app_list=user_app_list, | ||||||
|                                      download_dir=download_dir, |                                      download_dir=download_dir, | ||||||
|                                      install_dir=install_dir) |                                      install_dir=install_dir, | ||||||
|  |                                      is_windows=is_windows) | ||||||
| 
 | 
 | ||||||
|     # Write the devenv script with environment variables |     # Write the devenv script with environment variables | ||||||
|     devenv_script_buffer += "set PATH=%~dp0Symlinks;%PATH%\n" |     devenv_script_buffer += "set PATH=%~dp0Symlinks;%PATH%\n" | ||||||
| 
 | 
 | ||||||
|     devenv_script_name = f"{devenv_script_name}.bat" if IS_WINDOWS else f"{devenv_script_name}dev_env.sh" |     devenv_script_name = f"{devenv_script_name}.bat" if is_windows else f"{devenv_script_name}dev_env.sh" | ||||||
|     devenv_script_path = pathlib.Path(install_dir, devenv_script_name) |     devenv_script_path = pathlib.Path(install_dir, devenv_script_name) | ||||||
|     lprint(f"Writing script to augment the environment with installed applications: {devenv_script_path}") |     lprint(f"Writing script to augment the environment with installed applications: {devenv_script_path}") | ||||||
|     with open(devenv_script_path, 'w') as file: |     with open(devenv_script_path, 'w') as file: | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,51 +1,53 @@ | |||||||
| def get_manifest(): | def get_manifest(is_windows): | ||||||
|     result = [] |     result = [] | ||||||
| 
 | 
 | ||||||
|     # -------------------------------------------------------------------------- |     # -------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
|     version = "7.9.0" |     if is_windows: | ||||||
|     result.append({ |         version = "7.9.0" | ||||||
|         "label": "digiKam", |         result.append({ | ||||||
|         "manifests": [ |             "label": "digiKam", | ||||||
|             { |             "manifests": [ | ||||||
|                 "download_url": f"https://download.kde.org/stable/digikam/{version}/digiKam-{version}-Win64.tar.xz", |                 { | ||||||
|                 "download_checksum": "810476996461dc9275e97f1aa0438c77d0fe49f6ae5f6ae36fca983022dafe71", |                     "download_url": f"https://download.kde.org/stable/digikam/{version}/digiKam-{version}-Win64.tar.xz", | ||||||
|                 "version": version, |                     "download_checksum": "810476996461dc9275e97f1aa0438c77d0fe49f6ae5f6ae36fca983022dafe71", | ||||||
|                 "executables": [ |                     "version": version, | ||||||
|                     { |                     "executables": [ | ||||||
|                         "path": "digikam.exe", |                         { | ||||||
|                         "symlink": [], |                             "path": "digikam.exe", | ||||||
|                         "add_to_devenv_path": False, |                             "symlink": [], | ||||||
|                         "checksum": "aebabac51581c4a0a8fd6950c728d5b8a2306b7251e5f9b1987a437f3576d2c8", |                             "add_to_devenv_path": False, | ||||||
|                     } |                             "checksum": "aebabac51581c4a0a8fd6950c728d5b8a2306b7251e5f9b1987a437f3576d2c8", | ||||||
|                 ], |                         } | ||||||
|                 "add_to_devenv_script": [], |                     ], | ||||||
|             } |                     "add_to_devenv_script": [], | ||||||
|         ], |                 } | ||||||
|     }) |             ], | ||||||
|  |         }) | ||||||
| 
 | 
 | ||||||
|     # -------------------------------------------------------------------------- |     # -------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
|     version = "0.25.0" |     if is_windows: | ||||||
|     result.append({ |         version = "0.25.0" | ||||||
|         "label": "PicoTorrent", |         result.append({ | ||||||
|         "manifests": [ |             "label": "PicoTorrent", | ||||||
|             { |             "manifests": [ | ||||||
|                 "download_url": f"https://github.com/picotorrent/picotorrent/releases/download/v{version}/PicoTorrent-{version}-x64.zip", |                 { | ||||||
|                 "download_checksum": "375c2445db76b7d51b7cd351b1c5b40f895fb15b502da6073e19aaf6cb08cd76", |                     "download_url": f"https://github.com/picotorrent/picotorrent/releases/download/v{version}/PicoTorrent-{version}-x64.zip", | ||||||
|                 "version": version, |                     "download_checksum": "375c2445db76b7d51b7cd351b1c5b40f895fb15b502da6073e19aaf6cb08cd76", | ||||||
|                 "executables": [ |                     "version": version, | ||||||
|                     { |                     "executables": [ | ||||||
|                         "path": "picotorrent.exe", |                         { | ||||||
|                         "symlink": [], |                             "path": "picotorrent.exe", | ||||||
|                         "add_to_devenv_path": False, |                             "symlink": [], | ||||||
|                         "checksum": "135adefb184d6a28d75b18fefebcd23e62005246664ff12f8af5687823630829", |                             "add_to_devenv_path": False, | ||||||
|                     } |                             "checksum": "135adefb184d6a28d75b18fefebcd23e62005246664ff12f8af5687823630829", | ||||||
|                 ], |                         } | ||||||
|                 "add_to_devenv_script": [], |                     ], | ||||||
|             } |                     "add_to_devenv_script": [], | ||||||
|         ], |                 } | ||||||
|     }) |             ], | ||||||
|  |         }) | ||||||
| 
 | 
 | ||||||
|     # -------------------------------------------------------------------------- |     # -------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										389
									
								
								win_install.py
									
									
									
									
									
								
							
							
						
						
									
										389
									
								
								win_install.py
									
									
									
									
									
								
							| @ -33,18 +33,15 @@ def git_clone(install_dir, git_exe, url, commit_hash): | |||||||
| 
 | 
 | ||||||
| # Arguments | # Arguments | ||||||
| # ------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------ | ||||||
| default_download_dir = devenver.script_dir / 'Downloads' |  | ||||||
| default_install_dir  = devenver.script_dir / 'Win' |  | ||||||
| 
 |  | ||||||
| arg_parser = argparse.ArgumentParser() | arg_parser = argparse.ArgumentParser() | ||||||
| arg_parser.add_argument('--download-dir', | arg_parser.add_argument('--download-dir', | ||||||
|                         help=f'Set the directory where downloaded files are cached (default: {default_download_dir})', |                         help=f'Set the directory where downloaded files are cached (default: ./(Win|Linux))', | ||||||
|                         default=default_download_dir, |                         default="", | ||||||
|                         type=pathlib.Path) |                         type=pathlib.Path) | ||||||
| 
 | 
 | ||||||
| arg_parser.add_argument('--install-dir', | arg_parser.add_argument('--install-dir', | ||||||
|                         help=f'Set the directory where downloaded files are installed (default: {default_install_dir})', |                         help=f'Set the directory where downloaded files are installed (default: ./Downloads)', | ||||||
|                         default=default_install_dir, |                         default="", | ||||||
|                         type=pathlib.Path) |                         type=pathlib.Path) | ||||||
| 
 | 
 | ||||||
| arg_parser.add_argument('--with-dev-apps', | arg_parser.add_argument('--with-dev-apps', | ||||||
| @ -57,9 +54,23 @@ arg_parser.add_argument('--with-user-apps', | |||||||
|                         const=True, |                         const=True, | ||||||
|                         action="store_const") |                         action="store_const") | ||||||
| 
 | 
 | ||||||
|  | arg_parser.add_argument('operating_system', | ||||||
|  |                         choices=['win', 'linux'], | ||||||
|  |                         help=f'Download and install apps for the specified operating system') | ||||||
|  | 
 | ||||||
| args         = arg_parser.parse_args() | args         = arg_parser.parse_args() | ||||||
| download_dir = args.download_dir | download_dir = args.download_dir | ||||||
| install_dir  = args.install_dir | install_dir  = args.install_dir | ||||||
|  | is_windows   = args.operating_system == 'win' | ||||||
|  | 
 | ||||||
|  | if download_dir == pathlib.Path(""): | ||||||
|  |     download_dir = devenver.script_dir / 'Downloads' | ||||||
|  | 
 | ||||||
|  | if install_dir == pathlib.Path(""): | ||||||
|  |     if is_windows: | ||||||
|  |         install_dir  = devenver.script_dir / 'Win' | ||||||
|  |     else: | ||||||
|  |         install_dir  = devenver.script_dir / 'Linux' | ||||||
| 
 | 
 | ||||||
| # Install development apps | # Install development apps | ||||||
| # ------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------ | ||||||
| @ -67,162 +78,141 @@ if args.with_dev_apps: | |||||||
|     # Run DEVenver, installing the portable apps |     # Run DEVenver, installing the portable apps | ||||||
|     # -------------------------------------------------------------------------- |     # -------------------------------------------------------------------------- | ||||||
|     dev_env_script_name = "dev_env" |     dev_env_script_name = "dev_env" | ||||||
|     app_list            = win_app_manifest_dev.get_manifest() |     app_list            = win_app_manifest_dev.get_manifest(is_windows=is_windows) | ||||||
|     installed_dev_apps  = devenver.run(user_app_list=app_list, |     installed_dev_apps  = devenver.run(user_app_list=app_list, | ||||||
|                                        download_dir=download_dir, |                                        download_dir=download_dir, | ||||||
|                                        install_dir=install_dir, |                                        install_dir=install_dir, | ||||||
|                                        devenv_script_name=dev_env_script_name) |                                        devenv_script_name=dev_env_script_name, | ||||||
|  |                                        is_windows=is_windows) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     # Install MSVC |     if is_windows: | ||||||
|     # -------------------------------------------------------------------------- |         # Install MSVC | ||||||
|     devenver.print_header("Install MSVC & Windows 10 SDK") |         # -------------------------------------------------------------------------- | ||||||
|     msvc_script       = devenver.script_dir / "win_portable_msvc.py" |         devenver.print_header("Install MSVC & Windows 10 SDK") | ||||||
|     msvc_version      = "14.34" |         msvc_script       = devenver.script_dir / "win_portable_msvc.py" | ||||||
|     win10_sdk_version = "22621" |         msvc_version      = "14.34" | ||||||
|  |         win10_sdk_version = "22621" | ||||||
| 
 | 
 | ||||||
|     msvc_install_dir  = install_dir / "msvc" |         msvc_install_dir  = install_dir / "msvc" | ||||||
| 
 | 
 | ||||||
|     # Basic heuristic to see if we"ve already installed the MSVC/SDK version |         # Basic heuristic to see if we"ve already installed the MSVC/SDK version | ||||||
|     msvc_installed      = False |         msvc_installed      = False | ||||||
|     win10_sdk_installed = False |         win10_sdk_installed = False | ||||||
| 
 | 
 | ||||||
|     msvc_find_test_dir      = msvc_install_dir / "VC/Tools/MSVC" |         msvc_find_test_dir      = msvc_install_dir / "VC/Tools/MSVC" | ||||||
|     win10_sdk_find_test_dir = msvc_install_dir / "Windows Kits/10" |         win10_sdk_find_test_dir = msvc_install_dir / "Windows Kits/10" | ||||||
| 
 | 
 | ||||||
|     if os.path.exists(msvc_find_test_dir): |         if os.path.exists(msvc_find_test_dir): | ||||||
|         for file_name in os.listdir(msvc_find_test_dir): |             for file_name in os.listdir(msvc_find_test_dir): | ||||||
|             msvc_installed = file_name.startswith(msvc_version) |                 msvc_installed = file_name.startswith(msvc_version) | ||||||
|             if msvc_installed == True: |                 if msvc_installed == True: | ||||||
|                 devenver.lprint(f"MSVC {msvc_version} install detected (skip download) in {msvc_find_test_dir}\\{file_name}") |                     devenver.lprint(f"MSVC {msvc_version} install detected (skip download) in {msvc_find_test_dir}\\{file_name}") | ||||||
|                 break |                     break | ||||||
|     if not msvc_installed: |         if not msvc_installed: | ||||||
|         devenver.lprint(f"MSVC {msvc_version} install not detected (need to download) in {msvc_find_test_dir}") |             devenver.lprint(f"MSVC {msvc_version} install not detected (need to download) in {msvc_find_test_dir}") | ||||||
| 
 | 
 | ||||||
|     if os.path.exists(win10_sdk_find_test_dir): |         if os.path.exists(win10_sdk_find_test_dir): | ||||||
|         for file_name in os.listdir(win10_sdk_find_test_dir / "bin"): |             for file_name in os.listdir(win10_sdk_find_test_dir / "bin"): | ||||||
|             # Check if directory contains version substring, 22621, e.g. "10.0.22621.0" |                 # Check if directory contains version substring, 22621, e.g. "10.0.22621.0" | ||||||
|             win10_sdk_installed = file_name.count(win10_sdk_version) > 0 |                 win10_sdk_installed = file_name.count(win10_sdk_version) > 0 | ||||||
|             if win10_sdk_installed == True: |                 if win10_sdk_installed == True: | ||||||
|                 install_locations = f"{win10_sdk_find_test_dir}\\*\\{file_name}" |                     install_locations = f"{win10_sdk_find_test_dir}\\*\\{file_name}" | ||||||
|                 devenver.lprint(f"Windows 10 SDK {win10_sdk_version} install detected (skip download) in {install_locations}") |                     devenver.lprint(f"Windows 10 SDK {win10_sdk_version} install detected (skip download) in {install_locations}") | ||||||
|                 break |                     break | ||||||
|     if not win10_sdk_installed: |         if not win10_sdk_installed: | ||||||
|         devenver.lprint(f"Windows 10 SDK {win10_sdk_version} not detected (need to download) in {win10_sdk_find_test_dir}") |             devenver.lprint(f"Windows 10 SDK {win10_sdk_version} not detected (need to download) in {win10_sdk_find_test_dir}") | ||||||
| 
 | 
 | ||||||
|     # Install MSVC |         # Install MSVC | ||||||
|     if msvc_installed == False or win10_sdk_installed == False: |         if msvc_installed == False or win10_sdk_installed == False: | ||||||
|         with tempfile.TemporaryDirectory() as temp_dir: |             with tempfile.TemporaryDirectory() as temp_dir: | ||||||
| 
 | 
 | ||||||
|             # Invoke the MSVC script to download MSVC to disk |                 # Invoke the MSVC script to download MSVC to disk | ||||||
|             command = f"\"{sys.executable}\" \"{msvc_script}\" --accept-license" |                 command = f"\"{sys.executable}\" \"{msvc_script}\" --accept-license" | ||||||
|             line    = "Invoking MSVC script to install" |                 line    = "Invoking MSVC script to install" | ||||||
|             if msvc_installed: |                 if msvc_installed: | ||||||
|                 command += " --no-msvc" |                     command += " --no-msvc" | ||||||
|             else: |                 else: | ||||||
|                 command += f" --msvc-version {msvc_version}" |                     command += f" --msvc-version {msvc_version}" | ||||||
|                 line    += f" MSVC {msvc_version}" |                     line    += f" MSVC {msvc_version}" | ||||||
| 
 | 
 | ||||||
|             if win10_sdk_installed: |                 if win10_sdk_installed: | ||||||
|                 command += " --no-sdk" |                     command += " --no-sdk" | ||||||
|             else: |                 else: | ||||||
|                 command += f" --sdk-version {win10_sdk_version}" |                     command += f" --sdk-version {win10_sdk_version}" | ||||||
|                 line    += f" Windows 10 SDK {win10_sdk_version}" |                     line    += f" Windows 10 SDK {win10_sdk_version}" | ||||||
| 
 | 
 | ||||||
|             devenver.lprint(line) |                 devenver.lprint(line) | ||||||
|             devenver.lprint(f"Command: {command}") |                 devenver.lprint(f"Command: {command}") | ||||||
|             subprocess.run(command, cwd=temp_dir) |                 subprocess.run(command, cwd=temp_dir) | ||||||
| 
 | 
 | ||||||
|             # Merge the download MSVC installation to our unified install dir |                 # Merge the download MSVC installation to our unified install dir | ||||||
|             temp_msvc_dir = pathlib.Path(temp_dir, "msvc") |                 temp_msvc_dir = pathlib.Path(temp_dir, "msvc") | ||||||
|             for src_dir, dirs, files in os.walk(temp_msvc_dir): |                 for src_dir, dirs, files in os.walk(temp_msvc_dir): | ||||||
|                 install_dir = src_dir.replace(str(temp_msvc_dir), str(msvc_install_dir), 1) |                     install_dir = src_dir.replace(str(temp_msvc_dir), str(msvc_install_dir), 1) | ||||||
|                 if not os.path.exists(install_dir): |                     if not os.path.exists(install_dir): | ||||||
|                     os.makedirs(install_dir) |                         os.makedirs(install_dir) | ||||||
|                 for file_ in files: |                     for file_ in files: | ||||||
|                     src  = os.path.join(src_dir, file_) |                         src  = os.path.join(src_dir, file_) | ||||||
|                     dest = os.path.join(install_dir, file_) |                         dest = os.path.join(install_dir, file_) | ||||||
|                     if os.path.exists(dest): |                         if os.path.exists(dest): | ||||||
|                         if os.path.samefile(src, dest): |                             if os.path.samefile(src, dest): | ||||||
|                             continue |                                 continue | ||||||
|                         os.remove(dest) |                             os.remove(dest) | ||||||
|                     shutil.move(src, install_dir) |                         shutil.move(src, install_dir) | ||||||
| 
 | 
 | ||||||
|             devenver.lprint(f"MSVC {msvc_version} Windows 10 SDK {win10_sdk_version} installed: {msvc_install_dir}") |                 devenver.lprint(f"MSVC {msvc_version} Windows 10 SDK {win10_sdk_version} installed: {msvc_install_dir}") | ||||||
| 
 | 
 | ||||||
|     # Install apps dependent on Git |         # Install apps dependent on Git | ||||||
|     # -------------------------------------------------------------------------- |         # -------------------------------------------------------------------------- | ||||||
|     devenver.print_header("Install apps that rely on Git") |         devenver.print_header("Install apps that rely on Git") | ||||||
|     git_exe = installed_dev_apps["Git"][0]['exe_path'] |         git_exe = installed_dev_apps["Git"][0]['exe_path'] | ||||||
| 
 | 
 | ||||||
|     # Clink |         # Clink | ||||||
|     # -------------------------------------------------------------------------- |         # -------------------------------------------------------------------------- | ||||||
|     clink_install_dir = installed_dev_apps["Clink"][0]['install_dir'] |         clink_install_dir = installed_dev_apps["Clink"][0]['install_dir'] | ||||||
|     clink_base_dir    = clink_install_dir.parent |         clink_base_dir    = clink_install_dir.parent | ||||||
| 
 | 
 | ||||||
|     # Gizmos |         # Gizmos | ||||||
|     clink_gizmo_git_hash    = "fb2edd9" |         clink_gizmo_git_hash    = "fb2edd9" | ||||||
|     clink_gizmo_install_dir = clink_base_dir / "clink-gizmos" |         clink_gizmo_install_dir = clink_base_dir / "clink-gizmos" | ||||||
|     git_clone(install_dir=clink_gizmo_install_dir, |         git_clone(install_dir=clink_gizmo_install_dir, | ||||||
|               git_exe=git_exe, |                   git_exe=git_exe, | ||||||
|               url="https://github.com/chrisant996/clink-gizmos", |                   url="https://github.com/chrisant996/clink-gizmos", | ||||||
|               commit_hash=clink_gizmo_git_hash) |                   commit_hash=clink_gizmo_git_hash) | ||||||
| 
 | 
 | ||||||
|     # Completions |         # Completions | ||||||
|     clink_completions_git_hash    = "86b6f07" |         clink_completions_git_hash    = "86b6f07" | ||||||
|     clink_completions_install_dir = clink_base_dir / "clink-completions" |         clink_completions_install_dir = clink_base_dir / "clink-completions" | ||||||
|     git_clone(install_dir=clink_completions_install_dir, |         git_clone(install_dir=clink_completions_install_dir, | ||||||
|               git_exe=git_exe, |                   git_exe=git_exe, | ||||||
|               url="https://github.com/vladimir-kotikov/clink-completions", |                   url="https://github.com/vladimir-kotikov/clink-completions", | ||||||
|               commit_hash=clink_completions_git_hash) |                   commit_hash=clink_completions_git_hash) | ||||||
| 
 | 
 | ||||||
|     # Odin |         # Odin | ||||||
|     # -------------------------------------------------------------------------- |         # -------------------------------------------------------------------------- | ||||||
|     odin_git_hash    = "9ae1bfb6" |         odin_git_hash    = "9ae1bfb6" | ||||||
|     odin_install_dir = install_dir / "Odin" |         odin_install_dir = install_dir / "Odin" | ||||||
|     git_clone(install_dir=odin_install_dir, |         git_clone(install_dir=odin_install_dir, | ||||||
|               git_exe=git_exe, |                   git_exe=git_exe, | ||||||
|               url="https://github.com/odin-lang/odin.git", |                   url="https://github.com/odin-lang/odin.git", | ||||||
|               commit_hash=odin_git_hash) |                   commit_hash=odin_git_hash) | ||||||
| 
 | 
 | ||||||
|     # TODO: We can't do this yet because the odin build requires a registry hack so |         # TODO: We can't do this yet because the odin build requires a registry hack so | ||||||
|     # that it knows where to find MSVC. |         # that it knows where to find MSVC. | ||||||
| 
 | 
 | ||||||
|     # Build Odin |         # Build Odin | ||||||
|     # subprocess.run(f"{git_exe} checkout {odin_git_hash}", |         # subprocess.run(f"{git_exe} checkout {odin_git_hash}", | ||||||
|     #                cwd=odin_install_dir) |         #                cwd=odin_install_dir) | ||||||
| 
 | 
 | ||||||
|     # Install left-overs |         # Install clink configuration | ||||||
|     # -------------------------------------------------------------------------- |         # -------------------------------------------------------------------------- | ||||||
|     devenver.print_header("Install configuration files") |         clink_profile_dir   = clink_base_dir / "profile" | ||||||
|  |         clink_settings_path = clink_profile_dir / "clink_settings" | ||||||
|  |         devenver.lprint(f"Installing clink_settings to: {clink_settings_path}") | ||||||
| 
 | 
 | ||||||
|     # Copy init.vim to NVIM directory |         clink_settings_path.parent.mkdir(exist_ok=True) | ||||||
|     internal_dir          = pathlib.Path(os.path.dirname(os.path.abspath(__file__))) / "Internal" |         clink_settings_path.write_text(f"""# When this file is named "default_settings" and is in the binaries | ||||||
|     nvim_init_dir         = pathlib.Path(os.path.expanduser("~")) / "AppData" / "Local" / "nvim" |  | ||||||
|     nvim_config_dest_path = nvim_init_dir / "init.vim" |  | ||||||
|     nvim_config_src_path  = internal_dir  / "os_nvim_init.vim" |  | ||||||
| 
 |  | ||||||
|     devenver.lprint(f"Installing NVIM config to {nvim_config_dest_path}") |  | ||||||
|     nvim_init_dir.mkdir(parents=True, exist_ok=True) |  | ||||||
|     shutil.copy(nvim_config_src_path, nvim_config_dest_path) |  | ||||||
| 
 |  | ||||||
|     # Download vim.plug to NVIM init directory |  | ||||||
|     nvim_plug_vim_dir  = nvim_init_dir / "autoload" |  | ||||||
|     nvim_plug_vim_path = nvim_plug_vim_dir / "plug.vim" |  | ||||||
|     nvim_plug_vim_dir.mkdir(parents=True, exist_ok=True) |  | ||||||
|     if not os.path.exists(nvim_plug_vim_path): |  | ||||||
|         devenver.lprint(f"Installing NVIM plugin manager to {nvim_plug_vim_path}") |  | ||||||
|         urllib.request.urlretrieve("https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim", |  | ||||||
|                                    nvim_plug_vim_path) |  | ||||||
| 
 |  | ||||||
|     # Install clink configuration |  | ||||||
|     # -------------------------------------------------------------------------- |  | ||||||
|     clink_profile_dir   = clink_base_dir / "profile" |  | ||||||
|     clink_settings_path = clink_profile_dir / "clink_settings" |  | ||||||
|     devenver.lprint(f"Installing clink_settings to: {clink_settings_path}") |  | ||||||
| 
 |  | ||||||
|     clink_settings_path.parent.mkdir(exist_ok=True) |  | ||||||
|     clink_settings_path.write_text(f"""# When this file is named "default_settings" and is in the binaries |  | ||||||
| # directory or profile directory, it provides enhanced default settings. | # directory or profile directory, it provides enhanced default settings. | ||||||
| 
 | 
 | ||||||
| # Override built-in default settings with ones that provide a more | # Override built-in default settings with ones that provide a more | ||||||
| @ -260,16 +250,16 @@ clink.path                        = {clink_completions_install_dir};{clink_gizmo | |||||||
| fzf.default_bindings              = True | fzf.default_bindings              = True | ||||||
| """) | """) | ||||||
| 
 | 
 | ||||||
|     # Install wezterm configuration |         # Install wezterm configuration | ||||||
|     # -------------------------------------------------------------------------- |         # -------------------------------------------------------------------------- | ||||||
|     wezterm_config_dest_path = installed_dev_apps["WezTerm"][0]["install_dir"] / "wezterm.lua" |         wezterm_config_dest_path = installed_dev_apps["WezTerm"][0]["install_dir"] / "wezterm.lua" | ||||||
|     devenver.lprint(f"Installing WezTerm config to {wezterm_config_dest_path}") |         devenver.lprint(f"Installing WezTerm config to {wezterm_config_dest_path}") | ||||||
| 
 | 
 | ||||||
|     clink_exe_path                 = clink_install_dir.relative_to(install_dir) / "clink_x64.exe" |         clink_exe_path                 = clink_install_dir.relative_to(install_dir) / "clink_x64.exe" | ||||||
|     clink_exe_path_for_wezterm     = str(clink_exe_path).replace("\\", "\\\\") |         clink_exe_path_for_wezterm     = str(clink_exe_path).replace("\\", "\\\\") | ||||||
|     clink_profile_path_for_wezterm = str(clink_profile_dir.relative_to(install_dir)).replace("\\", "\\\\") |         clink_profile_path_for_wezterm = str(clink_profile_dir.relative_to(install_dir)).replace("\\", "\\\\") | ||||||
| 
 | 
 | ||||||
|     wezterm_config_dest_path.write_text(f"""local wezterm = require 'wezterm'; |         wezterm_config_dest_path.write_text(f"""local wezterm = require 'wezterm'; | ||||||
| 
 | 
 | ||||||
| local default_prog | local default_prog | ||||||
| local set_environment_variables = {{}} | local set_environment_variables = {{}} | ||||||
| @ -302,12 +292,12 @@ return {{ | |||||||
| }} | }} | ||||||
| """) | """) | ||||||
| 
 | 
 | ||||||
|     # Wezterm super terminal |         # Wezterm super terminal | ||||||
|     # -------------------------------------------------------------------------- |         # -------------------------------------------------------------------------- | ||||||
|     wezterm_terminal_script_path = install_dir / "dev_terminal.bat" |         wezterm_terminal_script_path = install_dir / "dev_terminal.bat" | ||||||
|     devenver.lprint(f"Installing WezTerm terminal script to {wezterm_terminal_script_path}") |         devenver.lprint(f"Installing WezTerm terminal script to {wezterm_terminal_script_path}") | ||||||
| 
 | 
 | ||||||
|     wezterm_terminal_script_path.write_text(f"""@echo off |         wezterm_terminal_script_path.write_text(f"""@echo off | ||||||
| setlocal EnableDelayedExpansion | setlocal EnableDelayedExpansion | ||||||
| 
 | 
 | ||||||
| set working_dir= | set working_dir= | ||||||
| @ -319,12 +309,12 @@ if "%~1" neq "" ( | |||||||
| start "" /MAX "%~dp0{installed_dev_apps["WezTerm"][0]["exe_path"].relative_to(install_dir)}" !working_dir! | start "" /MAX "%~dp0{installed_dev_apps["WezTerm"][0]["exe_path"].relative_to(install_dir)}" !working_dir! | ||||||
| """) | """) | ||||||
| 
 | 
 | ||||||
|     # Run background scripts helper |         # Run background scripts helper | ||||||
|     # -------------------------------------------------------------------------- |         # -------------------------------------------------------------------------- | ||||||
|     background_apps_script_path = install_dir / "dev_run_background_apps.bat" |         background_apps_script_path = install_dir / "dev_run_background_apps.bat" | ||||||
|     devenver.lprint(f"Installing run background script (helper) to {background_apps_script_path}") |         devenver.lprint(f"Installing run background script (helper) to {background_apps_script_path}") | ||||||
| 
 | 
 | ||||||
|     background_apps_script_path.write_text(f"""@echo off |         background_apps_script_path.write_text(f"""@echo off | ||||||
| start "" "%~dp0{installed_dev_apps["Everything"][0]["exe_path"].relative_to(install_dir)}" | start "" "%~dp0{installed_dev_apps["Everything"][0]["exe_path"].relative_to(install_dir)}" | ||||||
| 
 | 
 | ||||||
| REM Ensure that eyes-thanks creates their portable INI file in the correct directory | REM Ensure that eyes-thanks creates their portable INI file in the correct directory | ||||||
| @ -336,49 +326,49 @@ start "" "%~dp0{installed_dev_apps["ShareX"][0]["exe_path"].relative_to(install_ | |||||||
| start "" "%~dp0{installed_dev_apps["SpeedCrunch"][0]["exe_path"].relative_to(install_dir)}" | start "" "%~dp0{installed_dev_apps["SpeedCrunch"][0]["exe_path"].relative_to(install_dir)}" | ||||||
| """) | """) | ||||||
| 
 | 
 | ||||||
|     # Create Odin work-around scripts |         # Create Odin work-around scripts | ||||||
|     # -------------------------------------------------------------------------- |         # -------------------------------------------------------------------------- | ||||||
|     # Odin uses J. Blow's Microsoft craziness SDK locator which relies on the |         # Odin uses J. Blow's Microsoft craziness SDK locator which relies on the | ||||||
|     # registry. Here we inject the registry entry that the SDK locator checks for |         # registry. Here we inject the registry entry that the SDK locator checks for | ||||||
|     # finding our portable MSVC installation. |         # finding our portable MSVC installation. | ||||||
|     win10_sdk_find_test_dir_reg_path = str(win10_sdk_find_test_dir).replace("\\", "\\\\") |         win10_sdk_find_test_dir_reg_path = str(win10_sdk_find_test_dir).replace("\\", "\\\\") | ||||||
| 
 | 
 | ||||||
|     odin_msvc_install_script_path   = install_dir / "odin_msvc_install_workaround.reg" |         odin_msvc_install_script_path   = install_dir / "odin_msvc_install_workaround.reg" | ||||||
|     odin_msvc_uninstall_script_path = install_dir / "odin_msvc_uninstall_workaround.reg" |         odin_msvc_uninstall_script_path = install_dir / "odin_msvc_uninstall_workaround.reg" | ||||||
| 
 | 
 | ||||||
|     devenver.lprint(f"Installing Odin MSVC workaround scripts", level=0) |         devenver.lprint(f"Installing Odin MSVC workaround scripts", level=0) | ||||||
|     devenver.lprint(f" - {odin_msvc_install_script_path}", level=1) |         devenver.lprint(f" - {odin_msvc_install_script_path}", level=1) | ||||||
|     devenver.lprint(f" - {odin_msvc_uninstall_script_path}", level=1) |         devenver.lprint(f" - {odin_msvc_uninstall_script_path}", level=1) | ||||||
| 
 | 
 | ||||||
|     odin_msvc_install_script_path.write_text(f"""Windows Registry Editor Version 5.00 |         odin_msvc_install_script_path.write_text(f"""Windows Registry Editor Version 5.00 | ||||||
| 
 | 
 | ||||||
| [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots] | [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots] | ||||||
| "KitsRoot10"="{win10_sdk_find_test_dir_reg_path}" | "KitsRoot10"="{win10_sdk_find_test_dir_reg_path}" | ||||||
| """) | """) | ||||||
| 
 | 
 | ||||||
|     odin_msvc_uninstall_script_path.write_text(f"""Windows Registry Editor Version 5.00 |         odin_msvc_uninstall_script_path.write_text(f"""Windows Registry Editor Version 5.00 | ||||||
| 
 | 
 | ||||||
| [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots] | [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots] | ||||||
| "KitsRoot10"=- | "KitsRoot10"=- | ||||||
| """) | """) | ||||||
| 
 | 
 | ||||||
|     # Python |         # Python | ||||||
|     # -------------------------------------------------------------------------- |         # -------------------------------------------------------------------------- | ||||||
|     # TODO: If I'm using the terminal that this script generates it will lock the |         # TODO: If I'm using the terminal that this script generates it will lock the | ||||||
|     # executable and Python cannot open the file for verifying the SHA256. |         # executable and Python cannot open the file for verifying the SHA256. | ||||||
| 
 | 
 | ||||||
|     python_exe_path = pathlib.Path(installed_dev_apps["Python"][0]['exe_path']) |         python_exe_path = pathlib.Path(installed_dev_apps["Python"][0]['exe_path']) | ||||||
| 
 | 
 | ||||||
|     # PyNvim |         # PyNvim | ||||||
|     devenver.lprint(f"Installing PyNVIM") |         devenver.lprint(f"Installing PyNVIM") | ||||||
|     subprocess.run(f"{python_exe_path} -m pip install pynvim") |         subprocess.run(f"{python_exe_path} -m pip install pynvim") | ||||||
| 
 | 
 | ||||||
|     # Add update script |         # Add update script | ||||||
|     python_rel_exe_path   = pathlib.Path(python_exe_path).relative_to(install_dir) |         python_rel_exe_path   = pathlib.Path(python_exe_path).relative_to(install_dir) | ||||||
|     python_install_dir    = pathlib.Path(python_exe_path).parent.relative_to(install_dir) |         python_install_dir    = pathlib.Path(python_exe_path).parent.relative_to(install_dir) | ||||||
|     win_setup_script_path = pathlib.Path(devenver.script_dir, "win_install.py") |         win_setup_script_path = pathlib.Path(devenver.script_dir, "win_install.py") | ||||||
| 
 | 
 | ||||||
|     (install_dir / "dev_env_update.bat").write_text(f"""@echo off |         (install_dir / "dev_env_update.bat").write_text(f"""@echo off | ||||||
| setlocal EnableDelayedExpansion | setlocal EnableDelayedExpansion | ||||||
| set PYTHONHOME=%~dp0{python_install_dir} | set PYTHONHOME=%~dp0{python_install_dir} | ||||||
| %~dp0{python_rel_exe_path} {win_setup_script_path} --with-dev-apps | %~dp0{python_rel_exe_path} {win_setup_script_path} --with-dev-apps | ||||||
| @ -392,11 +382,42 @@ set PYTHONHOME=%~dp0{python_install_dir} | |||||||
| pause | pause | ||||||
| """) | """) | ||||||
| 
 | 
 | ||||||
|  |     # Install left-overs | ||||||
|  |     # -------------------------------------------------------------------------- | ||||||
|  |     devenver.print_header("Install configuration files") | ||||||
|  | 
 | ||||||
|  |     # Copy init.vim to NVIM directory | ||||||
|  |     internal_dir          = pathlib.Path(os.path.dirname(os.path.abspath(__file__))) / "Internal" | ||||||
|  |     nvim_init_dir         = "" | ||||||
|  | 
 | ||||||
|  |     if is_windows: | ||||||
|  |         nvim_init_dir = pathlib.Path(os.path.expanduser("~")) / "AppData" / "Local" / "nvim" | ||||||
|  |     else: | ||||||
|  |         nvim_init_dir = pathlib.Path(os.path.expanduser("~")) / ".config" / "nvim" | ||||||
|  | 
 | ||||||
|  |     nvim_config_dest_path = nvim_init_dir / "init.vim" | ||||||
|  |     nvim_config_src_path  = internal_dir  / "os_nvim_init.vim" | ||||||
|  | 
 | ||||||
|  |     devenver.lprint(f"Installing NVIM config to {nvim_config_dest_path}") | ||||||
|  |     nvim_init_dir.mkdir(parents=True, exist_ok=True) | ||||||
|  |     shutil.copy(nvim_config_src_path, nvim_config_dest_path) | ||||||
|  | 
 | ||||||
|  |     # Download vim.plug to NVIM init directory | ||||||
|  |     nvim_plug_vim_dir  = nvim_init_dir / "autoload" | ||||||
|  |     nvim_plug_vim_path = nvim_plug_vim_dir / "plug.vim" | ||||||
|  |     nvim_plug_vim_dir.mkdir(parents=True, exist_ok=True) | ||||||
|  |     if not os.path.exists(nvim_plug_vim_path): | ||||||
|  |         devenver.lprint(f"Installing NVIM plugin manager to {nvim_plug_vim_path}") | ||||||
|  |         urllib.request.urlretrieve("https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim", | ||||||
|  |                                    nvim_plug_vim_path) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| # Install user apps | # Install user apps | ||||||
| # ------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------ | ||||||
| if args.with_user_apps: | if args.with_user_apps: | ||||||
|     app_list            = win_app_manifest_user.get_manifest() |     app_list            = win_app_manifest_user.get_manifest(is_windows=is_windows) | ||||||
|     installed_user_apps = devenver.run(user_app_list=app_list, |     installed_user_apps = devenver.run(user_app_list=app_list, | ||||||
|                                        download_dir=download_dir, |                                        download_dir=download_dir, | ||||||
|                                        install_dir=install_dir, |                                        install_dir=install_dir, | ||||||
|                                        devenv_script_name="user_env") |                                        devenv_script_name="user_env", | ||||||
|  |                                        is_windows=True) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user