- Fix building with --as-needed
- Fix parallel make by defining two new targets
- Fix one spelling error
- Respect AR, CC, RANLIB, CFLAGS, LDFLAGS
- Link GTK frontend against -lX11 since it uses XOpenDisplay all the time

--- a/configure.in
+++ b/configure.in
@@ -11,6 +11,9 @@
 AC_PROG_MAKE_SET
 AC_HEADER_STDC
 
+AC_CHECK_TOOL([AR], [ar])
+AC_PROG_RANLIB
+
 
 HAVE_GTK2=no
 HAVE_QT=no
@@ -75,6 +78,7 @@
 
 dnl We will only compile one NVClock gtk binary, choose the latest version availible
 if test x"$enable_gtk" = "xyes"; then
+    PKG_CHECK_MODULES([X11], [x11])
     PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.4.0, have_gtk2=yes, have_gtk2=no)
     GTK2_CFLAGS=$GTK_CFLAGS
     GTK2_LIBS=$GTK_LIBS
@@ -109,22 +113,18 @@
 	X11_LIBS="$X11_LIBS $XEXT_LIBS"
 	if test x"$X11_LIBS" != x ; then
 		HAVE_NVCONTROL=yes
-	AC_SUBST(X11_CFLAGS)
-	AC_SUBST(X11_LIBS)
 	AC_DEFINE([HAVE_NVCONTROL], [1], [NV-CONTROL support for changing OpenGL settings])
 	fi
 fi
 
+AC_SEARCH_LIBS([dlsym], [dl dld], [], [
+    AC_MSG_ERROR([unable to find the dlsym() function])
+])
+
 AC_SUBST(HAVE_GTK2)
 AC_SUBST(HAVE_QT)
 AC_SUBST(HAVE_NVCONTROL)
 
-AC_SUBST(CFLAGS)
-AC_SUBST(LIBS)
-
-RANLIB=ranlib
-AC_SUBST(RANLIB)
-
 
 AC_OUTPUT(src/Makefile
 	src/backend/Makefile
@@ -141,7 +141,7 @@
 if [test "$HAVE_NVCONTROL" = "yes"]; then
     echo "- NV-CONTROL support enabled"
 else
-    echo "- NV-CONROL support disabled"
+    echo "- NV-CONTROL support disabled"
 fi
 if [test "$HAVE_GTK2" = "yes"]; then
     echo "- GTK2 GUI enabled"
--- a/src/backend/Makefile.in
+++ b/src/backend/Makefile.in
@@ -1,11 +1,11 @@
-CC=@CC@ -O0
-AR=ar
+CC=@CC@
+AR=@AR@
 RANLIB=@RANLIB@
 
 system=@system@
 HAVE_NVCONTROL=@HAVE_NVCONTROL@
 OBJECTS=backend.o bios.o config.o error.o nv30.o nv40.o nv50.o info.o overclock.o utils.o i2c.o xf86i2c.o adt7473.o f75375.o lm99.o w83781d.o w83l785r.o libc_wrapper.o
-CFLAGS=@X11_CFLAGS@ -I../.. -I../nvcontrol
+CFLAGS=@CFLAGS@ @X11_CFLAGS@ -I../.. -I../nvcontrol
 
 ifeq ($(system), FreeBSD)
     OBJECTS+=back_bsd.o
--- a/src/gtk/Makefile.in
+++ b/src/gtk/Makefile.in
@@ -20,20 +20,21 @@
 
 ifeq ($(HAVE_NVCONTROL), yes)
     DEPS=$(libbackend) $(libnvcontrol)
-    LIBS=@GTK_LIBS@ -L../backend -lbackend -L../nvcontrol -lnvcontrol
+    LIBS=@LIBS@ @GTK_LIBS@ -L../backend -lbackend -L../nvcontrol -lnvcontrol
     OBJECTS=banner.o gl.o hw.o main.o settings.o
 else
     DEPS=$(libbackend)
-    LIBS=@GTK_LIBS@ -L../backend -lbackend
+    LIBS=@LIBS@ @GTK_LIBS@ -L../backend -lbackend
     OBJECTS=banner.o hw.o main.o settings.o
 endif
+X11_LIBS=@X11_LIBS@
 
 
 .PHONY: clean distclean install
 all: $(PROGRAM)
 
 nvclock_gtk: $(DEPS) $(OBJECTS)
-	$(CC) $(CFLAGS) -o nvclock_gtk $(OBJECTS) $(libbackend) $(LIBS)
+	$(CC) $(CFLAGS) $(LDFLAGS) -o nvclock_gtk $(OBJECTS) $(libbackend) $(LIBS) $(X11_LIBS)
 
 clean:
 	rm -f nvclock_gtk *.core *.o *.exe
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -16,7 +16,7 @@
 ifeq ($(HAVE_NVCONTROL), yes)
     DEPS=$(libbackend) $(libnvcontrol)
     INCLUDES=@X11_CFLAGS@ -I./backend -I./nvcontrol -I..
-    LIBS=@X11_LIBS@ -L./backend -lbackend -L./nvcontrol -lnvcontrol
+    LIBS=-L./backend -lbackend -L./nvcontrol -lnvcontrol @X11_LIBS@
 else
     DEPS=$(libbackend)
     INCLUDES=-I./backend -I./nvcontrol -I..
@@ -30,12 +30,17 @@
 
 all: all-recursive nvclock smartdimmer
 
+$(libbackend):
+	$(MAKE) -C backend
+
+$(libnvcontrol):
+	$(MAKE) -C nvcontrol
 
 nvclock: $(DEPS) $(LIB) nvclock.c
-	$(CC) $(CFLAGS) -o nvclock $(nvclock_SOURCES) $(INCLUDES) $(LIBS)
+	$(CC) $(CFLAGS) $(LDFLAGS) -o nvclock $(nvclock_SOURCES) $(INCLUDES) $(LIBS)
 
 smartdimmer: $(DEPS) $(LIB) smartdimmer.c
-	$(CC) $(CFLAGS) -o smartdimmer $(smartdimmer_SOURCES) $(INCLUDES) $(LIBS)
+	$(CC) $(CFLAGS) $(LDFLAGS) -o smartdimmer $(smartdimmer_SOURCES) $(INCLUDES) $(LIBS)
 
 
 clean: clean-recursive clean-app
--- a/src/nvcontrol/Makefile.in
+++ b/src/nvcontrol/Makefile.in
@@ -1,5 +1,5 @@
 CC=@CC@
-AR=ar
+AR=@AR@
 RANLIB=@RANLIB@
 system=@system@
 CFLAGS=@CFLAGS@
--- a/src/qt/Makefile.in
+++ b/src/qt/Makefile.in
@@ -31,7 +31,7 @@
 all: $(PROGRAM)
 
 nvclock_qt: $(DEPS) qt_nvclock.moc qt_xfree.moc $(OBJECTS)
-	$(CXX) $(CXXFLAGS) -o nvclock_qt $(CXXFLAGS) $(OBJECTS) $(LIBS) 
+	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o nvclock_qt $(OBJECTS) $(LIBS) 
 
 clean:
 	rm -f nvclock_qt *.core *.moc *.o
