# frozen_string_literal: true require "sorted_set" require_relative "directory" # This module provides classes for the Makit gem. module Makit # This class provide methods for working with the system Environment. # class Environment def self.which(name) return name if File.exist?(name) ["", ".exe", ".bat", ".cmd"].each do |ext| aname = name + ext return aname if File.exist?(aname) ENV["PATH"].split(File::PATH_SEPARATOR).each do |path| apath = "#{path.gsub("\\", "/")}/#{aname}".gsub("//", "/") return apath if File.exist?(apath) end end "" end def self.constants_hash constants = {} # collect all constants that are all uppercase Object.constants.each { |c| constants[c] = Object.const_get(c) if c == c.upcase } # puts "#{c} = #{Object.const_get(c)}" } #Object.constants.each { |c| constants[c] = Object.const_get(c)}# puts "#{c} = #{Object.const_get(c)}" } constants end def self.rake_file_name caller_locations.each do |location| return location.absolute_path if location.absolute_path&.end_with?("Rakefile") end nil end def self.gem_data_directory gem_data_directory = File.join(Dir.home, ".makit") end def self.project_root_directory if !Makit::Environment.rake_file_name.nil? File.dirname(Makit::Environment.rake_file_name) else Makit::Directory.find_directory_with_pattern(File.dirname(__FILE__), "Rakefile") # lass Directory # def self.find_directory_with_pattern(starting_directory, pattern) # nil end end def self.get_relative_directory(url) url = url.gsub("https://", "").gsub("http://", "") url = url.gsub("gitlab.com", "gitlab") url end def self.get_code_root # user home directory + "code" code_root = File.join(Dir.home, "code") end def self.get_work_directory(url) raise "invalid url" if !url.include? "https://" url = url.gsub("https://", "").gsub("http://", "") #url = url.gsub("gitlab.com","gitlab") url end def self.is_windows? RbConfig::CONFIG["host_os"] =~ /mswin|msys|mingw|cygwin|bccwin|wince|emc/ end def self.is_mac? RbConfig::CONFIG["host_os"] =~ /darwin/ end def self.get_os case RbConfig::CONFIG["host_os"] when /linux/ "Linux" when /darwin/ "macOS" when /mswin|msys|mingw|cygwin|bccwin|wince|emc/ "Windows" else "Unknown" end end def self.get_runtime_identifier() os = RbConfig::CONFIG["host_os"] cpu = RbConfig::CONFIG["host_cpu"] case os when /mswin|msys|mingw|cygwin|bccwin|wince|emc/ os_rid = "win" when /darwin|mac os/ os_rid = "osx" when /linux/ os_rid = "linux" when /solaris|bsd/ os_rid = "unix" else raise "Unknown operating system: host_os=#{os}" end case cpu when /x86_64|amd64|x64/ arch_rid = "x64" when /i686|i386/ arch_rid = "x86" #when /arm/ # arch_rid = "arm" when /aarch64|arm64/ arch_rid = "arm64" else raise "Unknown architecture: host_cpu=#{cpu}" end "#{os_rid}-#{arch_rid}" end end end