diff --git a/.gitignore b/.gitignore
index 7d5a646..d15be1b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,10 +2,23 @@
 *.o
 *.output
 
+Makefile.in
+
 sql.tab.*
 sql.lex.h
 sql.c
 sql
 
-push
+libtool
+configure
+stamp-h1
+autom4te.cache/
+.deps/
+aclocal.m4
+config.log
+config.status
+
+libsqlpars-uninstalled.pc
+libsqlpars.pc
+sqlpars-config.h*
 
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 47eba10..0000000
--- a/Makefile
+++ /dev/null
@@ -1,40 +0,0 @@
-# $Header: /home/johnl/flnb/code/sql/RCS/Makefile,v 2.1 2009/11/08 02:53:39 johnl Exp $
-# Companion source code for "flex & bison", published by O'Reilly
-# Media, ISBN 978-0-596-15597-1
-# Copyright (c) 2009, Taughannock Networks. All rights reserved.
-# See the README file for license conditions and contact info.
-
-CC = gcc -Wall -O -g
-LEX = flex
-YACC = bison
-CFLAGS = -DYYDEBUG=1
-
-PROGRAMS = sql
-
-all:	${PROGRAMS}
-
-# chapter 4
-
-OBJS	= sql.o sql.tab.o exec.o
-
-sql:	${OBJS} sql-parser.h
-	${CC} -o $@ ${OBJS}
-
-sql.tab.c sql.tab.h:	sql.y
-	${YACC} -vd sql.y
-
-sql.c:	sql.l
-	${LEX} -o $@ $<
-
-sql.o:	sql.c sql.tab.h
-
-clean:
-	rm -f sql sql.tab.c sql.tab.h sql.lex.h sql.c ${OBJS} \
-	sql.output
-
-.SUFFIXES:	.l .y .c
-
-exec.o:	exec.c sql-parser.h
-sql.o: sql-parser.h
-sql.tab.o: sql-parser.h
-
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..cce8ff1
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,26 @@
+ACLOCAL_AMFLAGS = -I build-aux/m4
+
+AM_CFLAGS = -DYYDEBUG=1
+
+bin_PROGRAMS = sql
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libsqlpars.pc
+
+# TESTS = test/unitester
+
+# noinst_PROGRAMS = $(TESTS)
+EXTRA_DIST=sql.y sql.l
+
+sql_SOURCES = exec.c sql-parser.h
+nodist_sql_SOURCES = sql.c sql.tab.c sql.tab.h sql.lex.h
+
+BUILT_SOURCES = $(nodist_sql_SOURCES)
+CLEANFILES = $(nodist_sql_SOURCES) sql.output
+
+sql.tab.c sql.tab.h:   sql.y Makefile
+	${BISON} -vd $<
+
+sql.c sql.lex.h: sql.l Makefile
+	${LEX} -o $@ $<
+
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..4b38721
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+set -e
+srcdir="$(dirname $0)"
+cd "$srcdir"
+if [ -z ${LIBTOOLIZE} ] && GLIBTOOLIZE="`which glibtoolize 2>/dev/null`"; then
+  LIBTOOLIZE="${GLIBTOOLIZE}"
+  export LIBTOOLIZE
+fi
+autoreconf --install --force
diff --git a/build-aux/.gitignore b/build-aux/.gitignore
new file mode 100644
index 0000000..fefd4f8
--- /dev/null
+++ b/build-aux/.gitignore
@@ -0,0 +1,9 @@
+compile
+config.guess
+config.sub
+depcomp
+install-sh
+ltmain.sh
+missing
+test-driver
+ylwrap
diff --git a/build-aux/m4/.gitignore b/build-aux/m4/.gitignore
new file mode 100644
index 0000000..464ba5c
--- /dev/null
+++ b/build-aux/m4/.gitignore
@@ -0,0 +1,5 @@
+libtool.m4
+lt~obsolete.m4
+ltoptions.m4
+ltsugar.m4
+ltversion.m4
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..46035d5
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,92 @@
+m4_define([libsqlpars_major_version], [1])
+m4_define([libsqlpars_minor_version], [0])
+m4_define([libsqlpars_micro_version], [0])
+m4_define([libsqlpars_interface_age], [1])
+# If you need a modifier for the version number. 
+# Normally empty, but can be used to make "fixup" releases.
+m4_define([libsqlpars_extraversion], [])
+
+dnl libtool versioning from libsqlpars
+m4_define([libsqlpars_current], [m4_eval(100 * libsqlpars_minor_version + libsqlpars_micro_version - libsqlpars_interface_age)])
+m4_define([libsqlpars_binary_age], [m4_eval(100 * libsqlpars_minor_version + libsqlpars_micro_version)])
+m4_define([libsqlpars_revision], [libsqlpars_interface_age])
+m4_define([libsqlpars_age], [m4_eval(libsqlpars_binary_age - libsqlpars_interface_age)])
+m4_define([libsqlpars_version], [libsqlpars_major_version().libsqlpars_minor_version().libsqlpars_micro_version()libsqlpars_extraversion()])
+
+
+AC_INIT([sqlpars], [0.0.1],
+        [http://github.com/jgarzik/sqlpars/])
+
+dnl make the compilation flags quiet unless V=1 is used
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_PREREQ(2.60)
+AC_CONFIG_SRCDIR([exec.c])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_MACRO_DIR([build-aux/m4])
+AC_CONFIG_HEADERS([sqlpars-config.h])
+AM_INIT_AUTOMAKE([subdir-objects foreign])
+
+LIBSQLPARS_MAJOR_VERSION=libsqlpars_major_version
+LIBSQLPARS_MINOR_VERSION=libsqlpars_minor_version
+LIBSQLPARS_MICRO_VERSION=libsqlpars_micro_version
+LIBSQLPARS_INTERFACE_AGE=libsqlpars_interface_age
+
+# ABI version
+# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
+LIBSQLPARS_CURRENT=libsqlpars_current
+LIBSQLPARS_REVISION=libsqlpars_revision
+LIBSQLPARS_AGE=libsqlpars_age
+
+AC_SUBST(LIBSQLPARS_CURRENT)
+AC_SUBST(LIBSQLPARS_REVISION)
+AC_SUBST(LIBSQLPARS_AGE)
+
+LT_INIT
+LT_LANG([C])
+
+AC_PROG_LEX
+AC_PROG_YACC
+AC_CHECK_PROG(BISON, bison, bison, false)
+
+dnl Coverage
+AC_MSG_CHECKING([whether to code coverage])
+AC_ARG_ENABLE([coverage],
+	[AS_HELP_STRING([--enable-coverage],[generate code coverage instrumentation])],
+	[],
+	[enable_coverage=no])
+AC_MSG_RESULT([$enable_coverage])
+
+AS_IF([test "$enable_coverage" = "yes"], [
+	AC_PATH_PROG(GCOV, gcov, no)
+	AS_IF([test "$GCOV" = "no"], [
+		AC_MSG_ERROR(gcov tool is not available)])
+	AC_PATH_PROG(LCOV, lcov, no)
+	AS_IF([test "$LCOV" = "no"], [
+		AC_MSG_ERROR(lcov tool is not installed)])
+	CXXFLAGS="$CXXFLAGS -O1 -fprofile-arcs -ftest-coverage"
+	CFLAGS="$CFLAGS -O1 -fprofile-arcs -ftest-coverage"
+])
+
+case $host in
+  *mingw*)
+    LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"
+  ;;
+esac
+
+BUILD_EXEEXT=
+case $build in
+  *mingw*)
+    BUILD_EXEEXT=".exe"
+  ;;
+esac
+
+AC_CONFIG_FILES([
+    Makefile
+    libsqlpars.pc
+    libsqlpars-uninstalled.pc])
+
+AC_SUBST(LIBTOOL_APP_LDFLAGS)
+AC_SUBST(BUILD_EXEEXT)
+AC_OUTPUT
+
diff --git a/libsqlpars-uninstalled.pc.in b/libsqlpars-uninstalled.pc.in
new file mode 100644
index 0000000..3d17910
--- /dev/null
+++ b/libsqlpars-uninstalled.pc.in
@@ -0,0 +1,9 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libsqlpars
+Description: libsqlpars, SQL parser library
+Version: @VERSION@
+Libs: ${pc_top_builddir}/${pcfiledir}/libsqlpars.la
diff --git a/libsqlpars.pc.in b/libsqlpars.pc.in
new file mode 100644
index 0000000..59b45e7
--- /dev/null
+++ b/libsqlpars.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libsqlpars
+Description: libsqlpars, SQL parser library
+Version: @VERSION@
+Libs: -L${libdir} -lsqlpars
+Cflags: -I${includedir}