summaryrefslogtreecommitdiff
path: root/lib/erl_interface/src
diff options
context:
space:
mode:
authorLukas Larsson <lukas@erlang.org>2022-01-21 11:23:48 +0100
committerLukas Larsson <lukas@erlang.org>2022-01-21 11:23:48 +0100
commitceca17908ca5d7c5d436530d1c5b45e8febc24cc (patch)
treebcb4512eb6498fc11c6bebad3aae9b81630a01bf /lib/erl_interface/src
parent0ef24bfcbd4950171e9279a697249961d438481a (diff)
parentc189373eb8412ea3a4d95cb6dfbd18a5d67dc1c6 (diff)
downloaderlang-ceca17908ca5d7c5d436530d1c5b45e8febc24cc.tar.gz
Merge branch 'maint'
Diffstat (limited to 'lib/erl_interface/src')
-rw-r--r--lib/erl_interface/src/Makefile.in104
-rw-r--r--lib/erl_interface/src/connect/ei_connect.c2
-rw-r--r--lib/erl_interface/src/connect/ei_resolve.c28
-rw-r--r--lib/erl_interface/src/misc/ei_locking.h2
-rw-r--r--lib/erl_interface/src/prog/erl_call.c5
5 files changed, 70 insertions, 71 deletions
diff --git a/lib/erl_interface/src/Makefile.in b/lib/erl_interface/src/Makefile.in
index 204408ee22..9f3fe1333f 100644
--- a/lib/erl_interface/src/Makefile.in
+++ b/lib/erl_interface/src/Makefile.in
@@ -106,7 +106,10 @@ endif
WARNFLAGS += -DEI_NO_DEPR_WARN
-CFLAGS = @LIB_CFLAGS@ $(WARNFLAGS) $(INCFLAGS) $(TYPE_FLAGS)
+CFLAGS = @DED_CFLAGS@ $(WARNFLAGS) $(INCFLAGS) $(TYPE_FLAGS)
+DED_LD = @DED_LD@
+DED_LDFLAGS = @DED_LDFLAGS@
+DED_LD_FLAG_RUNTIME_LIBRARY_PATH = @DED_LD_FLAG_RUNTIME_LIBRARY_PATH@
PROG_CFLAGS = @CFLAGS@ $(WARNFLAGS) $(INCFLAGS) $(TYPE_FLAGS) -Iglobal
INSTALL = @INSTALL@
@@ -127,6 +130,7 @@ MT_OBJDIR = $(ERL_TOP)/lib/erl_interface/obj.mt$(TYPEMARKER)/$(TARGET)
MD_OBJDIR = $(ERL_TOP)/lib/erl_interface/obj.md$(TYPEMARKER)/$(TARGET)
MDD_OBJDIR = $(ERL_TOP)/lib/erl_interface/obj.mdd$(TYPEMARKER)/$(TARGET)
OBJDIR = $(ERL_TOP)/lib/erl_interface/obj$(TYPEMARKER)/$(TARGET)
+LIBDIR = $(ERL_TOP)/lib/erl_interface/lib/$(TARGET)
BINDIR = $(ERL_TOP)/lib/erl_interface/bin/$(TARGET)
# FIXME maybe use this opt and remove (int) cast to is*() functions
@@ -149,14 +153,14 @@ ifeq ($(USING_VC),yes)
LIBEXT=.lib
LIBPRE=
MTFLAG=-MT
-
else
LIBEXT=.a
LIBPRE=lib
MTFLAG=
-
endif
+DYNLIBEXT=.@DED_EXT@
+
###########################################################################
# Specify targets names
###########################################################################
@@ -166,11 +170,16 @@ ERL_CALL = $(BINDIR)/erl_call$(EXE)
ifdef THR_DEFS
ST_EILIB = $(OBJDIR)/$(LIBPRE)ei_st$(LIBEXT)
MT_EILIB = $(OBJDIR)/$(LIBPRE)ei$(LIBEXT)
+ST_EISHLIB = $(LIBDIR)/$(LIBPRE)ei_st$(DYNLIBEXT)
+MT_EISHLIB = $(LIBDIR)/$(LIBPRE)ei$(DYNLIBEXT)
else
ST_EILIB = $(OBJDIR)/$(LIBPRE)ei$(LIBEXT)
+ST_EISHLIB = $(LIBDIR)/$(LIBPRE)ei$(DYNLIBEXT)
endif
MD_EILIB = $(OBJDIR)/$(LIBPRE)ei_md$(LIBEXT)
MDD_EILIB = $(OBJDIR)/$(LIBPRE)ei_mdd$(LIBEXT)
+MD_EISHLIB = $(LIBDIR)/$(LIBPRE)ei_md$(DYNLIBEXT)
+MDD_EISHLIB = $(LIBDIR)/$(LIBPRE)ei_mdd$(DYNLIBEXT)
###########################################################################
# Specify targets to build
@@ -183,17 +192,17 @@ ifeq ($(USING_VC),yes)
# Windows targets
-TARGETS = \
- $(OBJ_TARGETS) \
- $(EXE_TARGETS) \
- $(APP_TARGET) \
- $(APPUP_TARGET)
-
OBJ_TARGETS = \
$(MT_EILIB) \
$(MD_EILIB) \
$(MDD_EILIB)
+SH_TARGETS = \
+ $(MT_EISHLIB) \
+ $(MD_EISHLIB) \
+ $(MDD_EISHLIB)
+
+
FAKE_TARGETS = \
$(OBJDIR)/erl_fake_prog_mt$(EXE) \
$(OBJDIR)/ei_fake_prog_mt$(EXE) \
@@ -210,36 +219,18 @@ FAKE_TARGETS = \
else
-ifeq ($USING_MINGW,yes)
-TARGETS = \
- $(OBJ_TARGETS) \
- $(EXE_TARGETS) \
- $(APP_TARGET) \
- $(APPUP_TARGET)
-
-OBJ_TARGETS = \
- $(MD_EILIB)
-
-FAKE_TARGETS = \
- $(OBJDIR)/erl_fake_prog_md$(EXE) \
- $(OBJDIR)/ei_fake_prog_md$(EXE) \
- $(OBJDIR)/erl_fake_prog_cxx_md$(EXE) \
- $(OBJDIR)/ei_fake_prog_cxx_md$(EXE)
-else
# Unix targets
ifdef THR_DEFS
-TARGETS = \
- $(OBJ_TARGETS) \
- $(EXE_TARGETS) \
- $(APP_TARGET) \
- $(APPUP_TARGET)
-
OBJ_TARGETS = \
$(ST_EILIB) \
$(MT_EILIB)
+SH_TARGETS = \
+ $(ST_EISHLIB) \
+ $(MT_EISHLIB)
+
FAKE_TARGETS = \
$(ST_OBJDIR)/erl_fake_prog_st$(EXE) \
$(ST_OBJDIR)/ei_fake_prog_st$(EXE) \
@@ -252,15 +243,12 @@ FAKE_TARGETS = \
else
-TARGETS = \
- $(OBJ_TARGETS) \
- $(EXE_TARGETS) \
- $(APP_TARGET) \
- $(APPUP_TARGET)
-
OBJ_TARGETS = \
$(ST_EILIB)
+SH_TARGETS = \
+ $(ST_EISHLIB)
+
FAKE_TARGETS = \
$(ST_OBJDIR)/erl_fake_prog_st$(EXE) \
$(ST_OBJDIR)/ei_fake_prog_st$(EXE) \
@@ -271,7 +259,13 @@ endif
endif
-endif
+TARGETS = \
+ $(OBJ_TARGETS) \
+ $(SH_TARGETS) \
+ $(EXE_TARGETS) \
+ $(APP_TARGET) \
+ $(APPUP_TARGET)
+
###########################################################################
# List all source files
###########################################################################
@@ -415,10 +409,10 @@ docs:
tests:
clean:
- rm -f $(ST_EIOBJECTS) $(ST_EILIB)
- rm -f $(MT_EIOBJECTS) $(MT_EILIB)
- rm -f $(MD_EIOBJECTS) $(MD_EILIB)
- rm -f $(MDD_EIOBJECTS) $(MDD_EILIB)
+ rm -f $(ST_EIOBJECTS) $(ST_EILIB) $(ST_EISHLIB)
+ rm -f $(MT_EIOBJECTS) $(MT_EILIB) $(MT_EISHLIB)
+ rm -f $(MD_EIOBJECTS) $(MD_EILIB) $(MD_EISHLIB)
+ rm -f $(MDD_EIOBJECTS) $(MDD_EILIB) $(MDD_EISHLIB)
rm -f $(ERL_CALL)
rm -f $(FAKE_TARGETS)
rm -f $(APP_TARGET)
@@ -451,7 +445,7 @@ $(MDD_OBJDIR)/%.o: %.c
# Create directories
###########################################################################
-_create_dirs := $(shell mkdir -p $(EBINDIR) $(BINDIR) $(OBJDIR) $(ST_OBJDIR) $(MT_OBJDIR) $(MD_OBJDIR) $(MDD_OBJDIR))
+_create_dirs := $(shell mkdir -p $(EBINDIR) $(BINDIR) $(OBJDIR) $(ST_OBJDIR) $(MT_OBJDIR) $(MD_OBJDIR) $(MDD_OBJDIR) $(LIBDIR))
###########################################################################
# Special rules
@@ -482,6 +476,8 @@ $(MDD_EILIB) : $(MDD_EIOBJECTS)
$(V_AR) -out:$@ $(MDD_EIOBJECTS)
$(V_RANLIB) $@
+WIN_SOCKET=-lsocket
+
else
# Unix archive creation
@@ -493,7 +489,6 @@ ifdef RANLIB
$(V_RANLIB) $@
endif
-
$(MT_EILIB) : $(MT_EIOBJECTS)
$(V_at)rm -f $@
$(V_AR) $(AR_FLAGS) $@ $(MT_EIOBJECTS)
@@ -503,6 +498,23 @@ endif
endif
+$(ST_EISHLIB): $(ST_EIOBJECTS)
+ $(ld_verbose) $(DED_LD) $(DED_LDFLAGS) -o $@ \
+ $(DED_LD_FLAG_RUNTIME_LIBRARY_PATH) $(ST_EIOBJECTS) \
+ $(THR_LIBS) $(LIBS) $(WIN_SOCKET)
+$(MT_EISHLIB): $(MT_EIOBJECTS)
+ $(ld_verbose) $(DED_LD) $(DED_LDFLAGS) -o $@ \
+ $(DED_LD_FLAG_RUNTIME_LIBRARY_PATH) $(MT_EIOBJECTS) \
+ $(THR_LIBS) $(LIBS) $(WIN_SOCKET)
+$(MD_EISHLIB): $(MD_EIOBJECTS)
+ $(ld_verbose) $(DED_LD) -MD $(DED_LDFLAGS) -o $@ \
+ $(DED_LD_FLAG_RUNTIME_LIBRARY_PATH) $(MD_EIOBJECTS) \
+ $(THR_LIBS) $(LIBS) $(WIN_SOCKET)
+$(MDD_EISHLIB): $(MDD_EIOBJECTS)
+ $(ld_verbose) $(DED_LD) -MDd $(DED_LDFLAGS) -o $@ \
+ $(DED_LD_FLAG_RUNTIME_LIBRARY_PATH) $(MDD_EIOBJECTS) \
+ $(THR_LIBS) $(LIBS) $(WIN_SOCKET)
+
###########################################################################
# erl_call FIXME how to avoid explicit -lsocket on winows???
###########################################################################
@@ -688,6 +700,10 @@ release: opt
$(INSTALL_DATA) $(HEADERS) "$(RELEASE_PATH)/usr/include"
$(INSTALL_DATA) $(OBJ_TARGETS) "$(RELSYSDIR)/lib"
$(INSTALL_DATA) $(OBJ_TARGETS) "$(RELEASE_PATH)/usr/lib"
+ifeq (@DYNAMIC_LIB@, yes)
+ $(INSTALL_PROGRAM) $(SH_TARGETS) "$(RELSYSDIR)/lib"
+ $(INSTALL_PROGRAM) $(SH_TARGETS) "$(RELEASE_PATH)/usr/lib"
+endif
$(INSTALL_PROGRAM) $(EXE_TARGETS) "$(RELSYSDIR)/bin"
$(INSTALL_DATA) $(EXTRA) "$(RELSYSDIR)/src"
$(INSTALL_DATA) connect/*.[ch] "$(RELSYSDIR)/src/connect"
diff --git a/lib/erl_interface/src/connect/ei_connect.c b/lib/erl_interface/src/connect/ei_connect.c
index 9917ed0978..eac23c40c7 100644
--- a/lib/erl_interface/src/connect/ei_connect.c
+++ b/lib/erl_interface/src/connect/ei_connect.c
@@ -660,7 +660,7 @@ int ei_make_pid(ei_cnode *ec, erlang_pid *pid)
#undef EI_MAKE_REF_ATOMIC__
#ifdef _REENTRANT
-# if ((SIZEOF_LONG == 8 || SIZEOF_LONGLONG == 8) \
+# if ((SIZEOF_LONG == 8 || SIZEOF_LONG_LONG == 8) \
&& (ETHR_HAVE___atomic_compare_exchange_n & 8) \
&& (ETHR_HAVE___atomic_load_n & 8))
# define EI_MAKE_REF_ATOMIC__
diff --git a/lib/erl_interface/src/connect/ei_resolve.c b/lib/erl_interface/src/connect/ei_resolve.c
index 1d11c5043d..e28902da82 100644
--- a/lib/erl_interface/src/connect/ei_resolve.c
+++ b/lib/erl_interface/src/connect/ei_resolve.c
@@ -102,7 +102,7 @@ int ei_init_resolve(void)
return 0;
}
-#if _REENTRANT
+#ifdef _REENTRANT
/*
* Copy the contents of one struct hostent to another, i.e. don't just
@@ -290,10 +290,6 @@ static struct hostent *my_gethostbyname_r(const char *name,
return rval;
}
-#endif /* _REENTRANT */
-
-#if EI_THREADS != false
-
static struct hostent *my_gethostbyaddr_r(const char *addr,
int length,
int type,
@@ -358,7 +354,7 @@ static struct hostent *my_gethostbyaddr_r(const char *addr,
return rval;
}
-#endif /* EI_THREADS != false */
+#endif /* _REENTRANT */
#endif /* !HAVE_GETHOSTBYNAME_R */
@@ -394,14 +390,12 @@ struct hostent *ei_gethostbyaddr_r(const char *addr,
int buflen,
int *h_errnop)
{
-#if (EI_THREADS == false)
+#ifndef _REENTRANT
/* threads disabled, no need to call reentrant function */
- return gethostbyaddr(addr, length, type);
-#else
-#ifndef HAVE_GETHOSTBYNAME_R
+ return gethostbyaddr(addr, length, type);
+#elif !defined(HAVE_GETHOSTBYNAME_R)
return my_gethostbyaddr_r(addr,length,type,hostp,buffer,buflen,h_errnop);
-#else
-#if (defined(__GLIBC__) || defined(__linux__) || (__FreeBSD_version >= 602000) || defined(__DragonFly__))
+#elif (defined(__GLIBC__) || defined(__linux__) || (__FreeBSD_version >= 602000) || defined(__DragonFly__))
struct hostent *result;
gethostbyaddr_r(addr, length, type, hostp, buffer, buflen, &result,
@@ -411,8 +405,6 @@ struct hostent *ei_gethostbyaddr_r(const char *addr,
#else
return gethostbyaddr_r(addr,length,type,hostp,buffer,buflen,h_errnop);
#endif
-#endif
-#endif
}
struct hostent *ei_gethostbyname_r(const char *name,
@@ -424,11 +416,9 @@ struct hostent *ei_gethostbyname_r(const char *name,
#ifndef _REENTRANT
/* threads disabled, no need to call reentrant function */
return gethostbyname(name);
-#else
-#ifndef HAVE_GETHOSTBYNAME_R
+#elif !defined(HAVE_GETHOSTBYNAME_R)
return my_gethostbyname_r(name,hostp,buffer,buflen,h_errnop);
-#else
-#if (defined(__GLIBC__) || defined(__linux__) || (__FreeBSD_version >= 602000) || defined(__DragonFly__) || defined(__ANDROID__))
+#elif (defined(__GLIBC__) || defined(__linux__) || (__FreeBSD_version >= 602000) || defined(__DragonFly__) || defined(__ANDROID__))
struct hostent *result;
int err;
@@ -440,8 +430,6 @@ struct hostent *ei_gethostbyname_r(const char *name,
#else
return gethostbyname_r(name,hostp,buffer,buflen,h_errnop);
#endif
-#endif
-#endif
}
#endif /* win, unix */
diff --git a/lib/erl_interface/src/misc/ei_locking.h b/lib/erl_interface/src/misc/ei_locking.h
index ac9ba41a47..7ee7715448 100644
--- a/lib/erl_interface/src/misc/ei_locking.h
+++ b/lib/erl_interface/src/misc/ei_locking.h
@@ -32,7 +32,7 @@
#ifdef HAVE_MIT_PTHREAD_H
#include <pthread/mit/pthread.h>
-#elif HAVE_PTHREAD_H
+#elif defined(HAVE_PTHREAD_H) && HAVE_PTHREAD_H
#include <pthread.h>
#endif
diff --git a/lib/erl_interface/src/prog/erl_call.c b/lib/erl_interface/src/prog/erl_call.c
index 2b756a921d..6f965fd62c 100644
--- a/lib/erl_interface/src/prog/erl_call.c
+++ b/lib/erl_interface/src/prog/erl_call.c
@@ -1203,11 +1203,6 @@ void exit_free_flags_fields(int exit_status, struct call_flags* flags) {
/* Constants and helper functions used by erl_start_sys */
-/* FIXME is this a case a vfork can be used? */
-#if !HAVE_WORKING_VFORK
-# define vfork fork
-#endif
-
#ifndef MAXPATHLEN
#define MAXPATHLEN 1024
#endif