@@ -36,7 +36,7 @@ CREW_NOT_STRIP = ENV["CREW_NOT_STRIP"]
3636# Set XZ_OPT environment variable for build command.
3737# If CREW_XZ_OPT is defined, use it by default. Use `-7e`, otherwise.
3838if ENV [ "CREW_XZ_OPT" ] . to_s == ''
39- ENV [ "XZ_OPT" ] = "-7e"
39+ ENV [ "XZ_OPT" ] = "-7e -T #{ CREW_NPROC } "
4040else
4141 ENV [ "XZ_OPT" ] = ENV [ "CREW_XZ_OPT" ]
4242end
@@ -188,6 +188,10 @@ def help (pkgName)
188188 puts "Build a package."
189189 puts "Usage: crew build [package]"
190190 puts "Build [package] from source and place the archive and checksum in the current working directory."
191+ when "binstall"
192+ puts "Build and install a package."
193+ puts "Usage: crew binstall [package]"
194+ puts "Build and install [package] from source and place the archive and checksum in the current working directory."
191195 when "download"
192196 puts "Download a package."
193197 puts "Usage: crew download [package]"
@@ -383,6 +387,7 @@ def unpack (meta)
383387 target_dir = nil
384388 Dir . chdir CREW_BREW_DIR do
385389 puts "Unpacking archive, this may take a while..."
390+ system "rm" , "-rf" , "#{ extract_dir } "
386391 Dir . mkdir ( "#{ extract_dir } " ) unless Dir . exist? ( "#{ extract_dir } " )
387392 if meta [ :filename ] [ -4 , 4 ] == ".zip"
388393 system "unzip" , "-qq" , "-d" , "#{ extract_dir } " , meta [ :filename ]
@@ -640,6 +645,43 @@ def resolve_dependencies_and_build
640645 end
641646end
642647
648+ def resolve_dependencies_and_build_and_install
649+ begin
650+ origin = @pkg . name
651+
652+ # mark current package as which is required to compile from source
653+ @pkg . build_from_source = true
654+ resolve_dependencies
655+
656+ search origin , true
657+ build_package Dir . pwd
658+ if @device [ :installed_packages ] . any? { |pkg | pkg [ :name ] == @pkg . name }
659+ puts "Removing since forcing install..."
660+ remove @pkg . name
661+ end
662+ puts "Installing..."
663+ install_package CREW_DEST_DIR
664+
665+ #add to installed packages
666+ @device [ :installed_packages ] . push ( name : @pkg . name , version : @pkg . version )
667+ File . open ( CREW_CONFIG_PATH + 'device.json' , 'w' ) do |file |
668+ output = JSON . parse @device . to_json
669+ file . write JSON . pretty_generate ( output )
670+ end
671+ puts "#{ @pkg . name . capitalize } installed!"
672+ rescue InstallError => e
673+ abort "#{ @pkg . name } failed to build: #{ e . to_s } "
674+ ensure
675+ #cleanup
676+ unless ARGV [ 2 ] == 'keep'
677+ Dir . chdir CREW_BREW_DIR do
678+ system "rm -rf *"
679+ system "mkdir dest" #this is a little ugly, feel free to find a better way
680+ end
681+ end
682+ end
683+ end
684+
643685def build_package ( pwd )
644686 abort "It is not possible to build fake package" . lightred if @pkg . is_fake?
645687 abort "It is not possible to build without source" . lightred if !@pkg . is_source? ( @device [ :architecture ] )
@@ -774,6 +816,13 @@ when "build"
774816 else
775817 help "build"
776818 end
819+ when "binstall"
820+ if @pkgName
821+ search @pkgName
822+ resolve_dependencies_and_build_and_install
823+ else
824+ help "binstall"
825+ end
777826when "remove"
778827 if @pkgName
779828 remove @pkgName
0 commit comments