[m-rev.] For review: Shared Mercury libs on Mac OS X

Julien Fischer juliensf at cs.mu.OZ.AU
Tue Oct 12 01:57:14 AEST 2004



On Tue, 12 Oct 2004, Ian MacLarty wrote:

> I've also changed the NEWS and README.MacOS files:
>
> NEWS
> 	Mentioned shared libs working now on Mac OS X.
>
> README.MacOS
> 	Removed bit about shared libs not working in Mac OS X.
>
> And have made the default value for the --shlib-linker-install-name-path
> option the value of INSTALL_MERC_LIB_DIR, so now there's no need to
> specify this option in browser/Mmakefile and library/Mmakefile.  This also
> means user shared libraries can be built using just the INSTALL_PREFIX variable
> as documented in the user guide.
>
> I've also included the configure.in diff without Ralph's changes deleted.
>
> The options.m diff just shows the bit where I've changed the default value
> of the --shlib-linker-install-name-path option.
>
> Ian.
>
> Index: NEWS
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/NEWS,v
> retrieving revision 1.343
> diff -u -r1.343 NEWS
> --- NEWS	29 Sep 2004 05:37:36 -0000	1.343
> +++ NEWS	11 Oct 2004 14:07:02 -0000
> @@ -40,6 +40,7 @@
>
>  Portability improvements:
>  * We have made the implementation compatible with gcc 3.4.
> +* Shared libraries now work on Mac OS X.
>
>  Changes to the Mercury debugger:
>  * Users can now limit the output from stack traces.
> @@ -320,7 +321,8 @@
>
>  Portability improvements:
>
> -* Nothing yet.
> +* We have made the implementation compatible with gcc 3.4.
> +* Shared libraries now work on Mac OS X.
>
>  Changes to the Mercury debugger:
>
> Index: README.MacOS
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/README.MacOS,v
> retrieving revision 1.6
> diff -u -r1.6 README.MacOS
> --- README.MacOS	4 Oct 2004 06:45:13 -0000	1.6
> +++ README.MacOS	11 Oct 2004 14:07:02 -0000
> @@ -25,6 +25,5 @@
>  The fast.gc and asm_fast.gc grades are not supported on PowerPC.
>
>  The following features are not yet supported on MacOS:
> -	- shared libraries
>  	- interactive queries in mdb
>  	- the `--split-c-files' option to mmc
If shared libraries on OS X don't yet work with mmc --make
you might want to mention that.

> Index: configure.in
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/configure.in,v
> retrieving revision 1.404
> diff -u -r1.404 configure.in
> --- configure.in	5 Oct 2004 00:46:26 -0000	1.404
> +++ configure.in	11 Oct 2004 14:07:02 -0000
> @@ -227,14 +227,17 @@
>  			--halt-at-warn $link_static_opt conftest \
>  			</dev/null >&AC_FD_CC 2>&1 &&
>  		test "`./conftest 2>&1 | tr -d '\015'`" = "Hello, world" &&
> -		# Test for the --record-term-sizes-as-words option.
> -		# Note that we need to set --grade to an LLDS grade
> -		# when doing this test because term size profiling
> -		# requires an LLDS grade.
> + 		# Test for the --record-term-sizes-as-words option.
> + 		# Note that we need to set --grade to an LLDS grade
> + 		# when doing this test because term size profiling
> + 		# requires an LLDS grade.
Why has this comment changed?

> +		# This also tests for the --shlib-linker-intall-name-flag
> +		# option.
>  		$BOOTSTRAP_MC \
>  			--grade none.gc \
>  			--record-term-sizes-as-words \
>  			--output-grade-string \
> +			--shlib-linker-install-name-flag "-dummy_flag" \
>  			</dev/null >&AC_FD_CC 2>&1
>  	then
>  		AC_MSG_RESULT(yes)
> @@ -2964,6 +2967,10 @@
>  EXE_RPATH_SEP=" -Wl,-rpath,"
>  SHLIB_RPATH_OPT="-Wl,-rpath,"
>  SHLIB_RPATH_SEP=" -Wl,-rpath,"
> +
> +SHLIB_USE_INSTALL_NAME=""
> +SHLIB_INSTALL_NAME_FLAG="-install_name "
> +
>  CFLAGS_FOR_PIC="-fpic -DMR_PIC"
>  EXT_FOR_PIC_OBJECTS=pic_o
>  # Object files with extension $EXT_FOR_LINK_WITH_PIC_OBJECTS are used
> @@ -3194,6 +3201,28 @@
>  		EXT_FOR_LINK_WITH_PIC_OBJECTS=o
>  		DEFAULT_LINKAGE=static
>  		;;
> +	*powerpc*apple*darwin*)
> +		# If the compiler is gcc then use darwin style dynamic linking.
> +		# Otherwise use static linking.
> +		if test "$GCC_PROG" != ""; then
> +		    SHLIB_USE_INSTALL_NAME="--shlib-linker-use-install-name"
> +		    SHLIB_INSTALL_NAME_FLAG="-install_name "
> +		    LINK_SHARED_OBJ="$GCC_PROG -dynamiclib -single_module"
> +		    LINK_SHARED_OBJ_SH="$GCC_PROG -dynamiclib -single_module"
> +		    EXT_FOR_SHARED_LIB=dylib
> +		    EXT_FOR_LINK_WITH_PIC_OBJECTS=o
> +		    CFLAGS_FOR_PIC="-fPIC -DMR_PIC"
> +		    ERROR_UNDEFINED="-undefined error"
> +		    ALLOW_UNDEFINED="-undefined suppress"
> +		    AC_MSG_RESULT(yes)
> +		else
> +		    CFLAGS_FOR_PIC=
> +		    EXT_FOR_PIC_OBJECTS=o
> +		    EXT_FOR_LINK_WITH_PIC_OBJECTS=o
> +		    DEFAULT_LINKAGE=static
> +		    AC_MSG_RESULT(no)
> +		fi
> +		;;
>  	*)
>  		# CFLAGS_FOR_PIC is used by boehm_gc/Makefile when creating
>  		# libgc.a.  If the system doesn't support shared libraries,
> @@ -3363,6 +3392,8 @@
>  AC_SUBST(EXE_RPATH_SEP)
>  AC_SUBST(SHLIB_RPATH_OPT)
>  AC_SUBST(SHLIB_RPATH_SEP)
> +AC_SUBST(SHLIB_USE_INSTALL_NAME)
> +AC_SUBST(SHLIB_INSTALL_NAME_FLAG)
>  AC_SUBST(CFLAGS_FOR_PIC)
>  AC_SUBST(EXT_FOR_PIC_OBJECTS)
>  AC_SUBST(EXT_FOR_LINK_WITH_PIC_OBJECTS)
> @@ -3887,6 +3918,9 @@
>  	# then don't do a `make clean' before running `make'.
>  	rm -f runtime/libmer_rt.so library/libmer_std.so bytecode/libmbi.so
>  	rm -f trace/libmer_trace.so browser/libmer_browse.so
> +	rm -f runtime/libmer_rt.dylib library/libmer_std.dylib
> +	rm -f boehm_gc/libgc.dylib bytecode/libmbi.dylib
> +	rm -f trace/libmer_trace.dylib browser/libmer_browser.dylib
>  	;;
>  esac],
>  [reconfiguring=$reconfiguring]
> Index: browser/Mmakefile
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/browser/Mmakefile,v
> retrieving revision 1.40
> diff -u -r1.40 Mmakefile
> --- browser/Mmakefile	2 Aug 2004 08:30:01 -0000	1.40
> +++ browser/Mmakefile	11 Oct 2004 14:07:03 -0000
> @@ -137,6 +137,7 @@
>  	exit $$status
>
>  lib$(BROWSER_LIB_NAME).so: lib$(MDBCOMP_LIB_NAME).so
> +lib$(BROWSER_LIB_NAME).dylib: lib$(MDBCOMP_LIB_NAME).dylib
>  lib$(BROWSER_LIB_NAME): lib$(MDBCOMP_LIB_NAME)
>  lib$(BROWSER_LIB_NAME).int3s: lib$(MDBCOMP_LIB_NAME).int3s
>  lib$(BROWSER_LIB_NAME).ints: lib$(MDBCOMP_LIB_NAME).ints
> @@ -204,8 +205,8 @@
>  # with the package name prefixed to the file name with a ".", not a "/".
>  # So we copy the Java source files to where the Java compiler expects them to be.
>  #
> -# XXX This is a hack.  We ought to change the Mercury compiler so that it generates
> -# the Java files with the right names in the first place.
> +# XXX This is a hack.  We ought to change the Mercury compiler so that it
> +# generates the Java files with the right names in the first place.
>  #
This isn't mentioned in the log message.

>
>  mdb/%.java: mdb.%.java
> Index: compiler/options.m
> ===================================================================
> @@ -1270,7 +1273,10 @@
>  	shlib_linker_rpath_flag -	string("-Wl,-rpath"),
>  	shlib_linker_rpath_separator -	string(" -Wl,-rpath"),
>  	linker_allow_undefined_flag -	string(""),
> -	linker_error_undefined_flag -	string("-Wl,-no-undefined")
> +	linker_error_undefined_flag -	string("-Wl,-no-undefined"),
> +	shlib_linker_use_install_name - bool(no),
> +	shlib_linker_install_name_flag - string("-install_name "),
> +	shlib_linker_install_name_path - string("$(INSTALL_MERC_LIB_DIR)")
>  ]).
>  option_defaults_2(build_system_option, [
>  		% Build System Options
> @@ -1939,6 +1945,9 @@

Otherwise that looks fine.

Julien.
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list