Base ready
This commit is contained in:
		
							
								
								
									
										56
									
								
								ops/cookbooks/vendor/mingw/resources/get.rb
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								ops/cookbooks/vendor/mingw/resources/get.rb
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| # | ||||
| # Cookbook:: mingw | ||||
| # Resource:: get | ||||
| # | ||||
| # Copyright:: 2016, Chef Software, Inc. | ||||
| # | ||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with the License. | ||||
| # You may obtain a copy of the License at | ||||
| # | ||||
| #     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| # Unless required by applicable law or agreed to in writing, software | ||||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | ||||
| # | ||||
|  | ||||
| # Installs the core msys utilities needed for mingw/git/any other posix | ||||
| # based toolchain at a desired location using mingw-get.exe. | ||||
|  | ||||
| property :package, String, name_property: true | ||||
| property :root, String, required: true | ||||
|  | ||||
| resource_name :mingw_get | ||||
|  | ||||
| action_class do | ||||
|   def mingw_do_action(action_cmd) | ||||
|     seven_zip_archive "fetching mingw-get to #{win_friendly_path(root)}" do | ||||
|       source 'http://iweb.dl.sourceforge.net/project/mingw/Installer/mingw-get/mingw-get-0.6.2-beta-20131004-1/mingw-get-0.6.2-mingw32-beta-20131004-1-bin.zip' | ||||
|       path root | ||||
|       checksum '2e0e9688d42adc68c5611759947e064156e169ff871816cae52d33ee0655826d' | ||||
|       not_if do | ||||
|         ::File.exist?(::File.join(root, 'bin/mingw-get.exe')) | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     execute "performing #{action_cmd} for #{package}" do | ||||
|       command ".\\bin\\mingw-get.exe -v #{action_cmd} #{package}" | ||||
|       cwd root | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
| action :install do | ||||
|   mingw_do_action('install') | ||||
| end | ||||
|  | ||||
| action :upgrade do | ||||
|   mingw_do_action('upgrade') | ||||
| end | ||||
|  | ||||
| action :remove do | ||||
|   mingw_do_action('remove') | ||||
| end | ||||
							
								
								
									
										139
									
								
								ops/cookbooks/vendor/mingw/resources/msys2_package.rb
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								ops/cookbooks/vendor/mingw/resources/msys2_package.rb
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,139 @@ | ||||
| # | ||||
| # Cookbook:: mingw | ||||
| # Resource:: msys2_package | ||||
| # | ||||
| # Copyright:: 2016, Chef Software, Inc. | ||||
| # | ||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with the License. | ||||
| # You may obtain a copy of the License at | ||||
| # | ||||
| #     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| # Unless required by applicable law or agreed to in writing, software | ||||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | ||||
| # | ||||
|  | ||||
| # Installs msys2 base system and installs/upgrades packages within in. | ||||
| # | ||||
| # Where's the version flag?  Where's idempotence you say?  Well f*** you | ||||
| # for trying to version your product.  This is arch.  They live on the edge. | ||||
| # You never get anything but the latest version.  And if that's broken... | ||||
| # well that's your problem isn't it?  And they don't believe in preserving | ||||
| # older versions.  Good luck! | ||||
|  | ||||
| property :package, String, name_property: true | ||||
| property :root, String, required: true | ||||
|  | ||||
| resource_name :msys2_package | ||||
|  | ||||
| action_class do | ||||
|   # | ||||
|   # Runs a command through a bash login shell made by our shim .bat file. | ||||
|   # The bash.bat file defaults %HOME% to #{root}/home/%USERNAME% and requests | ||||
|   # that the command be run in the current working directory. | ||||
|   # | ||||
|   def msys2_exec(comment, cmd) | ||||
|     f_root = win_friendly_path(root) | ||||
|     execute comment do | ||||
|       command ".\\bin\\bash.bat -c '#{cmd}'" | ||||
|       cwd f_root | ||||
|       live_stream true | ||||
|       environment('MSYSTEM' => 'MSYS') | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def msys2_init | ||||
|     cache_dir = ::File.join(root, '.cache') | ||||
|     f_cache_dir = win_friendly_path(cache_dir) | ||||
|     base_url = node['msys2']['url'] | ||||
|     base_checksum = node['msys2']['checksum'] | ||||
|  | ||||
|     unless ::File.exist?(::File.join(root, 'msys2.exe')) | ||||
|       seven_zip_archive "cache msys2 base to #{f_cache_dir}" do | ||||
|         source base_url | ||||
|         path f_cache_dir | ||||
|         checksum base_checksum | ||||
|         overwrite true | ||||
|       end | ||||
|  | ||||
|       seven_zip_archive "extract msys2 base archive to #{f_cache_dir}" do | ||||
|         source "#{f_cache_dir}\\#{tar_name(base_url)}" | ||||
|         path f_cache_dir | ||||
|         overwrite true | ||||
|       end | ||||
|  | ||||
|       ruby_block 'copy msys2 base files to root' do | ||||
|         block do | ||||
|           # Oh my god msys2 and pacman are picky as hell when it comes to | ||||
|           # updating core files. They use the mtime on certain files to | ||||
|           # determine if they need to updated or not and simply skip various | ||||
|           # steps otherwise. | ||||
|           ::FileUtils.cp_r(::Dir.glob("#{cache_dir}/msys64/*"), root, preserve: true) | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     pacman_key_dir = ::File.join(root, 'etc/pacman.d/gnupg') | ||||
|     bin_dir = ::File.join(root, 'bin') | ||||
|  | ||||
|     directory win_friendly_path(bin_dir) | ||||
|  | ||||
|     cookbook_file win_friendly_path("#{bin_dir}/bash.bat") do | ||||
|       source 'bash.bat' | ||||
|       cookbook 'mingw' | ||||
|     end | ||||
|  | ||||
|     cookbook_file win_friendly_path(::File.join(root, 'custom-upgrade.sh')) do | ||||
|       source 'custom-upgrade.sh' | ||||
|       cookbook 'mingw' | ||||
|     end | ||||
|  | ||||
|     cookbook_file win_friendly_path(::File.join(root, 'etc/profile.d/custom_prefix.sh')) do | ||||
|       source 'custom_prefix.sh' | ||||
|       cookbook 'mingw' | ||||
|     end | ||||
|  | ||||
|     # $HOME is using files from /etc/skel.  The home-directory creation step | ||||
|     # will automatically be performed if other users log in - so if you wish | ||||
|     # to globally modify user first time setup, edit /etc/skel or add | ||||
|     # "post-setup" steps to /etc/post-install/ | ||||
|     # The first-time init shell must be restarted and cannot be reused. | ||||
|     msys2_exec('msys2 first time init', 'exit') unless ::File.exist?(pacman_key_dir) | ||||
|  | ||||
|     # Update pacman and msys base packages. | ||||
|     if ::File.exist?(::File.join(root, 'usr/bin/update-core')) || !::File.exist?(::File.join(root, 'custom-upgrade.sh')) | ||||
|       msys2_exec('upgrade msys2 core', '/custom-upgrade.sh') | ||||
|       msys2_exec('upgrade msys2 core: part 2', 'pacman -Suu --noconfirm') | ||||
|       # Now we can actually upgrade everything ever. | ||||
|       msys2_exec('upgrade entire msys2 system: 1', 'pacman -Syuu --noconfirm') | ||||
|       # Might need to do it once more to pick up a few stragglers. | ||||
|       msys2_exec('upgrade entire msys2 system: 2', 'pacman -Syuu --noconfirm') | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def msys2_do_action(comment, action_cmd) | ||||
|     msys2_init | ||||
|     msys2_exec(comment, action_cmd) | ||||
|   end | ||||
| end | ||||
|  | ||||
| action :install do | ||||
|   msys2_do_action("installing #{package}", "pacman -S --needed --noconfirm #{package}") | ||||
| end | ||||
|  | ||||
| # Package name is ignored.  This is arch.  Why would you ever upgrade a single | ||||
| # package and its deps?  That'll just break everything else that ever depended | ||||
| # on a different version of that dep.  Because arch is wonderful like that. | ||||
| # So you only get the choice to move everything to latest or not...  it's the | ||||
| # most agile development possible! | ||||
| action :upgrade do | ||||
|   msys2_do_action("upgrading #{package}", "pacman -Syu --noconfirm #{package}") | ||||
| end | ||||
|  | ||||
| action :remove do | ||||
|   msys2_do_action("removing #{package}", "pacman -R --noconfirm #{package}") | ||||
| end | ||||
							
								
								
									
										114
									
								
								ops/cookbooks/vendor/mingw/resources/tdm_gcc.rb
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								ops/cookbooks/vendor/mingw/resources/tdm_gcc.rb
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,114 @@ | ||||
| # | ||||
| # Cookbook:: mingw | ||||
| # Resource:: tdm_gcc | ||||
| # | ||||
| # Copyright:: 2016, Chef Software, Inc. | ||||
| # | ||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with the License. | ||||
| # You may obtain a copy of the License at | ||||
| # | ||||
| #     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| # | ||||
| # Unless required by applicable law or agreed to in writing, software | ||||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | ||||
| # | ||||
|  | ||||
| # Installs a gcc based C/C++ compiler and runtime from TDM GCC. | ||||
|  | ||||
| property :flavor, Symbol, is: [:sjlj_32, :seh_sjlj_64], default: :seh_sjlj_64 | ||||
| property :root, String, required: true | ||||
| property :version, String, is: ['5.1.0'], name_property: true | ||||
|  | ||||
| resource_name :mingw_tdm_gcc | ||||
|  | ||||
| tdm_gcc_64 = { | ||||
|   'http://iweb.dl.sourceforge.net/project/tdm-gcc/TDM-GCC%205%20series/5.1.0-tdm64-1/gcc-5.1.0-tdm64-1-core.tar.lzma' => | ||||
|     '29393aac890847089ad1e93f81a28f6744b1609c00b25afca818f3903e42e4bd', | ||||
|   'http://iweb.dl.sourceforge.net/project/tdm-gcc/MinGW-w64%20runtime/GCC%205%20series/mingw64runtime-v4-git20150618-gcc5-tdm64-1.tar.lzma' => | ||||
|     '29186e0bb36824b10026d78bdcf238d631d8fc1d90718d2ebbd9ec239b6f94dd', | ||||
|   'http://iweb.dl.sourceforge.net/project/tdm-gcc/GNU%20binutils/binutils-2.25-tdm64-1.tar.lzma' => | ||||
|     '4722bb7b4d46cef714234109e25e5d1cfd29f4e53365b6d615c8a00735f60e40', | ||||
|   'http://iweb.dl.sourceforge.net/project/tdm-gcc/TDM-GCC%205%20series/5.1.0-tdm64-1/gcc-5.1.0-tdm64-1-c%2B%2B.tar.lzma' => | ||||
|     '17fd497318d1ac187a113e8665330d746ad9607a0406ab2374db0d8e6f4094d1', | ||||
| } | ||||
|  | ||||
| tdm_gcc_32 = { | ||||
|   'http://iweb.dl.sourceforge.net/project/tdm-gcc/TDM-GCC%205%20series/5.1.0-tdm-1%20SJLJ/gcc-5.1.0-tdm-1-core.tar.lzma' => | ||||
|     '9199e6ecbce956ff4704b52098beb38e313176ace610285fb93758a08752870e', | ||||
|   'http://iweb.dl.sourceforge.net/project/tdm-gcc/TDM-GCC%205%20series/5.1.0-tdm-1%20SJLJ/gcc-5.1.0-tdm-1-c%2B%2B.tar.lzma' => | ||||
|     '19fe46819ce43531d066b438479300027bbf06da57e8a10be5100466f80c28fc', | ||||
| } | ||||
|  | ||||
| action :install do | ||||
|   cache_dir = ::File.join(root, '.cache') | ||||
|   f_root = win_friendly_path(root) | ||||
|  | ||||
|   if flavor == :sjlj_32 | ||||
|     [ | ||||
|       'binutils-bin=2.25.1', | ||||
|       'libintl-dll=0.18.3.2', | ||||
|       'mingwrt-dll=3.21.1', | ||||
|       'mingwrt-dev=3.21.1', | ||||
|       'w32api-dev=3.17', | ||||
|     ].each do |package_fragment| | ||||
|       mingw_get "install #{package_fragment} at #{f_root}" do | ||||
|         package "mingw32-#{package_fragment}-*" | ||||
|         root new_resource.root | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   to_fetch = | ||||
|     case flavor | ||||
|     when :sjlj_32 | ||||
|       tdm_gcc_32 | ||||
|     when :seh_sjlj_64 | ||||
|       tdm_gcc_64 | ||||
|     else | ||||
|       raise "Unknown flavor: #{flavor}" | ||||
|     end | ||||
|  | ||||
|   to_fetch.each do |url, hash| | ||||
|     seven_zip_archive "cache #{archive_name(url)} to #{win_friendly_path(cache_dir)}" do | ||||
|       source url | ||||
|       path cache_dir | ||||
|       checksum hash | ||||
|       overwrite true | ||||
|     end | ||||
|  | ||||
|     seven_zip_archive "extract #{tar_name(url)} to #{f_root}" do | ||||
|       source ::File.join(cache_dir, tar_name(url)) | ||||
|       path root | ||||
|       overwrite true | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   # Patch time.h headers for compatibility with winpthreads. | ||||
|   # These patches were made for binutils 2.25.1 for 32-bit TDM GCC only. | ||||
|   if flavor == :sjlj_32 | ||||
|     include_dir = win_friendly_path(::File.join(root, 'include')) | ||||
|     cookbook_file "#{include_dir}\\pthread.h" do | ||||
|       cookbook 'mingw' | ||||
|       source 'pthread.h' | ||||
|     end | ||||
|  | ||||
|     cookbook_file "#{include_dir}\\time.h" do | ||||
|       cookbook 'mingw' | ||||
|       source 'time.h' | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
| def archive_name(source) | ||||
|   url = ::URI.parse(source) | ||||
|   ::File.basename(::URI.unescape(url.path)) | ||||
| end | ||||
|  | ||||
| def tar_name(source) | ||||
|   aname = archive_name(source) | ||||
|   ::File.basename(aname, ::File.extname(aname)) | ||||
| end | ||||
		Reference in New Issue
	
	Block a user