[m-rev.] for review: improve support for using frameworks on Mac OS X
Ian MacLarty
maclarty at csse.unimelb.edu.au
Wed Oct 6 13:38:59 AEDT 2010
On Wed, Oct 06, 2010 at 01:21:14PM +1100, Julien Fischer wrote:
>
> For review by Ian.
>
> Improve support for building and linking against frameworks on Mac OS X
> by providing mmc command line options that allow which framework(s) to
> build against to be specified directly.
>
> compiler/options.m:
> Add a new option, --framework, that causes an executable
> or library to be linked against the framework specified
> by the argument.
>
> Add new option, --framework-directory, that appends a new
> framework search directory to the current set of framework
> search directories. (The short for of the option is -F;
s/for/form/
> the reason for using this is that if the linker emits warnings
> about the framework search directories, then it will refer
> to the option by that name.)
>
> compiler/compile_target_code.m:
> Pass the framework search directories to both the C compiler
> and the linker. (They need to go the C compiler so that it
to go to
> Index: compiler/compile_target_code.m
> ===================================================================
> RCS file: /home/mercury/mercury1/repository/mercury/compiler/compile_target_code.m,v
> retrieving revision 1.160
> diff -u -r1.160 compile_target_code.m
> --- compiler/compile_target_code.m 30 Sep 2010 07:23:31 -0000 1.160
> +++ compiler/compile_target_code.m 6 Oct 2010 02:13:46 -0000
> @@ -437,6 +437,9 @@
> C_Incl_Dirs),
> InclOpt = string.append_list(list.condense(list.map(
> (func(C_INCL) = ["-I", quote_arg(C_INCL), " "]), C_Incl_Dirs))),
> +
> + get_framework_directories(Globals, FrameworkInclOpt),
> +
> globals.lookup_bool_option(Globals, highlevel_code, HighLevelCode),
> (
> HighLevelCode = yes,
> @@ -889,7 +892,8 @@
> % listed after CFLAGS.
> %
> string.append_list([
> - SubDirInclOpt, InclOpt,
> + SubDirInclOpt, InclOpt, " ",
> + FrameworkInclOpt, " ",
> OptimizeOpt, " ",
> HighLevelCodeOpt,
> NestedFunctionsOpt, @@ -1885,6 +1889,9 @@
> get_runtime_library_path_opts(Globals, LinkTargetType,
> RpathFlagOpt, RpathSepOpt, RpathOpts),
>
> + % Set up any framework search paths.
> + get_framework_directories(Globals, FrameworkDirectories),
> +
> % Set up the install name for shared libraries.
> globals.lookup_bool_option(Globals, shlib_linker_use_install_name,
> UseInstallName),
> @@ -1913,6 +1920,7 @@
> globals.lookup_string_option(Globals, TraceFlagsOpt, TraceOpts)
> ),
>
> + get_frameworks(Globals, Frameworks),
> get_link_libraries(Globals, MaybeLinkLibraries, !IO),
> globals.lookup_string_option(Globals, linker_opt_separator, LinkOptSep),
> (
> @@ -1961,8 +1969,10 @@
> LinkOptSep, " ",
> LinkLibraryDirectories, " ",
> RpathOpts, " ",
> + FrameworkDirectories, " ",
> InstallNameOpt, " ",
> DebugOpts, " ",
> + Frameworks, " ",
> LDFlags, " ",
> LinkLibraries, " ",
> MercuryStdLibs, " ",
> @@ -2400,6 +2410,34 @@
> MadeSymlinkOrCopy = no
> ).
>
> +:- pred get_framework_directories(globals::in, string::out) is det.
> +
> +get_framework_directories(Globals, FrameworkDirs) :-
> + globals.lookup_accumulating_option(Globals, framework_directories,
> + FrameworkDirs0),
> + (
> + % Short-circuit the common case.
> + FrameworkDirs0 = [],
> + FrameworkDirs = ""
Is this optimisation really necessary? I mean this code is only going
to get called once per module isn't it?
Looks fine otherwise.
Ian.
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list