Sha256: 608ee303fc987caf0c6e16ca395e4e460be2fd9ade0d60e724c1134ae173ffeb

Contents?: true

Size: 1.47 KB

Versions: 7

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>s/usr/include -L%<dep>s/usr/lib'
        value ||= @forge.deps.map { |x, _| format(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

7 entries across 7 versions & 1 rubygems

Version Path
pkgforge-0.23.2 lib/pkgforge/components/cflags.rb
pkgforge-0.23.1 lib/pkgforge/components/cflags.rb
pkgforge-0.23.0 lib/pkgforge/components/cflags.rb
pkgforge-0.22.0 lib/pkgforge/components/cflags.rb
pkgforge-0.21.0 lib/pkgforge/components/cflags.rb
pkgforge-0.20.0 lib/pkgforge/components/cflags.rb
pkgforge-0.19.0 lib/pkgforge/components/cflags.rb