Skip to content

Commit

Permalink
Merge branch 'stanhu-sh-auto-detect-cxx-flags' into macosci
Browse files Browse the repository at this point in the history
* stanhu-sh-auto-detect-cxx-flags:
  Avoid C++ name mangling in C code
  Fix C pointer conversion errors
  Auto-detect C++ extensions needed to build
  • Loading branch information
tenderlove committed Jul 9, 2024
2 parents 2ab0191 + 01df9a5 commit b77c32c
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 7 deletions.
15 changes: 15 additions & 0 deletions ext/charlock_holmes/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,19 @@ static inline VALUE charlock_new_str2(const char *str)
#endif
}


#ifdef __cplusplus
extern "C"
{
#endif

extern void Init_charlock_holmes();
extern void _init_charlock_encoding_detector();
extern void _init_charlock_converter();
extern void _init_charlock_transliterator();

#ifdef __cplusplus
}
#endif

#endif
2 changes: 1 addition & 1 deletion ext/charlock_holmes/converter.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ static VALUE rb_converter_convert(VALUE self, VALUE rb_txt, VALUE rb_src_enc, VA
if (status != U_BUFFER_OVERFLOW_ERROR) {
rb_raise(rb_eArgError, "%s", u_errorName(status));
}
out_buf = malloc(out_len);
out_buf = (char *) malloc(out_len);

// now do the actual conversion
status = U_ZERO_ERROR;
Expand Down
2 changes: 1 addition & 1 deletion ext/charlock_holmes/encoding_detector.c
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ static VALUE rb_encdec__alloc(VALUE klass)
UErrorCode status = U_ZERO_ERROR;
VALUE obj;

detector = calloc(1, sizeof(charlock_detector_t));
detector = (charlock_detector_t *) calloc(1, sizeof(charlock_detector_t));
obj = Data_Wrap_Struct(klass, NULL, rb_encdec__free, (void *)detector);

detector->csd = ucsdet_open(&status);
Expand Down
6 changes: 1 addition & 5 deletions ext/charlock_holmes/ext.c
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
#include "common.h"

extern void _init_charlock_encoding_detector();
extern void _init_charlock_converter();
extern void _init_charlock_transliterator();

VALUE rb_mCharlockHolmes;

void Init_charlock_holmes() {
Expand All @@ -12,4 +8,4 @@ void Init_charlock_holmes() {
_init_charlock_encoding_detector();
_init_charlock_converter();
_init_charlock_transliterator();
}
}
26 changes: 26 additions & 0 deletions ext/charlock_holmes/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,30 @@
$CFLAGS << ' -Wall -funroll-loops'
$CFLAGS << ' -Wextra -O0 -ggdb3' if ENV['DEBUG']

minimal_program = <<~SRC
#include <unicode/translit.h>
int main() { return 0; }
SRC

# Pass -x c++ to force gcc to compile the test program
# as C++ (as it will end in .c by default).
compile_options = +"-x c++"

icu_requires_version_flag = checking_for("icu that requires explicit C++ version flag") do
!try_compile(minimal_program, compile_options)
end

if icu_requires_version_flag
abort "Cannot compile icu with your compiler: recent versions require C++17 support." unless %w[c++20 c++17 c++11 c++0x].any? do |std|
checking_for("icu that compiles with #{std} standard") do
flags = compile_options + " -std=#{std}"
if try_compile(minimal_program, flags)
$CPPFLAGS << flags

true
end
end
end
end

create_makefile 'charlock_holmes/charlock_holmes'

0 comments on commit b77c32c

Please sign in to comment.