ddtrace 1.20.0 → 1.21.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +77 -1
  3. data/LICENSE-3rdparty.csv +1 -1
  4. data/bin/ddprofrb +15 -0
  5. data/bin/ddtracerb +3 -1
  6. data/ext/{ddtrace_profiling_loader/ddtrace_profiling_loader.c → datadog_profiling_loader/datadog_profiling_loader.c} +2 -2
  7. data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +3 -3
  8. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_cpu_and_wall_time_worker.c +206 -49
  9. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_discrete_dynamic_sampler.c +145 -72
  10. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_discrete_dynamic_sampler.h +17 -5
  11. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.c +92 -2
  12. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +2 -2
  13. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +10 -14
  14. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/native_extension_helpers.rb +4 -4
  15. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +14 -0
  16. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +4 -0
  17. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/profiling.c +1 -1
  18. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.c +10 -0
  19. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.h +2 -0
  20. data/lib/datadog/auto_instrument.rb +3 -0
  21. data/lib/datadog/core/configuration/components.rb +5 -5
  22. data/lib/datadog/core/configuration/option.rb +1 -1
  23. data/lib/datadog/core/configuration/settings.rb +92 -46
  24. data/lib/datadog/core/diagnostics/environment_logger.rb +4 -3
  25. data/lib/datadog/core/environment/git.rb +25 -0
  26. data/lib/datadog/core/environment/identity.rb +18 -48
  27. data/lib/datadog/core/git/ext.rb +2 -23
  28. data/lib/datadog/core/remote/negotiation.rb +2 -2
  29. data/lib/datadog/core/remote/worker.rb +7 -4
  30. data/lib/datadog/core/transport/ext.rb +2 -0
  31. data/lib/datadog/core/utils/url.rb +25 -0
  32. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -0
  33. data/lib/datadog/profiling/collectors/info.rb +101 -0
  34. data/lib/datadog/profiling/component.rb +12 -14
  35. data/lib/datadog/profiling/exporter.rb +19 -5
  36. data/lib/datadog/profiling/ext.rb +2 -0
  37. data/lib/datadog/profiling/flush.rb +6 -3
  38. data/lib/datadog/profiling/http_transport.rb +5 -1
  39. data/lib/datadog/profiling/load_native_extension.rb +5 -5
  40. data/lib/datadog/profiling/native_extension.rb +1 -1
  41. data/lib/datadog/profiling/tag_builder.rb +5 -0
  42. data/lib/datadog/profiling/tasks/exec.rb +3 -3
  43. data/lib/datadog/profiling/tasks/help.rb +3 -3
  44. data/lib/datadog/profiling.rb +2 -2
  45. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -1
  46. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +11 -4
  47. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
  48. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +11 -1
  49. data/lib/datadog/tracing/contrib/configurable.rb +1 -1
  50. data/lib/datadog/tracing/contrib/extensions.rb +6 -2
  51. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +11 -4
  52. data/lib/datadog/tracing/trace_operation.rb +1 -2
  53. data/lib/datadog/tracing/transport/http.rb +1 -0
  54. data/lib/datadog/tracing/transport/trace_formatter.rb +31 -0
  55. data/lib/ddtrace/version.rb +2 -2
  56. metadata +53 -49
  57. data/ext/ddtrace_profiling_native_extension/pid_controller.c +0 -57
  58. data/ext/ddtrace_profiling_native_extension/pid_controller.h +0 -45
  59. data/lib/datadog/profiling/diagnostics/environment_logger.rb +0 -39
  60. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +0 -0
  61. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +0 -0
  62. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +0 -0
  63. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -0
  64. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.c +0 -0
  65. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.h +0 -0
  66. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_gc_profiling_helper.c +0 -0
  67. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_gc_profiling_helper.h +0 -0
  68. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.c +0 -0
  69. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.h +0 -0
  70. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.c +0 -0
  71. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.h +0 -0
  72. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.h +0 -0
  73. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/heap_recorder.c +0 -0
  74. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/heap_recorder.h +0 -0
  75. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/helpers.h +0 -0
  76. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/libdatadog_helpers.c +0 -0
  77. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/libdatadog_helpers.h +0 -0
  78. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.c +0 -0
  79. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.h +0 -0
  80. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/stack_recorder.c +0 -0
  81. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/stack_recorder.h +0 -0
  82. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/time_helpers.c +0 -0
  83. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/time_helpers.h +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1baa733b2ad3335ab214de620e849f1eab598effb15d24f336aa20147e6e34be
