Index: src/config.h.in
===================================================================
--- src/config.h.in	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ src/config.h.in	(revision 25a9b5adefaebb173fab189e8ba954167858e6b7)
@@ -141,4 +141,7 @@
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
+
+/* Directory where the prelude files are built */
+#undef PRELUDE_BUILDDIR
 
 /* If using the C implementation of alloca, define if you know the
@@ -152,4 +155,10 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
+
+/* Top build directory */
+#undef TOP_BUILDDIR
+
+/* Top src directory */
+#undef TOP_SRCDIR
 
 /* Version number of package */
Index: src/main.cc
===================================================================
--- src/main.cc	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ src/main.cc	(revision 25a9b5adefaebb173fab189e8ba954167858e6b7)
@@ -208,10 +208,10 @@
 
 			// Read to gcc builtins, if not generating the cfa library
-			FILE * gcc_builtins = fopen( libcfap | treep ? "../prelude/gcc-builtins.cf" : CFA_LIBDIR "/gcc-builtins.cf", "r" );
+			FILE * gcc_builtins = fopen( libcfap | treep ? PRELUDE_BUILDDIR "/gcc-builtins.cf" : CFA_LIBDIR "/gcc-builtins.cf", "r" );
 			assertf( gcc_builtins, "cannot open gcc-builtins.cf\n" );
 			parse( gcc_builtins, LinkageSpec::Compiler );
 
 			// read the extra prelude in, if not generating the cfa library
-			FILE * extras = fopen( libcfap | treep ? "../prelude/extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
+			FILE * extras = fopen( libcfap | treep ? PRELUDE_BUILDDIR "/extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
 			assertf( extras, "cannot open extras.cf\n" );
 			parse( extras, LinkageSpec::BuiltinC );
@@ -219,10 +219,10 @@
 			if ( ! libcfap ) {
 				// read the prelude in, if not generating the cfa library
-				FILE * prelude = fopen( treep ? "../prelude/prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
+				FILE * prelude = fopen( treep ? PRELUDE_BUILDDIR "/prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
 				assertf( prelude, "cannot open prelude.cf\n" );
 				parse( prelude, LinkageSpec::Intrinsic );
 
 				// Read to cfa builtins, if not generating the cfa library
-				FILE * builtins = fopen( libcfap | treep ? "../prelude/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
+				FILE * builtins = fopen( libcfap | treep ? PRELUDE_BUILDDIR "/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
 				assertf( builtins, "cannot open builtins.cf\n" );
 				parse( builtins, LinkageSpec::BuiltinCFA );
@@ -348,5 +348,5 @@
 		PASS( "codegen", CodeGen::generate( translationUnit, *output, ! noprotop, prettycodegenp, true, linemarks ) );
 
-		CodeGen::FixMain::fix( *output, treep ? "../prelude/bootloader.c" : CFA_LIBDIR "/bootloader.c" );
+		CodeGen::FixMain::fix( *output, treep ? PRELUDE_BUILDDIR "/bootloader.c" : CFA_LIBDIR "/bootloader.c" );
 		if ( output != &cout ) {
 			delete output;
