|
[GHC] #820: problem compiling a file with top level Template Haskell splice: msg#00037lang.haskell.glasgow.bugs
#820: problem compiling a file with top level Template Haskell splice ---------------------------------+------------------------------------------ Reporter: guest | Owner: Type: bug | Status: new Priority: normal | Milestone: 6.4.2 Component: Template Haskell | Version: 6.4.2 Severity: normal | Keywords: Os: Linux | Difficulty: Unknown Architecture: x86_64 (amd64) | ---------------------------------+------------------------------------------ when compiling a file has both the following a. a -package option that loads a package with ref to external library, b. a top level Template Haskell splice $(...) The compiler fails to load the library required by the package properly and yields a failed compile due to 'unknown symbol' I have a simple example that refers to the JRegex package, which loads libpcre.so. The compile fails when compiling UseTH.hs, which refers to the package JRegex, and has a top level splice. Regex is available with cabalized build setup at http://repetae.net/john/computer/haskell/JRegex/ and is trivial to install. It is simple to get around the problem, as 'make separate' does here by eliminating the dependency on the package in the file that splices but in case someone else has this problem it doesn't hurt to have it documented. uname -a = Linux server2 2.6.14-1.1656_FC4 #1 Thu Jan 5 22:13:55 EST 2006 x86_64 x86_64 x86_64 GNU/Linux ghc -v = Glasgow Haskell Compiler, Version 6.4.2, for Haskell 98, compiled by GHC version 6.4.2 Using package config file: /usr/local/lib/ghc-6.4.2/package.conf Using package config file: /home/ben/.ghc/x86_64-linux-6.4.2/package.conf Hsc static flags: -static *** Deleting temp files Deleting: ghc-6.4.2: no input files Usage: For basic information, try the `--help' option. Files = Makefile, Regex.hs, DefineTH.hs, UseTH.hs Makefile -------------------------- SRCS = Regex.hs UseTH.hs DefineTH.hs together : $(SRCS) ghc -v --make -package JRegex -fth -lpcre $^ separate : $(SRCS:.hs=.o) ghc -v -package JRegex -package template-haskell -fth -lpcre $^ # eliminate -package JRegex to get TH splice to work UseTH.o : UseTH.hs ghc -v -c -fth $< %.o: %.hs ghc -v -c -i. -package JRegex -fth -lpcre $^ %.hi: %.o @: .PHONY: clean clean: rm *.hi *.o a.out Regex.o : UseTH.hi UseTH.o : DefineTH.hi ----------------------------- Regex.hs ----------------------------- module Main where import Text.JRegex import Data.Array import UseTH main = putStrLn "hello" --------------------------------- DefineTH.hs -------------------------------- module DefineTH where import Language.Haskell.TH import Language.Haskell.TH.Syntax import System getEnvExpr :: String -> String -> ExpQ getEnvExpr s alt = (runIO $ System.getEnv s `catch` (\e -> return alt)) >>= lift ---------------------------- UseTH.hs ------------------------------ module UseTH where import DefineTH dir = $(getEnvExpr "HOME" "") --------------------------------- - run of make together --------------------------------- ghc -v --make -package JRegex -fth -lpcre Regex.hs UseTH.hs DefineTH.hs Glasgow Haskell Compiler, Version 6.4.2, for Haskell 98, compiled by GHC version 6.4.2 Using package config file: /usr/local/lib/ghc-6.4.2/package.conf Using package config file: /home/ben/.ghc/x86_64-linux-6.4.2/package.conf Hsc static flags: -static *** Chasing dependencies: Chasing modules from: Regex.hs,UseTH.hs,DefineTH.hs Stable modules: *** Compiling DefineTH ( DefineTH.hs, interpreted ): compile: input file DefineTH.hs *** Checking old interface for DefineTH: Compiling DefineTH ( DefineTH.hs, DefineTH.o ) *** Parser: *** Renamer/typechecker: *** Desugar: Result size = 44 *** Simplify: Result size = 40 Result size = 38 *** Tidy Core: Result size = 38 *** CorePrep: Result size = 46 *** Stg2Stg: *** CodeGen: *** CodeOutput: *** Assembler gcc -I. -c /tmp/ghc28762.s -o DefineTH.o *** Deleting temp files Deleting: /tmp/ghc28762.s *** Compiling UseTH ( UseTH.hs, interpreted ): compile: input file UseTH.hs *** Checking old interface for UseTH: Compiling UseTH ( UseTH.hs, UseTH.o ) *** Parser: *** Renamer/typechecker: *** Desugar: *** Simplify: *** CorePrep: *** ByteCodeGen: Loading package base-1.0 ... linking ... done. ghc-6.4.2: /usr/local/lib/JRegex-1.0/ghc-6.4.2/HSJRegex-1.0.o: unknown symbol `pcre_version' *** Deleting temp files Deleting: /tmp/ghc28762.s Warning: deleting non-existent /tmp/ghc28762.s Loading package JRegex-1.0 ... linking ... ghc-6.4.2: unable to load package `JRegex-1.0' make: *** [together] Error 1 ------------------------------- --- run of make separate --------------------- ghc -v -c -i. -package JRegex -fth -lpcre DefineTH.hs Glasgow Haskell Compiler, Version 6.4.2, for Haskell 98, compiled by GHC version 6.4.2 Using package config file: /usr/local/lib/ghc-6.4.2/package.conf Using package config file: /home/ben/.ghc/x86_64-linux-6.4.2/package.conf Hsc static flags: -static *** Checking old interface for DefineTH: *** Parser: *** Renamer/typechecker: *** Desugar: Result size = 44 *** Simplify: Result size = 40 Result size = 38 *** Tidy Core: Result size = 38 *** CorePrep: Result size = 46 *** Stg2Stg: *** CodeGen: *** CodeOutput: *** Assembler gcc -I. -c /tmp/ghc28779.s -o DefineTH.o *** Deleting temp files Deleting: /tmp/ghc28779.s ghc -v -c -fth UseTH.hs Glasgow Haskell Compiler, Version 6.4.2, for Haskell 98, compiled by GHC version 6.4.2 Using package config file: /usr/local/lib/ghc-6.4.2/package.conf Using package config file: /home/ben/.ghc/x86_64-linux-6.4.2/package.conf Hsc static flags: -static *** Checking old interface for UseTH: *** Parser: *** Renamer/typechecker: *** Desugar: *** Simplify: *** CorePrep: *** ByteCodeGen: Loading package base-1.0 ... linking ... done. Loading package haskell98-1.0 ... linking ... done. Loading package template-haskell-1.0 ... linking ... done. *** Desugar: Result size = 41 *** Simplify: Result size = 75 Result size = 73 *** Tidy Core: Result size = 73 *** CorePrep: Result size = 73 *** Stg2Stg: *** CodeGen: *** CodeOutput: *** Assembler gcc -I. -c /tmp/ghc28785.s -o UseTH.o *** Deleting temp files Deleting: /tmp/ghc28785.s ghc -v -c -i. -package JRegex -fth -lpcre Regex.hs UseTH.hi Glasgow Haskell Compiler, Version 6.4.2, for Haskell 98, compiled by GHC version 6.4.2 Using package config file: /usr/local/lib/ghc-6.4.2/package.conf Using package config file: /home/ben/.ghc/x86_64-linux-6.4.2/package.conf Hsc static flags: -static *** Checking old interface for Main: *** Parser: *** Renamer/typechecker: *** Desugar: Result size = 10 *** Simplify: Result size = 10 Result size = 8 Result size = 8 *** Tidy Core: Result size = 8 *** CorePrep: Result size = 10 *** Stg2Stg: *** CodeGen: *** CodeOutput: *** Assembler gcc -I. -c /tmp/ghc28790.s -o Regex.o *** Deleting temp files Deleting: /tmp/ghc28790.s ghc -v -package JRegex -package template-haskell -fth -lpcre Regex.o UseTH.o DefineTH.o Glasgow Haskell Compiler, Version 6.4.2, for Haskell 98, compiled by GHC version 6.4.2 Using package config file: /usr/local/lib/ghc-6.4.2/package.conf Using package config file: /home/ben/.ghc/x86_64-linux-6.4.2/package.conf Hsc static flags: -static *** Linker gcc -v -o a.out Regex.o UseTH.o DefineTH.o -lpcre -L/usr/local/lib/JRegex-1.0/ghc-6.4.2 -L/usr/local/lib/ghc-6.4.2 -lHSJRegex-1.0 -lHStemplate-haskell -lHShaskell98 -lHSbase -lHSbase_cbits -lHSrts -lm -lgmp -ldl -u GHCziBase_Izh_static_info -u GHCziBase_Czh_static_info -u GHCziFloat_Fzh_static_info -u GHCziFloat_Dzh_static_info -u GHCziPtr_Ptr_static_info -u GHCziWord_Wzh_static_info -u GHCziInt_I8zh_static_info -u GHCziInt_I16zh_static_info -u GHCziInt_I32zh_static_info -u GHCziInt_I64zh_static_info -u GHCziWord_W8zh_static_info -u GHCziWord_W16zh_static_info -u GHCziWord_W32zh_static_info -u GHCziWord_W64zh_static_info -u GHCziStable_StablePtr_static_info -u GHCziBase_Izh_con_info -u GHCziBase_Czh_con_info -u GHCziFloat_Fzh_con_info -u GHCziFloat_Dzh_con_info -u GHCziPtr_Ptr_con_info -u GHCziPtr_FunPtr_con_info -u GHCziStable_StablePtr_con_info -u GHCziBase_False_closure -u GHCziBase_True_closure -u GHCziPack_unpackCString_closure -u GHCziIOBase_stackOverflow_closure -u GHCziIOBase_heapOverflow_closure -u GHCziIOBase_NonTermination_closure -u GHCziIOBase_BlockedOnDeadMVar_closure -u GHCziIOBase_BlockedIndefinitely_closure -u GHCziIOBase_Deadlock_closure -u GHCziIOBase_NestedAtomically_closure -u GHCziWeak_runFinalizzerBatch_closure -u __stginit_Prelude Using built-in specs. Target: x86_64-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable- checking=release --with-system-zlib --enable-__cxa_atexit --disable- libunwind-exceptions --enable-libgcj-multifile --enable- languages=c,c++,objc,java,f95,ada --enable-java-awt=gtk --with-java- home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --host=x86_64-redhat-linux Thread model: posix gcc version 4.0.2 20051125 (Red Hat 4.0.2-8) /usr/libexec/gcc/x86_64-redhat-linux/4.0.2/collect2 --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out -u GHCziBase_Izh_static_info -u GHCziBase_Czh_static_info -u GHCziFloat_Fzh_static_info -u GHCziFloat_Dzh_static_info -u GHCziPtr_Ptr_static_info -u GHCziWord_Wzh_static_info -u GHCziInt_I8zh_static_info -u GHCziInt_I16zh_static_info -u GHCziInt_I32zh_static_info -u GHCziInt_I64zh_static_info -u GHCziWord_W8zh_static_info -u GHCziWord_W16zh_static_info -u GHCziWord_W32zh_static_info -u GHCziWord_W64zh_static_info -u GHCziStable_StablePtr_static_info -u GHCziBase_Izh_con_info -u GHCziBase_Czh_con_info -u GHCziFloat_Fzh_con_info -u GHCziFloat_Dzh_con_info -u GHCziPtr_Ptr_con_info -u GHCziPtr_FunPtr_con_info -u GHCziStable_StablePtr_con_info -u GHCziBase_False_closure -u GHCziBase_True_closure -u GHCziPack_unpackCString_closure -u GHCziIOBase_stackOverflow_closure -u GHCziIOBase_heapOverflow_closure -u GHCziIOBase_NonTermination_closure -u GHCziIOBase_BlockedOnDeadMVar_closure -u GHCziIOBase_BlockedIndefinitely_closure -u GHCziIOBase_Deadlock_closure -u GHCziIOBase_NestedAtomically_closure -u GHCziWeak_runFinalizzerBatch_closure -u __stginit_Prelude /usr/lib/gcc /x86_64-redhat-linux/4.0.2/../../../../lib64/crt1.o /usr/lib/gcc/x86_64- redhat-linux/4.0.2/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat- linux/4.0.2/crtbegin.o -L/usr/local/lib/JRegex-1.0/ghc-6.4.2 -L/usr/local/lib/ghc-6.4.2 -L/usr/lib/gcc/x86_64-redhat-linux/4.0.2 -L/usr/lib/gcc/x86_64-redhat-linux/4.0.2 -L/usr/lib/gcc/x86_64-redhat- linux/4.0.2/../../../../lib64 -L/usr/lib/gcc/x86_64-redhat- linux/4.0.2/../../.. -L/lib/../lib64 -L/usr/lib/../lib64 Regex.o UseTH.o DefineTH.o -lpcre -lHSJRegex-1.0 -lHStemplate-haskell -lHShaskell98 -lHSbase -lHSbase_cbits -lHSrts -lm -lgmp -ldl -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc /x86_64-redhat-linux/4.0.2/crtend.o /usr/lib/gcc/x86_64-redhat- linux/4.0.2/../../../../lib64/crtn.o *** Deleting temp files Deleting: -- Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/820> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler_______________________________________________ Glasgow-haskell-bugs mailing list Glasgow-haskell-bugs@xxxxxxxxxxx http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: [GHC] #818: Uncaught kind error leads to the 'impossible' happening, GHC |
|---|---|
| Next by Date: | Re: [GHC] #820: problem compiling a file with top level Template Haskell splice, GHC |
| Previous by Thread: | [GHC] #819: Uncaught kind error leads to the 'impossible' happening, GHC |
| Next by Thread: | Re: [GHC] #820: problem compiling a file with top level Template Haskell splice, GHC |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |