From 51ecea6458c4b2fbc98272ce5ab2951f2c0d46cc Mon Sep 17 00:00:00 2001 From: Jordan Bracco Date: Thu, 9 Jul 2020 16:21:08 +0200 Subject: [PATCH] Support OTP<21.3 --- Makefile | 11 ++++++++--- mix.exs | 11 +++++++++++ src/libmagic_port.c | 7 +++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 5d60819..c8145a5 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,20 @@ CFLAGS = -std=c99 -g -Wall -Werror -CPPFLAGS = -I$(ERL_EI_INCLUDE_DIR) -LDFLAGS = -L$(ERL_EI_LIBDIR) +CPPFLAGS = -I$(ERL_EI_INCLUDE_DIR) -I/usr/local/include +LDFLAGS = -L$(ERL_EI_LIBDIR) -L/usr/local/lib LDLIBS = -lpthread -lei -lm -lmagic PRIV = priv/ RM = rm -Rf +ifeq ($(EI_INCOMPLETE),YES) + LDLIBS += -lerl_interface + CFLAGS += -DEI_INCOMPLETE +endif + all: priv/libmagic_port priv/libmagic_port: src/libmagic_port.c mkdir -p priv - $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@ + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $< $(LDLIBS) -o $@ clean: $(RM) $(PRIV) diff --git a/mix.exs b/mix.exs index f516fd3..168f0e1 100644 --- a/mix.exs +++ b/mix.exs @@ -14,6 +14,7 @@ defmodule Majic.MixProject do elixirc_options: [warnings_as_errors: warnings_as_errors(Mix.env())], start_permanent: Mix.env() == :prod, compilers: [:elixir_make] ++ Mix.compilers(), + make_env: make_env(), package: package(), deps: deps(), dialyzer: dialyzer(), @@ -70,4 +71,14 @@ defmodule Majic.MixProject do defp warnings_as_errors(:dev), do: false defp warnings_as_errors(_), do: true + + defp make_env() do + otp = :erlang.system_info(:otp_release) + |> to_string() + |> String.to_integer() + + ei_incomplete = if(otp < 21.3, do: "YES", else: "NO") + %{"EI_INCOMPLETE" => ei_incomplete} + end + end diff --git a/src/libmagic_port.c b/src/libmagic_port.c index a6c5afb..fcfd72a 100644 --- a/src/libmagic_port.c +++ b/src/libmagic_port.c @@ -43,6 +43,9 @@ #include #include +#ifdef EI_INCOMPLETE +#include +#endif #include #include #include @@ -104,7 +107,11 @@ static magic_t magic_type_name; // MAGIC_NONE bool magic_loaded = false; int main(int argc, char **argv) { +#ifdef EI_INCOMPLETE + erl_init(NULL, -1); +#else EI_ENSURE(ei_init()); +#endif setup_environment(); magic_open_all();