[m-rev.] For review: Fix Darwin shared libs on source distribution

Julien Fischer juliensf at cs.mu.OZ.AU
Sat Oct 30 12:51:25 AEST 2004


On Sat, 30 Oct 2004, Ian MacLarty wrote:

> For review by anyone.
>
> Please note the comment for library/Mmakefile.  Is this acceptable?
>
> Estimated hours taken: 4
> Branches: main
>
> Fix shared libs on Mac OS X for the source distribution.  The problem is that
> the source distribution is generated on a Linux PC, so the Darwin-specific
> -install_name option is not passed to the linker in the .dep files.
>
I guess this fixes the immediate problem but you will end up specifying
-install_name twice if the source distribution is generated on Mac OS X.
(you've mentioned that below but it should be more prominent in the log
message).

> The fix is to instead pass the option in the Mmakefiles when compiling the
> source distribution on Mac OS X.
>
> Also changed default install name path to the final install path.
>
The log message should mention why.

> Index: Makefile
> 	Remove .dylib files when cleaning.
>
I suggest not prefixing everything with "Index: ".

> Index: Mmake.common.in
> 	Add IS_BOOTSTRAP_MC to indicate if an installed mmc is available.
> 	BOOTSTRAP_MC is set to a value even if no installed mmc is present, so
> 	we use IS_BOOTSTRAP_MC instead.
>
> Index: configure.in
> 	Set value of IS_BOOTSTRAP_MC.
>
> Index: browser/Mmakefile
> Index: library/Mmakefile
> 	If IS_BOOTSTRAP_MC is "no" then pass the -install_name option to the
> 	linker when building the .dylib libraries.  We are assuming that if
> 	there is no installed mmc, then this must be a source distribution
> 	not built on a Darwin system (since then the -install_name option would
> 	be passed in the .dep files).  This means that if a source distribution
> 	is generated on a Darwin PC it will NOT build on a Darwin target,
> 	because then the -install_name option will be passed twice which is not
> 	allowed.
>
I think that a way to avoid this problem would be to look at the beginning
of on of the C files (say compiler/top_level.c).  There should be a
comment there saying what system the C file was configured for.  We should
only pass the extra -install-name flag if we're compiling on Darwin with C
files that were not generated on Darwin.

