[m-rev.] For review: Fix Darwin shared libs on source distribution
Julien Fischer
juliensf at cs.mu.OZ.AU
Mon Nov 1 15:09:26 AEDT 2004
On Mon, 1 Nov 2004, Ian MacLarty wrote:
> On Sun, Oct 31, 2004 at 05:14:48PM +1100, Julien Fischer wrote:
> >
> > > I agree with you. But I think as far as the build process for the
> > > Mercury compiler goes the new options should be disabled and the
> > > -install_name should be passed manually to .dylib targets. This is way
> > > simpler than having different cases for (i) a c source distribution
> > > generated on Darwin, (ii) a c source distribution generated on another
> > > platform and (iii) the Mercury source. In my experience simpler is
> > > normally better. And we're not breaking anything by doing this as far
> > > as I can see.
> > >
> > Ok - let's go with this then.
> >
> Right, then here's the new diff and CVS log. This takes the place of the
> previous one.
>
> Estimated hours taken: 8
> 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 linker option is not passed to the linker in the .dep files.
>
> The fix is to instead pass the -install_name linker option in the Mmakefiles.
> However this means that the -install_name linker option will be passed twice if
> the .dep files are generated on a Darwin system, so we disable the
> --shlib-linker-use-install-name mmc flag so that the -install_name linker
> option is not passed in the .dep files.
>
You should mention that the problem here is that the linker doesn't like
the same option being given twice.
> Also change the default install-name path to the value of
> FINAL_INSTALL_MERC_LIB_DIR, instead of just INSTALL_MERC_LIB_DIR in case the
> install directory is different from the final install directory.
>
> Makefile
> Remove .dylib files when cleaning.
>
> browser/Mmakefile
> library/Mmakefile
> Pass -install_name linker option when building .dylib targets.
> Disable --shlib-linker-use-install-name mmc option.
>
> compiler/options.m
> Change 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 1 Nov 2004 00:50:26 -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: 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 1 Nov 2004 00:50:26 -0000
> @@ -58,6 +58,27 @@
> MLLIBS += $(SOCKET_LIBRARY) $(NSL_LIBRARY) $(DL_LIBRARY) \
> $(READLINE_LIBRARIES)
>
> +#-----------------------------------------------------------------------------#
> +
> +# Set the install name for Darwin shared libraries. We disable the
> +# --shlib-linker-use-install-name mmc option so that the -install_name linker
> +# option is not passed in the .dep files. We do this to avoid a problem when
> +# building from the c source distribution: if the c source distribution is
> +# generated on a non-Darwin system then the -install_name option is not passed
> +# in the .dep files, so it must be passed here, however if a c source
> +# distribution is generated on a Darwin system then by default the
> +# -install_name option will be passed in the .dep files which will cause it
> +# to be passed twice (here and in the .dep files), so we disable the mmc option
> +# which causes the -install_name option to be passed in the .dep files.
> +
s/c/C/ above.
Also mention why we cannot pass the same option twice.
> +MCFLAGS += --no-shlib-linker-use-install-name
> +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
> +
> +#-----------------------------------------------------------------------------#
> +
> 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 1 Nov 2004 00:50:26 -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 1 Nov 2004 00:50:26 -0000
> @@ -113,6 +113,22 @@
> LN = ln
>
> #-----------------------------------------------------------------------------#
> +# Set the install name for Darwin shared libraries. We disable the
> +# --shlib-linker-use-install-name mmc option so that the -install_name linker
> +# option is not passed in the .dep files. We do this to avoid a problem when
> +# building from the c source distribution: if the c source distribution is
> +# generated on a non-Darwin system then the -install_name option is not passed
> +# in the .dep files, so it must be passed here, however if a c source
> +# distribution is generated on a Darwin system then by default the
> +# -install_name option will be passed in the .dep files which will cause it
> +# to be passed twice (here and in the .dep files), so we disable the mmc option
> +# which causes the -install_name option to be passed in the .dep files.
> +
> +MCFLAGS += --no-shlib-linker-use-install-name
> +LD_LIBFLAGS-libmer_std.dylib = -install_name \
> + $(FINAL_INSTALL_MERC_LIB_DIR)/libmer_std.dylib
> +
As above.
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