erlang and freebsd [large]
Jimmy Olgeni
olgeni@REDACTED
Sat Mar 16 21:08:54 CET 2002
Hello everybody.
I made some patches to update the Erlang port in the FreeBSD ports
collection to R8B. Some of them may be useful outside FreeBSD too, or
maybe they can be integrated in the official release to avoid having
lots of small patches to update at every release.
Lots of these patches where already in the Erlang port. If I remember
correctly, FreeBSD support for os_mon came from Samuel Tardieu. Some
other stuff came from previous maintainers :o)
The following patches add support for INSTALL_SCRIPT, to be used for
installing scripts. INSTALL_PROGRAM causes install to "strip" the script
like an executable, and fail. I don't know if this applies to other OSs
too.
=== patch-ab ===
--- lib/inets/priv/Makefile.orig Tue Nov 28 20:38:31 2000
+++ lib/inets/priv/Makefile Tue Nov 28 20:38:38 2000
@@ -57,7 +57,7 @@
release_spec: opt
$(INSTALL_DIR) $(RELSYSDIR)/priv/bin
- $(INSTALL_PROGRAM) $(EXECUTABLES) $(RELSYSDIR)/priv/bin
+ $(INSTALL_SCRIPT) $(EXECUTABLES) $(RELSYSDIR)/priv/bin
release_docs_spec:
# End
=== patch-ac ===
--- erts/etc/common/Makefile.in.orig Tue Nov 28 20:41:14 2000
+++ erts/etc/common/Makefile.in Tue Nov 28 20:46:05 2000
@@ -65,6 +65,7 @@
INSTALL = @INSTALL@
INSTALL_DIR = $(INSTALL) -d
INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_DATA = @INSTALL_DATA@
ifeq ($(findstring solaris,$(TARGET)),solaris)
@@ -238,13 +239,13 @@
endif
$(INSTALL_DIR) $(RELEASE_PATH)/erts-$(VSN)/bin
ifneq ($(findstring vxworks,$(TARGET)), vxworks)
- $(INSTALL_PROGRAM) erl.src $(RELEASE_PATH)/erts-$(VSN)/bin
+ $(INSTALL_SCRIPT) erl.src $(RELEASE_PATH)/erts-$(VSN)/bin
endif
$(INSTALL_PROGRAM) $(INSTALL_PROGS) $(RELEASE_PATH)/erts-$(VSN)/bin
- $(INSTALL_PROGRAM) $(INSTALL_TOP) $(RELEASE_PATH)
+ $(INSTALL_SCRIPT) $(INSTALL_TOP) $(RELEASE_PATH)
ifneq ($(INSTALL_MISC),)
$(INSTALL_DIR) $(RELEASE_PATH)/misc
- $(INSTALL_PROGRAM) $(INSTALL_MISC) $(RELEASE_PATH)/misc
+ $(INSTALL_SCRIPT) $(INSTALL_MISC) $(RELEASE_PATH)/misc
endif
ifneq ($(INSTALL_SRC),)
$(INSTALL_DIR) $(RELEASE_PATH)/erts-$(VSN)/src
=== patch-ak ===
--- lib/inets/examples/Makefile.orig Tue Nov 28 20:35:48 2000
+++ lib/inets/examples/Makefile Tue Nov 28 20:36:24 2000
@@ -176,7 +176,7 @@
$(INSTALL_DIR) $(RELSYSDIR)/examples/server_root/auth
$(INSTALL_DATA) $(AUTH_FILES) $(RELSYSDIR)/examples/server_root/auth
$(INSTALL_DIR) $(RELSYSDIR)/examples/server_root/cgi-bin
- $(INSTALL_PROGRAM) $(CGI_FILES) $(RELSYSDIR)/examples/server_root/cgi-bin
+ $(INSTALL_SCRIPT) $(CGI_FILES) $(RELSYSDIR)/examples/server_root/cgi-bin
$(INSTALL_DIR) $(RELSYSDIR)/examples/server_root/conf
$(INSTALL_DATA) $(CONF_FILES) $(RELSYSDIR)/examples/server_root/conf
$(INSTALL_DIR) $(RELSYSDIR)/examples/server_root/htdocs/open
=== patch-am ===
--- lib/mnesia/examples/Makefile.orig Sun Dec 2 19:00:59 2001
+++ lib/mnesia/examples/Makefile Sun Dec 2 19:01:32 2001
@@ -95,7 +95,7 @@
bench.config6 \
bench.config7 \
$(RELSYSDIR)/examples/bench)
- (cd bench; $(INSTALL_PROGRAM) bench.sh $(RELSYSDIR)/examples/bench)
+ (cd bench; $(INSTALL_SCRIPT) bench.sh $(RELSYSDIR)/examples/bench)
release_docs_spec:
=== patch-ao ===
--- make/otp.mk.in.orig Fri Dec 7 17:59:22 2001
+++ make/otp.mk.in Fri Dec 7 17:59:32 2001
@@ -41,6 +41,7 @@
INSTALL = @INSTALL@
INSTALL_DIR = @INSTALL_DIR@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_DATA = @INSTALL_DATA@
CC = @CC@
These patches add FreeBSD support to os_mon.
=== patch-af ===
--- lib/os_mon/c_src/Makefile.in.orig Tue Nov 23 16:14:47 1999
+++ lib/os_mon/c_src/Makefile.in Sat Dec 2 22:35:09 2000
@@ -53,6 +53,7 @@
PROGRAMS = \
memsup @os_mon_programs@
C_FILES= $(PROGRAMS:%=%.c)
+LKSTAT= @os_mon_kstat@
endif
TARGET_FILES= $(PROGRAMS:%=$(BINDIR)/%)
@@ -97,7 +98,7 @@
$(LD) $(LDFLAGS) -o $@ $<
$(BINDIR)/cpu_sup: $(OBJDIR)/cpu_sup.o
- $(LD) $(LDFLAGS) -o $@ $< -lkstat
+ $(LD) $(LDFLAGS) -o $@ $< $(LKSTAT)
$(OBJDIR)/%.o: %.c
$(CC) -c -o $@ $(ALL_CFLAGS) $<
=== patch-ag ===
--- lib/os_mon/c_src/memsup.c.orig Mon Sep 20 23:05:24 1999
+++ lib/os_mon/c_src/memsup.c Sat Dec 2 22:23:25 2000
@@ -89,6 +89,12 @@
#include <ioLib.h>
#include <memLib.h>
#endif
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <sys/vmmeter.h>
+#include <vm/vm_param.h>
+#endif
/* commands */
#include "memsup.h"
@@ -172,6 +178,16 @@
load_statistics();
*tot = (latest.numBytesFree + latest.numBytesAlloc) >> shiftleft;
*used = latest.numBytesAlloc >> shiftleft;
+#elif defined(__FreeBSD__)
+ int mib[2];
+ size_t len;
+ struct vmtotal memory;
+ mib[0] = CTL_VM;
+ mib[1] = VM_METER;
+ len = sizeof memory;
+ sysctl(mib, 2, &memory, &len, NULL, 0);
+ *tot = memory.t_vm >> shiftleft;
+ *used = memory.t_avm >> shiftleft;
#elif defined(_SC_AVPHYS_PAGES) /* Does this exist on others than Solaris2? */
unsigned long avPhys, phys, pgSz;
# End
=== patch-ah ===
--- lib/os_mon/c_src/cpu_sup.c.orig Sat Dec 2 22:12:38 2000
+++ lib/os_mon/c_src/cpu_sup.c Sat Dec 2 22:47:11 2000
@@ -26,7 +26,14 @@
*/
#include<stdio.h>
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <sys/param.h>
+#include <sys/user.h>
+#else
#include<kstat.h>
+#endif
#define FD_IN 0
#define FD_OUT 1
@@ -45,20 +52,23 @@
static void send(unsigned int data);
static void error(char* err_msg);
+#ifndef __FreeBSD__
static kstat_ctl_t *kc;
static kstat_t *ks;
+#endif
int main(int argc, char** argv) {
- kid_t kid;
char cmd;
int rc;
+#ifndef __FreeBSD__
+ kid_t kid;
kc = kstat_open();
if(!kc) error("Can't open header kstat");
ks = kstat_lookup(kc,"unix",0,"system_misc");
if(!ks) error("Can't open system_misc kstat");
-
+#endif
while(1) {
rc = read(FD_IN, &cmd, sizeof(cmd));
@@ -79,6 +89,32 @@
}
static unsigned int measure(char* name) {
+#ifdef __FreeBSD__
+ size_t len;
+ int mib[3];
+ if (!strcmp (name, "nproc")) {
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_ALL;
+ sysctl(mib, 3, NULL, &len, NULL, 0);
+ return len/sizeof(struct kinfo_proc);
+ } else {
+ struct loadavg load;
+ mib[0] = CTL_VM;
+ mib[1] = VM_LOADAVG;
+ len = sizeof load;
+ sysctl(mib, 2, &load, &len, NULL, 0);
+ if (!strcmp (name, "avenrun_1min")) {
+ return load.ldavg[0] * 256 / load.fscale;
+ } else if (!strcmp (name, "avenrun_5min")) {
+ return load.ldavg[1] * 256 / load.fscale;
+ } else if (!strcmp (name, "avenrun_15min")) {
+ return load.ldavg[2] * 256 / load.fscale;
+ } else {
+ return -1;
+ }
+ }
+#else
kstat_named_t* entry;
kstat_read(kc,ks,NULL);
@@ -90,6 +126,7 @@
return -1;
return entry->value.ul;
+#endif
}
static void send(unsigned int data) {
=== patch-ai ===
--- lib/os_mon/c_src/ferrule.c.orig Sat Dec 2 22:13:49 2000
+++ lib/os_mon/c_src/ferrule.c Sat Dec 2 22:14:03 2000
@@ -17,7 +17,9 @@
*/
#include <stdio.h>
#include <string.h>
+#ifndef __FreeBSD__
#include <stropts.h>
+#endif
#include <poll.h>
#include <unistd.h>
#include <sys/types.h>
This will also detect strerror_r, which is now present in FreeBSD and must
not be defined.
=== patch-an ===
--- erts/configure.in.orig Mon Oct 8 10:36:08 2001
+++ erts/configure.in Sun Jan 20 16:06:23 2002
@@ -436,7 +436,7 @@
dnl ----------------------------------------------------------------------
AC_CHECK_FUNCS([ieee_handler fpsetmask finite res_gethostbyname dlopen \
- poll pread pwrite writev memmove strerror strncasecmp \
+ poll pread pwrite writev memmove strerror strerror_r strncasecmp \
gethrtime localtime_r gmtime_r mremap memcpy mallopt])
AC_FUNC_SETVBUF_REVERSED
AC_FUNC_VFORK
@@ -886,10 +886,13 @@
# Os mon stuff.
#--------------------------------------------------------------------
AC_SUBST(os_mon_programs)
-AC_CHECK_LIB(kstat, kstat_open, [os_mon_programs="$os_mon_programs cpu_sup"])
+AC_SUBST(os_mon_kstat)
+AC_CHECK_LIB(kstat, kstat_open, [os_mon_kstat="-lkstat", os_mon_programs="$os_mon_programs cpu_sup"])
case $host_os in
solaris2*)
os_mon_programs="$os_mon_programs ferrule mod_syslog" ;;
+ freebsd*)
+ os_mon_programs="$os_mon_programs cpu_sup ferrule mod_syslog" ;;
esac
This fixes a bug in the configuration script. Due to a ./configure
recursion bug, Erlang tries to install using INSTALL=../../../../../...,
which will fail :o)
This used to be a bug in older autoconf releases (at least google said so).
=== post-patch-configure ===
--- configure.orig Fri Dec 7 16:13:39 2001
+++ configure Fri Dec 7 16:19:33 2001
@@ -1081,6 +1081,7 @@
*) # Relative path.
ac_sub_cache_file="$ac_dots$cache_file" ;;
esac
+ ac_given_INSTALL="$INSTALL"
case "$ac_given_INSTALL" in
[/$]*) INSTALL="$ac_given_INSTALL" ;;
*) INSTALL="$ac_dots$ac_given_INSTALL" ;;
This one fixes a syntax error when there's more than one lib/sasl*
directory.
=== patch-aj ===
--- ./erts/etc/unix/Install.src.orig Wed Jan 17 17:18:57 2001
+++ ./erts/etc/unix/Install.src Wed Jan 17 17:35:40 2001
@@ -97,7 +97,8 @@
chmod 755 start_erl
fi
-if [ -d $ERL_ROOT/lib/sasl* ]
+set $ERL_ROOT/lib/sasl*
+if [ -d $1 ]
then
(cd $ERL_ROOT/releases
echo %I_VSN% %I_SYSTEM_VSN% > start_erl.data)
@@ -171,4 +172,4 @@
./misc/format_man_pages $ERL_ROOT
fi
-
+exit 0
If you have any questions just drop me a note, I don't have a clue but I'll
try to help :o)
--
jimmy
More information about the erlang-questions
mailing list