From 1b78e85c9b6097f0d1940793e5fed4e08c0794f9 Mon Sep 17 00:00:00 2001 From: Rickard Green Date: Wed, 3 Feb 2010 12:56:25 +0000 Subject: OTP-8323 Cross compilation improvements and other build system improvements. Most notable: Lots of cross compilation improvements. The old cross compilation support was more or less non-existing as well as broken. Please, note that the cross compilation support should still be considered as experimental. Also note that old cross compilation configurations cannot be used without modifications. For more information on cross compiling Erlang/OTP see the $ERL_TOP/xcomp/README file. Support for staged install using D ESTDIR. The old broken INSTALL_PREFIX has also been fixed. For more information see the $ERL_TOP/README file. Documentation of the release target of the top Makefile. For more information see the $ERL_TOP/README file. make install now by default creates relative symbolic links instead of absolute ones. For more information see the $ERL_TOP/README file. $ERL_TOP/configure --help=recursive now works and prints help for all applications with configure scripts. Doing make install, or make release directly after make all no longer triggers miscellaneous rebuilds. Existing bootstrap system is now used when doing make install, or make release without a preceding make all. The crypto and ssl applications use the same runtime library path when dynamically linking against libssl.so and libcrypto.so. The runtime library search path has also been extended. The configure scripts of erl_interface and odbc now search for thread libraries and thread library quirks the same way as erts do. The configure script of the odbc application now also looks for odbc libraries in lib64 and lib/64 directories when building on a 64-bit system. The config.h.in file in the erl_interface application is now automatically generated in instead of statically updated which reduces the risk of configure tests without any effect. --- lib/megaco/configure.in | 113 ++++++++++++--------- lib/megaco/src/flex/Makefile.in | 80 ++++++++++----- .../src/flex/megaco_flex_scanner_drv.flex.src | 13 +-- 3 files changed, 121 insertions(+), 85 deletions(-) (limited to 'lib/megaco') diff --git a/lib/megaco/configure.in b/lib/megaco/configure.in index 297d618369..8f94a4efcf 100644 --- a/lib/megaco/configure.in +++ b/lib/megaco/configure.in @@ -1,20 +1,20 @@ dnl Process this file with autoconf to produce a configure script. -*-m4-*- dnl dnl %CopyrightBegin% -dnl -dnl Copyright Ericsson AB 2001-2009. All Rights Reserved. -dnl +dnl +dnl Copyright Ericsson AB 2001-2010. All Rights Reserved. +dnl dnl The contents of this file are subject to the Erlang Public License, dnl Version 1.1, (the "License"); you may not use this file except in dnl compliance with the License. You should have received a copy of the dnl Erlang Public License along with this software. If not, it can be dnl retrieved online at http://www.erlang.org/. -dnl +dnl dnl Software distributed under the License is distributed on an "AS IS" dnl basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See dnl the License for the specific language governing rights and limitations dnl under the License. -dnl +dnl dnl %CopyrightEnd% dnl @@ -145,12 +145,14 @@ AC_ARG_ENABLE(megaco_flex_scanner_lineno, AC_SUBST(ENABLE_MEGACO_FLEX_SCANNER_LINENO) +dnl This is the os flavour, should be unix, vxworks or win32 +if test "X$host" = "Xwin32"; then + ERLANG_OSTYPE=win32 +else + ERLANG_OSTYPE=unix +fi -dnl -dnl C compiler (related) defs -dnl - -AC_PROG_CC +AC_SUBST(ERLANG_OSTYPE) dnl Magic test for clearcase. if test -d ../../system; then @@ -158,33 +160,55 @@ if test -d ../../system; then else OTP_EXTRA_FLAGS= fi +AC_SUBST(OTP_EXTRA_FLAGS) + +dnl +dnl If ${ERL_TOP}/make/otp_ded.mk.in exists and contains DED_MK_VSN > 0, +dnl every thing releted to compiling Dynamic Erlang Drivers can be found +dnl in $(ERL_TOP)/make/$(TARGET)/ded.mk at compile time. If not, try to +dnl figure these things out. +dnl + +AC_MSG_CHECKING([for usable Dynamic Erlang Driver configuration]) +[ + ded_mk_in="${ERL_TOP}/make/otp_ded.mk.in" + ded_mk_vsn= + test -r "$ded_mk_in" && + ded_mk_vsn=`sed -n "s/^DED_MK_VSN[ ]*=[ ]*\(.*\)/\1/p" < "$ded_mk_in"` + test "$ded_mk_vsn" != "" || ded_mk_vsn=0 +] + +if test $ded_mk_vsn -gt 0; then + +HAVE_USABLE_OTP_DED_MK=yes +AC_MSG_RESULT([yes]) +CC=false +AC_SUBST(CC) +DED_LD=false +AC_SUBST(DED_LD) + +else dnl --- begin no usable otp_ded.mk.in --- + +HAVE_USABLE_OTP_DED_MK=no +AC_MSG_RESULT([no]) dnl -dnl The ErlDrvEntry struct changed in R13 (another field) +dnl C compiler (related) defs dnl -AC_CHECK_MEMBERS([struct ErlDrvEntry.stop_select], - [ - CFLAGS="$CFLAGS -DMEGACO_DRV_ENTRY_HAS_STOP_SELECT" - ], - [], - [ - #include "erl_driver.h" - ]) +AC_PROG_CC dnl dnl Flags to the C compiler dnl -dnl make sure we find config.h -CFLAGS="$CFLAGS -I${ERL_TOP}/erts/$host -I${ERL_TOP}/erts/include/$host $OTP_EXTRA_FLAGS" if test "X$host" = "Xwin32"; then DED_CFLAGS="$CFLAGS" else case $host_os in darwin*) - CFLAGS="$CFLAGS -no-cpp-precomp" + CFLAGS="$CFLAGS -no-cpp-precomp -fno-common" ;; esac @@ -196,22 +220,10 @@ else fi dnl emulator includes needed -DED_INCLUDE="-I${ERL_TOP}/erts/emulator/beam -I${ERL_TOP}/erts/include -I${ERL_TOP}/erts/include/$host" - -DED_CFLAGS="$DED_INCLUDE $DED_CFLAGS" - - +DED_INCLUDES="-I${ERL_TOP}/erts/emulator/beam -I${ERL_TOP}/erts/include -I${ERL_TOP}/erts/include/$host -I${ERL_TOP}/erts/include/internal -I${ERL_TOP}/erts/include/internal/$host -I${ERL_TOP}/erts/emulator/sys/$ERLANG_OSTYPE" -AC_SUBST(DED_CFLAGS) - - -AC_CHECK_PROGS(DED_LD, [ld.sh ld], no_ld) -if test "$DED_LD" = no_ld; then - AC_MSG_ERROR([ld is required to build the flex scanner!]) -fi +DED_THR_DEFS="-D_THREAD_SAFE -D_REENTRANT" - -AC_MSG_CHECKING(for linker flags for loadable drivers) case $host_os in win32) DED_LDFLAGS="-dll" @@ -230,33 +242,36 @@ case $host_os in # Mach-O linker, a shared lib and a loadable # object file is not the same thing. DED_LDFLAGS="-bundle -flat_namespace -undefined suppress" - DED_CFLAGS="$DED_CFLAGS -fno-common" + DED_LD="$CC" ;; *) # assume GNU linker and ELF DED_LDFLAGS="-shared" ;; esac + +AC_CHECK_PROGS(DED_LD, [$LD ld.sh]) +AC_CHECK_TOOL(DED_LD, ld, no_ld) +if test "$DED_LD" = no_ld; then + AC_MSG_ERROR([ld is required to build the flex scanner!]) +fi + +AC_MSG_CHECKING(for linker flags for loadable drivers) DED_LDFLAGS="$LDFLAGS $DED_LDFLAGS" AC_MSG_RESULT([$DED_LDFLAGS]) -AC_SUBST(DED_LDFLAGS) +fi dnl --- end no usable otp_ded.mk.in --- + +AC_SUBST(HAVE_USABLE_OTP_DED_MK) +AC_SUBST(DED_CFLAGS) +AC_SUBST(DED_INCLUDES) +AC_SUBST(DED_THR_DEFS) +AC_SUBST(DED_LDFLAGS) AC_CHECK_PROG(PERL, perl, perl, no_perl) if test "$PERL" = no_perl; then AC_MSG_ERROR([Perl is required to build the flex scanner!]) fi - -dnl This is the os flavour, should be unix, vxworks or win32 -if test "X$host" = "Xwin32"; then - ERLANG_OSTYPE=win32 -else - ERLANG_OSTYPE=unix -fi - -AC_SUBST(ERLANG_OSTYPE) - - AC_OUTPUT(src/flex/$host/Makefile:src/flex/Makefile.in) diff --git a/lib/megaco/src/flex/Makefile.in b/lib/megaco/src/flex/Makefile.in index 782d6a4807..6ce9b34617 100644 --- a/lib/megaco/src/flex/Makefile.in +++ b/lib/megaco/src/flex/Makefile.in @@ -1,19 +1,19 @@ # # %CopyrightBegin% -# -# Copyright Ericsson AB 2001-2009. All Rights Reserved. -# +# +# Copyright Ericsson AB 2001-2010. All Rights Reserved. +# # The contents of this file are subject to the Erlang Public License, # Version 1.1, (the "License"); you may not use this file except in # compliance with the License. You should have received a copy of the # Erlang Public License along with this software. If not, it can be # retrieved online at http://www.erlang.org/. -# +# # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. -# +# # %CopyrightEnd% include $(ERL_TOP)/make/target.mk @@ -23,13 +23,30 @@ MEGACO_INCLUDEDIR = ../../include include $(ERL_TOP)/make/$(TARGET)/otp.mk - # ---------------------------------------------------- # Application version # ---------------------------------------------------- include ../../vsn.mk VSN=$(MEGACO_VSN) +# ---------------------------------------------------- +# Dynamic Erlang Driver +# ---------------------------------------------------- +HAVE_USABLE_OTP_DED_MK = @HAVE_USABLE_OTP_DED_MK@ + +ifeq ($(HAVE_USABLE_OTP_DED_MK),yes) +# otp_ded.mk will be used on R13B04 and later +include $(ERL_TOP)/make/$(TARGET)/otp_ded.mk +else +# megacos configure provide the info instead +DED_CC = @CC@ +DED__NOWARN_NOTHR_CFLAGS = @DED_CFLAGS@ +DED_THR_DEFS = @DED_THR_DEFS@ +DED_LD = @DED_LD@ +DED_LDFLAGS = @DED_LDFLAGS@ +DED_INCLUDES = @DED_INCLUDES@ +DED_EXT = so +endif # ---------------------------------------------------- # The following variables differ on different systems, we set @@ -39,16 +56,16 @@ VSN=$(MEGACO_VSN) FLEX_VSN = $(shell flex --version) -TMP_CFLAGS = @DED_CFLAGS@ +TMP_CFLAGS = $(DED__NOWARN_NOTHR_CFLAGS) @OTP_EXTRA_FLAGS@ ifeq ($(TYPE),valgrind) CFLAGS = $(subst -O2, , $(TMP_CFLAGS)) -DVALGRIND else CFLAGS = $(TMP_CFLAGS) endif -CC = @CC@ -CFLAGS_MT = $(CFLAGS) -D_THREAD_SAFE -D_REENTRANT -LD = @DED_LD@ -LDFLAGS = @DED_LDFLAGS@ +CC = $(DED_CC) +CFLAGS_MT = $(CFLAGS) $(DED_THR_DEFS) +LD = $(DED_LD) +LDFLAGS = $(DED_LDFLAGS) LEX = @LEX@ LEXLIB = @LEXLIB@ PERL = @PERL@ @@ -87,18 +104,13 @@ ENABLE_MEGACO_FLEX_SCANNER_LINENO = @ENABLE_MEGACO_FLEX_SCANNER_LINENO@ endif endif - -SYSINCLUDE = -I$(ERL_TOP)/erts/emulator/beam \ - -I$(ERL_TOP)/erts/emulator/sys/$(ERLANG_OSTYPE) ifeq ($(findstring vxworks,$(TARGET)),vxworks) - SYSINCLUDE += -I$(ERL_TOP)/erts/etc/vxworks + DED_INCLUDES += -I$(ERL_TOP)/erts/etc/vxworks endif -DRIVER_INCLUDES = $(SYSINCLUDE) - PRIVDIR = ../../priv LIBDIR = $(PRIVDIR)/lib/$(TARGET) - +OBJDIR = $(PRIVDIR)/obj/$(TARGET) # ---------------------------------------------------- # Release directory specification @@ -138,8 +150,8 @@ ifeq ($(findstring vxworks,$(TARGET)),vxworks) FLEX_SCANNER_SO = SOLIBS = $(FLEX_SCANNER_SO) else -FLEX_SCANNER_SO = $(LIBDIR)/$(STD_DRV).so -FLEX_SCANNER_MT_SO = $(LIBDIR)/$(MT_DRV).so +FLEX_SCANNER_SO = $(LIBDIR)/$(STD_DRV).$(DED_EXT) +FLEX_SCANNER_MT_SO = $(LIBDIR)/$(MT_DRV).$(DED_EXT) SOLIBS = $(FLEX_SCANNER_SO) $(FLEX_SCANNER_MT_SO) endif endif @@ -175,7 +187,7 @@ else CFLAGS += -DMFS_FLEX_DEBUG=0 endif -CFLAGS += $(DRIVER_INCLUDES) $(DRV_FLAGS) -funroll-loops -Wall +CFLAGS += $(DED_INCLUDES) -I$(ERL_TOP)/erts/$(TARGET) $(DRV_FLAGS) -funroll-loops -Wall #ifneq ($(FLEX_VSN),) #CFLAGS += -DFLEX_VERSION="$(FLEX_VSN)" @@ -379,18 +391,30 @@ $(STD_DRV).c: $(STD_DRV).flex $(MT_DRV).c: $(MT_DRV).flex $(LEX) $(MT_LEX_FLAGS) -P$* -o$@ $< -solibs: $(LIBDIR) $(SOLIBS) +solibs: $(LIBDIR) $(OBJDIR) $(SOLIBS) + +$(OBJDIR)/$(STD_DRV).o: $(STD_DRV).c + @echo "compiling std driver:" + $(CC) -c $(STD_DRV_NAME) $(CFLAGS) -o $@ $< + +$(OBJDIR)/$(MT_DRV).o: $(MT_DRV).c + @echo "compiling multi-threaded driver:" + $(CC) -c $(MT_DRV_NAME) $(CFLAGS_MT) -o $@ $< + # No need to link with -lfl as we have also defined %option noyywrap - # and having -lfl doesn't work under Darwin for some reason. - Sean -$(LIBDIR)/$(STD_DRV).so: $(STD_DRV).c - @echo "std driver:" - $(CC) $(STD_DRV_NAME) $(CFLAGS) $(LDFLAGS) -o $(LIBDIR)/$(STD_DRV).so $< +$(LIBDIR)/$(STD_DRV).$(DED_EXT): $(OBJDIR)/$(STD_DRV).o + @echo "linking std driver:" + $(LD) $(LDFLAGS) -o $@ $< -$(LIBDIR)/$(MT_DRV).so: $(MT_DRV).c - @echo "multi-threaded driver:" - $(CC) $(MT_DRV_NAME) $(CFLAGS_MT) $(LDFLAGS) -o $(LIBDIR)/$(MT_DRV).so $< +$(LIBDIR)/$(MT_DRV).$(DED_EXT): $(OBJDIR)/$(MT_DRV).o + @echo "linking multi-threaded driver:" + $(LD) $(LDFLAGS) -o $@ $< $(LIBDIR): -mkdir -p $(LIBDIR) +$(OBJDIR): + -mkdir -p $(OBJDIR) + diff --git a/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src b/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src index b96a69415d..9b4f717201 100644 --- a/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src +++ b/lib/megaco/src/flex/megaco_flex_scanner_drv.flex.src @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 2001-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% * * ---------------------------------------------------------------------- @@ -354,9 +354,6 @@ static ErlDrvEntry mfs_entry = { MEGACO_DRIVER_FLAGS, /* driver_flags, used for port lock indication */ NULL, /* handle2, emulator internal use */ NULL /* process_exit, Called when a process monitor fires */ -#if defined(MEGACO_DRV_ENTRY_HAS_STOP_SELECT) - ,NULL /* stop_select, Called to close an event object */ -#endif }; -- cgit v1.2.3