> Index: compiler/options.m
> 	Changed default value of --shlib-linker-install-name-path to the value
> 	of FINAL_INSTALL_MERC_LIB_DIR, instead of INSTALL_MERC_LIB_DIR.
>
> Index: Makefile
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/Makefile,v
> retrieving revision 1.11
> diff -u -r1.11 Makefile
> --- Makefile	16 May 2002 06:48:32 -0000	1.11
> +++ Makefile	30 Oct 2004 00:11:41 -0000
> @@ -43,7 +43,7 @@
>
>  .PHONY: clean
>  clean:
> -	-rm -f */*.o */*.pic_o */*.a */*.so
> +	-rm -f */*.o */*.pic_o */*.a */*.so */*.dylib
>  	-rm -rf */Mercury/os */Mercury/pic_os */Mercury/libs
>  	-rm -f compiler/mercury_compile profiler/mercury_profile
>  	-rm -f util/mdemangle util/mkinit
> Index: Mmake.common.in
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/Mmake.common.in,v
> retrieving revision 1.79
> diff -u -r1.79 Mmake.common.in
> --- Mmake.common.in	19 Oct 2004 06:01:34 -0000	1.79
> +++ Mmake.common.in	30 Oct 2004 00:11:43 -0000
> @@ -31,6 +31,9 @@
>  # Specify the Mercury compiler to use for bootstrapping.
>  MC		= @BOOTSTRAP_MC@
>
> +# Is there a Mercury compiler to bootstrap with?
> +IS_BOOTSTRAP_MC	= @IS_BOOTSTRAP_MC@
> +
>  # Specify the compilation model to use for compiling the compiler.
>  GRADE		= @GRADE@
>
> Index: configure.in
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/configure.in,v
> retrieving revision 1.405
> diff -u -r1.405 configure.in
> --- configure.in	19 Oct 2004 06:01:35 -0000	1.405
> +++ configure.in	30 Oct 2004 00:11:57 -0000
> @@ -3409,9 +3409,13 @@
>  #-----------------------------------------------------------------------------#
>  if test "$BOOTSTRAP_MC" = ""; then
>  	BOOTSTRAP_MC=mmc
> +	IS_BOOTSTRAP_MC=no
> +else
> +	IS_BOOTSTRAP_MC=yes
>  fi
>  BOOTSTRAP_MC="$BOOTSTRAP_MC $HAVE_BOXED_FLOATS --conf-low-tag-bits $LOW_TAG_BITS --bits-per-word $BITS_PER_WORD --bytes-per-word $BYTES_PER_WORD"
>  AC_SUBST(BOOTSTRAP_MC)
> +AC_SUBST(IS_BOOTSTRAP_MC)
>  #-----------------------------------------------------------------------------#
>
>  # The following allows us to share some subroutines between the
> Index: browser/Mmakefile
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/browser/Mmakefile,v
> retrieving revision 1.41
> diff -u -r1.41 Mmakefile
> --- browser/Mmakefile	19 Oct 2004 06:01:36 -0000	1.41
> +++ browser/Mmakefile	30 Oct 2004 00:11:59 -0000
> @@ -58,6 +58,22 @@
>  MLLIBS +=	$(SOCKET_LIBRARY) $(NSL_LIBRARY) $(DL_LIBRARY)	\
>  		$(READLINE_LIBRARIES)
>
> +#-----------------------------------------------------------------------------#
> +
> +# Set the install name for Darwin shared libraries when compiling from a
> +# source distribution.  Since the source distribution is not generated on
> +# Darwin the install name option is not passed to the linker in the .dep
> +# files.
> +
> +ifeq ("$(IS_BOOTSTRAP_MC)","no")
> +LD_LIBFLAGS-libmer_browser.dylib = -install_name \
> +	$(FINAL_INSTALL_MERC_LIB_DIR)/libmer_browser.dylib
> +LD_LIBFLAGS-libmer_mdbcomp.dylib = -install_name \
> +	$(FINAL_INSTALL_MERC_LIB_DIR)/libmer_mdbcomp.dylib
> +endif
> +
> +#-----------------------------------------------------------------------------#
> +
If the issue with Darwin generated source distributions not compiling is
not fixed then there should certainly be an XXX comment about that here.
There should also be something about it in README.MacOS - mention the fact
that the source tarballs on the Mercury website will work because they
aren't built on Darwin.

>  JAVACFLAGS = -classpath $(LIBRARY_DIR)
>
>  MTAGS	=	$(SCRIPTS_DIR)/mtags
> Index: compiler/options.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/options.m,v
> retrieving revision 1.434
> diff -u -r1.434 options.m
> --- compiler/options.m	20 Oct 2004 09:44:58 -0000	1.434
> +++ compiler/options.m	30 Oct 2004 00:12:34 -0000
> @@ -1281,7 +1281,8 @@
>  	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)")
> +	shlib_linker_install_name_path - string(
> +		"$(FINAL_INSTALL_MERC_LIB_DIR)")
>  ]).
>  option_defaults_2(build_system_option, [
>  		% Build System Options
> Index: library/Mmakefile
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/library/Mmakefile,v
> retrieving revision 1.135
> diff -u -r1.135 Mmakefile
> --- library/Mmakefile	31 May 2004 04:13:00 -0000	1.135
> +++ library/Mmakefile	30 Oct 2004 00:13:00 -0000
> @@ -114,6 +114,18 @@
>
>  #-----------------------------------------------------------------------------#
>
> +# Set the install name for Darwin shared libraries when compiling from a
> +# source distribution.  Since the source distribution is not generated on
> +# Darwin the install name option is not passed to the linker in the .dep
> +# file.
> +
> +ifeq ("$(IS_BOOTSTRAP_MC)","no")
> +LD_LIBFLAGS-libmer_std.dylib = -install_name \
> +	$(FINAL_INSTALL_MERC_LIB_DIR)/libmer_std.dylib
> +endif
> +
> +#-----------------------------------------------------------------------------#
> +
>
As above.

Cheers,
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