Subject: pkg/37360: lang/erlang doesn't compile on -current
To: None <pkg-manager@netbsd.org, gnats-admin@netbsd.org,>
From: None <degroote@netbsd.org>
List: pkgsrc-bugs
Date: 11/11/2007 21:15:01
>Number:         37360
>Category:       pkg
>Synopsis:       lang/erlang doesn't compile on -current
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Nov 11 21:15:01 +0000 2007
>Originator:     A. Degroote
>Release:        current
>Organization:
>Environment:
NetBSD Amilo.at.home 4.99.35 NetBSD 4.99.35 (AMILO) #9: Sat Nov 10 10:47:57 CET 2007  zul@Amilo.at.home:/home/zul/netbsd-dev/build_temp/objdir/sys/arch/i386/compile/AMILO i386

>Description:
The build of lang/erlang failed with the following error :

cc    -I/usr/include -I/usr/pkgsrc/lang/erlang/work/otp_src_R11B-5/erts/i386--netbsdelf   -I/usr/include  -DHYBRID -DHAVE_CONFIG_H -Wall -Wstrict-prototypes -Wmissing-prototypes   -Ibeam -Isys/unix -Isys/common -Ii386--netbsdelf/opt/hybrid -Ii386--netbsdelf -Izlib -Ihipe -I../include/internal -I../include/internal/i386--netbsdelf -c sys/common/erl_mseg.c -o obj/i386--netbsdelf/opt/hybrid/erl_mseg.o
sys/common/erl_mseg.c: In function 'mseg_recreate':
sys/common/erl_mseg.c:375: error: 'MREMAP_MAYMOVE' undeclared (first use in this function)
sys/common/erl_mseg.c:375: error: (Each undeclared identifier is reported only once
sys/common/erl_mseg.c:375: error: for each function it appears in.)
sys/common/erl_mseg.c:375: warning: passing argument 3 of 'mremap' makes pointer from integer without a cast
sys/common/erl_mseg.c:375: error: too few arguments to function 'mremap'

It is due to different prototype between GNU/Linux mremap and our implementation.
>How-To-Repeat:
cd /usr/pkgsrc/lang/erlang; make;
>Fix:
The following patch permit to compile on NetBSD but need more attention for other system.

$NetBSD$

--- erts/emulator/sys/common/erl_mseg.c.orig    2007-11-11 14:24:18.00000000
00 +0100
+++ erts/emulator/sys/common/erl_mseg.c
@@ -371,8 +371,9 @@ mseg_recreate(void *old_seg, Uint old_si
 #elif HAVE_MREMAP
     new_seg = (void *) mremap((void *) old_seg,
                              (size_t) old_size,
+                             (void *) new_seg,
                              (size_t) new_size,
-                             MREMAP_MAYMOVE);
+                             0);
     if (new_seg == (void *) MAP_FAILED)
        new_seg = NULL;
 #else