4
- data.tar.gz: 684bbf501475346f6e2a32b5a9284d59e193344e23d63b912624de77ac8bbbad
3
+ metadata.gz: 88e2b5d32d76e7c167d43a9868aed0903f8b82936bd0faf8eb10e02ae83d5928
4
+ data.tar.gz: 65927b5d7037a853debb4da6cd71dda3dec0dd6b765bd90230ac3fa2904655f4
5
5
  SHA512:
6
- metadata.gz: a10dcafb4ff9e9655e06e149ae83a872a0b614f44d69db15ed120f6aa6990f858bb94897d7b8fe30c1b41fe74dc71f054bdf7f0387ded0c0b66058d0d9a15492
7
- data.tar.gz: 87be0dc85c2fc044a0f95096d147dbc79dda101babad85bfdfd29a37c42cd9cb70180fdedae00ff95321fe6eec0e4d61a6aaab852c9c6d3f10fc39ff7f06d87c
6
+ metadata.gz: c467f5c384aeae1fe813df7a2b081e36c665f7a5f550322b9fbfafc402ad70d1d81ba578094bf4064a9d1c8a97f94be8b998ae2d2218c18e0bfaba97b754d5ea
7
+ data.tar.gz: 8510f7f8afa6a89591bb128389ab210e2d6f3049c23a2d2ef3f58c4f0c042abe5cc865b6b5efe5198f116a6c98cea34cbf6e257078477744aa66db66aa3e6f1f
data/CHANGELOG.md CHANGED
@@ -2,6 +2,54 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [1.21.1] - 2024-03-20
6
+
7
+ ### Added
8
+
9
+ * Backports auto instrument shim with `datadog/auto_instrument` ([#3535][])
10
+
11
+ ### Fixed
12
+
13
+ * Fix ActiveRecord resolving invalid string ([#3523][])
14
+ * Revert `http.route` tagging to fix instrumentation failure for Rails 7.1 apps ([#3539][])
15
+ * Fix wrong permissions on released gem files ([#3531][])
16
+
17
+ ## [1.21.0] - 2024-03-14
18
+
19
+ ### Highlights
20
+ Allocation profiling is now in beta, and timeline profiling is enabled by default.
21
+ For more details, check the [release notes](https://github.com/DataDog/dd-trace-rb/releases/tag/v1.21.0)
22
+
23
+ ### Added
24
+
25
+ * APM source code integration ([#3463][])
26
+ * Core: Reduce startup logs verbosity ([#3468][])
27
+ * Tracing: Add Concurrent::Async instrumentation ([#3427][])
28
+ * Profiling: System info support ([#3357][])
29
+ * Profiling: Add bin/ddprofrb ([#3501][])
30
+
31
+ ### Changed
32
+
33
+ * Bump datadog-ci dependency to 0.8.1 ([#3518][])
34
+ * Upgrade to libdatadog 6 ([#3455][])
35
+ * Core: Allow suppressing error logs for Core::Remote::Negotiation ([#3495][])
36
+ * Tracing: Add `http.route` tag to rack ([#3345][])
37
+ * Tracing: Logs deprecation warning for `use` removal ([#3438][])
38
+ * Profiling: Allocation sampling overhead improvements ([#3434][], [#3440][])
39
+ * Profiling: Enable timeline by default ([#3428][])
40
+ * Profiling: Rename Profiling files to reflect "datadog" instead of "ddtrace" ([#3502][])
41
+ * Profiling: Replace `profiling.advanced.experimental_allocation_enabled` with `profiling.allocation_enabled` and remove experimental warning ([#3520][])
42
+
43
+ ### Fixed
44
+
45
+ * Core: Fix rare remote configuration worker thread leak ([#3519][])
46
+ * Tracing: Fix `Datadog::Tracing.reject!` with correct metrics ([#3491][])
47
+ * Tracing: Guard PG result with `nil` check ([#3511][])
48
+ * Profiling: Add workaround for Ruby VM bug causing crash in gc_finalize_deferred ([#3473][])
49
+ * Profiling: Fix missing profiling code hotspots when using ddtrace+otel ([#3466][])
50
+ * Profiling: Stop worker on clock failure ([#3439][])
51
+ * Profiling: Upgrade libdatadog to fix incorrect platform detection for x86_64-linux-gnu/aarch64-linux-gnu ([#3503][])
52
+
5
53
  ## [1.20.0] - 2024-02-05
6
54
 
7
55
  ### Added
@@ -2728,7 +2776,9 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
2728
2776
  Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
2729
2777
 
2730
2778
 
2731
- [Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.20.0...master
2779
+ [Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v1.21.1...master
2780
+ [1.21.1]: https://github.com/DataDog/dd-trace-rb/compare/v1.21.0...v1.21.1
2781
+ [1.21.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.20.0...v1.21.0
2732
2782
  [1.20.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.19.0...v1.20.0
2733
2783
  [1.19.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.18.0...v1.19.0
2734
2784
  [1.18.0]: https://github.com/DataDog/dd-trace-rb/compare/v1.17.0...v1.18.0
@@ -3979,10 +4029,12 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
3979
4029
  [#3328]: https://github.com/DataDog/dd-trace-rb/issues/3328
3980
4030
  [#3329]: https://github.com/DataDog/dd-trace-rb/issues/3329
3981
4031
  [#3333]: https://github.com/DataDog/dd-trace-rb/issues/3333
4032
+ [#3345]: https://github.com/DataDog/dd-trace-rb/issues/3345
3982
4033
  [#3349]: https://github.com/DataDog/dd-trace-rb/issues/3349
3983
4034
  [#3352]: https://github.com/DataDog/dd-trace-rb/issues/3352
3984
4035
  [#3354]: https://github.com/DataDog/dd-trace-rb/issues/3354
3985
4036
  [#3356]: https://github.com/DataDog/dd-trace-rb/issues/3356
4037
+ [#3357]: https://github.com/DataDog/dd-trace-rb/issues/3357
3986
4038
  [#3360]: https://github.com/DataDog/dd-trace-rb/issues/3360
3987
4039
  [#3361]: https://github.com/DataDog/dd-trace-rb/issues/3361
3988
4040
  [#3362]: https://github.com/DataDog/dd-trace-rb/issues/3362
@@ -3996,7 +4048,31 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
3996
4048
  [#3408]: https://github.com/DataDog/dd-trace-rb/issues/3408
3997
4049
  [#3420]: https://github.com/DataDog/dd-trace-rb/issues/3420
3998
4050
  [#3426]: https://github.com/DataDog/dd-trace-rb/issues/3426
4051
+ [#3427]: https://github.com/DataDog/dd-trace-rb/issues/3427
4052
+ [#3428]: https://github.com/DataDog/dd-trace-rb/issues/3428
3999
4053
  [#3431]: https://github.com/DataDog/dd-trace-rb/issues/3431
4054
+ [#3434]: https://github.com/DataDog/dd-trace-rb/issues/3434
4055
+ [#3438]: https://github.com/DataDog/dd-trace-rb/issues/3438
4056
+ [#3439]: https://github.com/DataDog/dd-trace-rb/issues/3439
4057
+ [#3440]: https://github.com/DataDog/dd-trace-rb/issues/3440
4058
+ [#3455]: https://github.com/DataDog/dd-trace-rb/issues/3455
4059
+ [#3463]: https://github.com/DataDog/dd-trace-rb/issues/3463
4060
+ [#3466]: https://github.com/DataDog/dd-trace-rb/issues/3466
4061
+ [#3468]: https://github.com/DataDog/dd-trace-rb/issues/3468
4062
+ [#3473]: https://github.com/DataDog/dd-trace-rb/issues/3473
4063
+ [#3491]: https://github.com/DataDog/dd-trace-rb/issues/3491
4064
+ [#3495]: https://github.com/DataDog/dd-trace-rb/issues/3495
4065
+ [#3501]: https://github.com/DataDog/dd-trace-rb/issues/3501
4066
+ [#3502]: https://github.com/DataDog/dd-trace-rb/issues/3502
4067
+ [#3503]: https://github.com/DataDog/dd-trace-rb/issues/3503
4068
+ [#3511]: https://github.com/DataDog/dd-trace-rb/issues/3511
4069
+ [#3518]: https://github.com/DataDog/dd-trace-rb/issues/3518
4070
+ [#3519]: https://github.com/DataDog/dd-trace-rb/issues/3519
4071
+ [#3520]: https://github.com/DataDog/dd-trace-rb/issues/3520
4072
+ [#3523]: https://github.com/DataDog/dd-trace-rb/issues/3523
4073
+ [#3531]: https://github.com/DataDog/dd-trace-rb/issues/3531
4074
+ [#3535]: https://github.com/DataDog/dd-trace-rb/issues/3535
4075
+ [#3539]: https://github.com/DataDog/dd-trace-rb/issues/3539
4000
4076
  [@AdrianLC]: https://github.com/AdrianLC
4001
4077
  [@Azure7111]: https://github.com/Azure7111
4002
4078
  [@BabyGroot]: https://github.com/BabyGroot
data/LICENSE-3rdparty.csv CHANGED
@@ -2,7 +2,7 @@ Component,Origin,License,Copyright
2
2
  lib/datadog/core/vendor/multipart-post,https://github.com/socketry/multipart-post,MIT,"Copyright (c) 2007-2013 Nick Sieger."
3
3
  lib/datadog/tracing/contrib/active_record/vendor,https://github.com/rails/rails/,MIT,"Copyright (c) 2005-2018 David Heinemeier Hansson"
4
4
  lib/datadog/tracing/contrib/utils/quantization/http.rb,https://github.com/ruby/uri,BSD-2-Clause,"Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved."
5
- ext/ddtrace_profiling_native_extension/private_vm_api_access,https://github.com/ruby/ruby,BSD-2-Clause,"Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved."
5
+ ext/datadog_profiling_native_extension/private_vm_api_access,https://github.com/ruby/ruby,BSD-2-Clause,"Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved."
6
6
  msgpack,https://rubygems.org/gems/msgpack,Apache-2.0,"Copyright (c) 2008-2015 Sadayuki Furuhashi"
7
7
  debase-ruby_core_source,https://rubygems.org/gems/debase-ruby_core_source,MIT for gem and BSD-2-Clause for Ruby sources,"Copyright (c) 2012 Gabriel Horner. Files from Ruby sources are Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved."
8
8
  lib/datadog/core/vendor/ipaddr,https://github.com/ruby/ipaddr/blob/master/lib/ipaddr.rb,BSD 2-Clause "Simplified" License,"Copyright (c) 2002 Hajimu UMEMOTO <ume@mahoroba.org> Copyright (c) 2007-2017 Akinori MUSHA <knu@iDaemons.org>"
data/bin/ddprofrb ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ require 'datadog/profiling/tasks/exec'
3
+ require 'datadog/profiling/tasks/help'
4
+
5
+ command = ARGV.shift
6
+
7
+ case command
8
+ when 'exec'
9
+ Datadog::Profiling::Tasks::Exec.new(ARGV).run
10
+ when 'help', '--help'
11
+ Datadog::Profiling::Tasks::Help.new.run
12
+ else
13
+ puts "Command '#{command}' is not valid for ddprofrb."
14
+ Datadog::Profiling::Tasks::Help.new.run
15
+ end
data/bin/ddtracerb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ Kernel.warn 'WARNING: Use of `ddtracerb` is deprecated, and will be removed in 2.0. Use `ddprofrb` instead.'
3
+
2
4
  require 'datadog/profiling/tasks/exec'
3
5
  require 'datadog/profiling/tasks/help'
4
6
 
@@ -10,6 +12,6 @@ when 'exec'
10
12
  when 'help', '--help'
11
13
  Datadog::Profiling::Tasks::Help.new.run
12
14
  else
13
- puts "Command '#{command}' is not valid for ddtrace."
15
+ puts "Command '#{command}' is not valid for ddtracerb."
14
16
  Datadog::Profiling::Tasks::Help.new.run
15
17
  end
@@ -14,7 +14,7 @@
14
14
  // up other's symbols (`RTLD_DEEPBIND`).
15
15
  //
16
16
  // But Ruby's extension loading mechanism is not configurable -- there's no way to tell it to use different flags when
17
- // calling `dlopen`. To get around this, this file (ddtrace_profiling_loader.c) introduces another extension
17
+ // calling `dlopen`. To get around this, this file (datadog_profiling_loader.c) introduces another extension
18
18
  // (profiling loader) which has only a single responsibility: mimic Ruby's extension loading mechanism, but when calling
19
19
  // `dlopen` use a different set of flags.
20
20
  // This idea was shamelessly stolen from @lloeki's work in https://github.com/rubyjs/mini_racer/pull/179, big thanks!
@@ -48,7 +48,7 @@ static void unload_failed_library(void *handle);
48
48
 
49
49
  #define DDTRACE_EXPORT __attribute__ ((visibility ("default")))
50
50
 
51
- void DDTRACE_EXPORT Init_ddtrace_profiling_loader(void) {
51
+ void DDTRACE_EXPORT Init_datadog_profiling_loader(void) {
52
52
  VALUE datadog_module = rb_define_module("Datadog");
53
53
  VALUE profiling_module = rb_define_module_under(datadog_module, "Profiling");
54
54
  VALUE loader_module = rb_define_module_under(profiling_module, "Loader");
@@ -3,7 +3,7 @@
3
3
 
4
4
  if RUBY_ENGINE != 'ruby' || Gem.win_platform?
5
5
  $stderr.puts(
6
- 'WARN: Skipping build of ddtrace profiling loader. See ddtrace profiling native extension note for details.'
6
+ 'WARN: Skipping build of Datadog profiling loader. See Datadog profiling native extension note for details.'
7
7
  )
8
8
 
9
9
  File.write('Makefile', 'all install clean: # dummy makefile that does nothing')
@@ -46,7 +46,7 @@ add_compiler_flag '-Werror-implicit-function-declaration'
46
46
  add_compiler_flag '-Wunused-parameter'
47
47
 
48
48
  # The native extension is not intended to expose any symbols/functions for other native libraries to use;
49
- # the sole exception being `Init_ddtrace_profiling_loader` which needs to be visible for Ruby to call it when
49
+ # the sole exception being `Init_datadog_profiling_loader` which needs to be visible for Ruby to call it when
50
50
  # it `dlopen`s the library.
51
51
  #
52
52
  # By setting this compiler flag, we tell it to assume that everything is private unless explicitly stated.
@@ -64,7 +64,7 @@ add_compiler_flag '-Wextra'
64
64
  # This makes it easier for development (avoids "oops I forgot to rebuild when I switched my Ruby") and ensures that
65
65
  # the wrong library is never loaded.
66
66
  # When requiring, we need to use the exact same string, including the version and the platform.
67
- EXTENSION_NAME = "ddtrace_profiling_loader.#{RUBY_VERSION}_#{RUBY_PLATFORM}".freeze
67
+ EXTENSION_NAME = "datadog_profiling_loader.#{RUBY_VERSION}_#{RUBY_PLATFORM}".freeze
68
68
 
69
69
  create_makefile(EXTENSION_NAME)
70
70