</varlistentry>
<varlistentry>
- <term><literal>#option opt</literal></term>
- <listitem>
- <para>The specified Haskell compiler command-line option
- is placed in the <literal>{-# OPTIONS #-}</literal> pragma
- at the top of the Haskell file (see <xref
- linkend="source-file-options">). This is needed because
- <command>hsc2hs</command> emits its own <literal>OPTIONS</literal> pragma,
- and only one such pragma is interpreted by GHC.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
<term><literal>#def C_definition</literal></term>
<listitem>
<para>The definition (of a function, variable, struct or
-----------------------------------------------------------------------------
--- $Id: Main.hs,v 1.8 2001/01/12 22:54:23 qrczak Exp $
+-- $Id: Main.hs,v 1.9 2001/01/13 12:11:00 qrczak Exp $
--
-- (originally "GlueHsc.hs" by Marcin 'Qrczak' Kowalczyk)
--
outHeaderHs :: [Flag] -> Maybe String -> [(String, String)] -> String
outHeaderHs flags inH toks =
- " hsc_begin_options();\n"++
+ "#if __GLASGOW_HASKELL__ && __GLASGOW_HASKELL__ < 409\n\
+ \ printf (\"{-# OPTIONS -optc-D__GLASGOW_HASKELL__=%d #-}\\n\", \
+ \__GLASGOW_HASKELL__);\n\
+ \#endif\n"++
includeH++
- concatMap outSpecial toks++
- " hsc_end_options();\n\n"
+ concatMap outSpecial toks
where
outSpecial (key, arg) = case key of
"include" -> case inH of
"define" -> case inH of
Nothing | goodForOptD arg -> outOption ("-optc-D"++toOptD arg)
_ -> ""
- "option" -> outOption arg
_ | conditional key -> "#"++key++" "++arg++"\n"
_ -> ""
goodForOptD arg = case arg of
| name <- case inH of
Nothing -> [name | Include name <- flags]
Just name -> ["\""++name++"\""]]
- outOption s = " hsc_option (\""++showCString s++"\");\n"
+ outOption s = " printf (\"{-# OPTIONS %s #-}\\n\", \""++
+ showCString s++"\");\n"
outTokenHs :: Token -> String
outTokenHs (Text s) = " fputs (\""++showCString s++"\", stdout);\n"
"include" -> ""
"define" -> ""
"undef" -> ""
- "option" -> ""
"def" -> ""
_ | conditional key -> "#"++key++" "++arg++"\n"
"let" -> ""
#define offsetof(t, f) ((size_t) &((t *)0)->f)
#endif
-#if __GLASGOW_HASKELL__
-
-static int hsc_options_started;
-
-static void hsc_begin_options (void)
-{
-#if __GLASGOW_HASKELL__ < 409
- printf ("{-# OPTIONS -optc-D__GLASGOW_HASKELL__=%d", __GLASGOW_HASKELL__);
- hsc_options_started = 1;
-#else
- hsc_options_started = 0;
-#endif
-}
-
-static void hsc_option (const char *s)
-{
- if (!hsc_options_started)
- {
- printf ("{-# OPTIONS");
- hsc_options_started = 1;
- }
- printf (" %s", s);
-}
-
-static void hsc_end_options (void)
-{
- if (hsc_options_started) printf (" #-}\n");
-}
-
-#else /* !__GLASGOW_HASKELL__ */
-
-#define hsc_begin_options()
-#define hsc_option(s)
-#define hsc_end_options()
-
-#endif /* !__GLASGOW_HASKELL__ */
-
#define hsc_const(x) \
if ((x) < 0) \
printf ("%ld", (long)(x)); \