Sha256: e7bcc2aa739ee575ea45ce0f4509e35dee283dea4e836d2bacbdec9ea715efa0

Contents?: true

Size: 1.47 KB

Versions: 15

Compression:

Stored size: 1.47 KB

Contents

module PkgForge
  ##
  # Add cflag options to Forge
  class Forge
    attr_writer :cflags, :libs

    Contract None => ArrayOf[String]
    def cflags
      @cflags ||= []
    end

    Contract None => ArrayOf[String]
    def libs
      @libs ||= []
    end
  end

  module DSL
    ##
    # Add cflag options to Forge DSL
    class Forge
      Contract Maybe[ArrayOf[String]] => nil
      def cflags(value = nil)
        default = '-I%{dep}/usr/include -L%{dep}/usr/lib'
        value ||= @forge.deps.map { |x, _| (default % { dep: dep(x) }).split }
        @forge.cflags += value.flatten
        nil
      end

      Contract Maybe[ArrayOf[String]] => nil
      def libs(value = nil)
        value ||= @forge.deps.keys
        value.map! { |x| '-l' + x.to_s }
        @forge.libs += value
        nil
      end

      # Shamelessly sourced from:
      # https://blog.mayflower.de/5800-Hardening-Compiler-Flags-for-NixOS.html
      ALL_HARDEN_OPTS = {
        format: %w(-Wformat -Wformat-security -Werror=format-security),
        stackprotector: %w(-fstack-protector-strong),
        fortify: %w(-O2 -D_FORTIFY_SOURCE=2),
        pic: '-fPIC',
        strictoverflow: '-fno-strict-overflow',
        relro: '-zrelro',
        bindnow: '-zbindnow'
      }.freeze

      Contract Maybe[Array[String]] => nil
      def harden(list = [])
        harden_opts = ALL_HARDEN_OPTS.reject { |k, _| list.include? k.to_s }
        @forge.cflags += harden_opts.values.flatten
        nil
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
pkgforge-0.16.1 lib/pkgforge/components/cflags.rb
pkgforge-0.16.0 lib/pkgforge/components/cflags.rb
pkgforge-0.15.1 lib/pkgforge/components/cflags.rb
pkgforge-0.15.0 lib/pkgforge/components/cflags.rb
pkgforge-0.14.0 lib/pkgforge/components/cflags.rb
pkgforge-0.13.4 lib/pkgforge/components/cflags.rb
pkgforge-0.13.2 lib/pkgforge/components/cflags.rb
pkgforge-0.13.1 lib/pkgforge/components/cflags.rb
pkgforge-0.13.0 lib/pkgforge/components/cflags.rb
pkgforge-0.12.5 lib/pkgforge/components/cflags.rb
pkgforge-0.12.4 lib/pkgforge/components/cflags.rb
pkgforge-0.12.3 lib/pkgforge/components/cflags.rb
pkgforge-0.12.1 lib/pkgforge/components/cflags.rb
pkgforge-0.12.0 lib/pkgforge/components/cflags.rb
pkgforge-0.11.0 lib/pkgforge/components/cflags.rb