Sha256: 5759e7f929eeac3ebc5daf268e6e96f7fd88a711d048e3a49e1ee2f37167afbe

Contents?: true

Size: 1.76 KB

Versions: 7

Compression:

Stored size: 1.76 KB

Contents

require 'fileutils'

module PkgForge
  ##
  # Add build methods to Forge
  class Forge
    attr_writer :build_block

    Contract None => Proc
    def build_block
      @build_block ||= proc { raise 'No build block provided' }
    end

    Contract None => nil
    def build!
      prepare_source!
      patch_source!
      prepare_deps!
      builder = PkgForge::DSL::Build.new(self)
      builder.instance_eval(&build_block)
    end
  end

  module DSL
    ##
    # Add build method to Forge DSL
    class Forge
      Contract Func[None => nil] => nil
      def build(&block)
        @forge.build_block = block
        nil
      end
    end

    ##
    # Add build methods to Build DSL
    class Build
      Contract Or[String, Array], Or[HashOf[String => String], {}, nil] => nil
      def run(*args)
        @forge.run(*args)
      end

      Contract Maybe[HashOf[String => String]] => nil
      def configure(env = {})
        run ['./configure'] + configure_flag_strings, default_env.merge(env)
      end

      Contract Maybe[HashOf[String => String]] => nil
      def make(env = {})
        run 'make', default_env.merge(env)
      end

      Contract Maybe[HashOf[String => String]] => nil
      def install(env = {})
        run "make DESTDIR=#{@forge.releasedir} install", default_env.merge(env)
      end

      Contract Or[String, ArrayOf[String]] => nil
      def rm(paths)
        paths = [paths] if paths.is_a? String
        paths.map! { |x| File.join(@forge.releasedir, x) }
        FileUtils.rm_r paths
        nil
      end

      private

      Contract None => HashOf[String => String]
      def default_env
        {
          'CC' => 'musl-gcc',
          'CFLAGS' => @forge.cflags.join(' '),
          'LIBS' => @forge.libs.join(' ')
        }
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pkgforge-0.12.4 lib/pkgforge/components/build.rb
pkgforge-0.12.3 lib/pkgforge/components/build.rb
pkgforge-0.12.1 lib/pkgforge/components/build.rb
pkgforge-0.12.0 lib/pkgforge/components/build.rb
pkgforge-0.11.0 lib/pkgforge/components/build.rb
pkgforge-0.10.0 lib/pkgforge/components/build.rb
pkgforge-0.9.3 lib/pkgforge/components/build.rb