extconf_compile_commands_json 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3c4119e56b170eeb8c7754f47f7735f14f9e2110aec9a55d2627d2be4b96e24d
4
+ data.tar.gz: 8db262a1e1ceba1e9246fa88914c2cd44b5e36a1b0b80e4ef83be7d159d51f72
5
+ SHA512:
6
+ metadata.gz: af7263343f4e56f58c8c49cd40b74bec3865b3bbea54fe32c730f69fd90decb0fbfd6cea29fb373bd319c34099a95c1df22cea09bd1e75132860636adc579f0c
7
+ data.tar.gz: f547795042f887afd413b52e39310bcd0b3dfe106729c90bb3583ca6b8d8771eb4c8a31b81aac8beaa9592d026e5801d8ad755c05d130a78f24878c01446102a
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "mkmf"
4
+ require "shellwords"
5
+ require "json"
6
+
7
+ module ExtconfCompileCommandsJson
8
+ def self.generate_compile_commands_json
9
+ mkmf_cflags = []
10
+ # Start by expanding what's in our magic variables
11
+ [$INCFLAGS, $CPPFLAGS, $CFLAGS, $COUTFLAGS].each do |v|
12
+ next unless v
13
+ mkmf_cflags.concat Shellwords.split(v)
14
+ end
15
+ # expand that with the contents of the ruby options
16
+ mkmf_cflags.map! do |flag|
17
+ flag
18
+ .gsub("$(arch_hdrdir)", $arch_hdrdir || "")
19
+ .gsub("$(hdrdir)", $hdrdir || "")
20
+ .gsub("$(srcdir)", $srcdir || "")
21
+ .gsub("$(cppflags)", RbConfig::CONFIG["cppflags"] || "")
22
+ .gsub("$(DEFS)", RbConfig::CONFIG["DEFS"] || "")
23
+ .gsub("$(cflags)", RbConfig::CONFIG["cflags"] || "")
24
+ .gsub("$(cxxflags)", RbConfig::CONFIG["cxxflags"] || "")
25
+ .gsub("$(optflags)", RbConfig::CONFIG["optflags"] || "")
26
+ .gsub("$(debugflags)", RbConfig::CONFIG["debugflags"] || "")
27
+ .gsub("$(warnflags)", RbConfig::CONFIG["warnflags"] || "")
28
+ .gsub("$(empty)", "")
29
+ end
30
+ mkmf_cflags.reject! { |f| f.empty? }
31
+ # This makes sure that #include "extconf.h" works
32
+ mkmf_cflags = ["-iquote#{File.realpath(Dir.pwd)}"] + mkmf_cflags
33
+ compile_commands = $srcs.map do |src|
34
+ {
35
+ directory: File.realpath(Dir.pwd),
36
+ # Set the C compiler to "clang", always, since the whole point
37
+ # of this file is to make clangd work.
38
+ arguments: ["clang"] + mkmf_cflags + [src],
39
+ file: src
40
+ }
41
+ end
42
+ File.write("compile_commands.json", compile_commands.to_json)
43
+ end
44
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: extconf_compile_commands_json
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - KJ Tsanaktsidis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-07-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: standard
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ description: |
28
+ The extconf_compile_commands_json gem allows you to easily generate
29
+ compatible compile_commands.json files from your extconf.rb file. This
30
+ makes it easy to use the clangd LSP when working on your gem.
31
+ email: kj@kjtsanaktsidis.id.au
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - lib/extconf_compile_commands_json.rb
37
+ homepage: https://github.com/KJTsanaktsidis/extconf_compile_commands_json
38
+ licenses:
39
+ - MIT
40
+ metadata: {}
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 2.6.0
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubygems_version: 3.3.7
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: Generate clangd compile_commands.json files for gems
60
+ test_files: []