This patch moves the GSM-specific functions to the new library
libosmogsm which is provided by libosmocore.

I have also moved generate_backtrace() to backtrace.c instead
of gsm_utils.c, otherwise the timer and msgfile tests depend on
libosmogsm.

Signed-off-by: Pablo Neira Ayuso <pablo@gnumonks.org>
diff --git a/src/Makefile.am b/src/Makefile.am
index 94492c5..c5c8a21 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS=. vty codec
+SUBDIRS=. vty codec gsm
 
 # This is _NOT_ the library release version, it's an API version.
 # Please read Chapter 6 "Library interface versions" of the libtool documentation before making any modification
@@ -9,12 +9,12 @@
 
 lib_LTLIBRARIES = libosmocore.la
 
-libosmocore_la_SOURCES = timer.c select.c signal.c msgb.c rxlev_stat.c bits.c \
-			 tlv_parser.c bitvec.c comp128.c gsm_utils.c statistics.c \
-			 write_queue.c utils.c rsl.c gsm48.c gsm48_ie.c \
-			 logging.c logging_syslog.c gsm0808.c rate_ctr.c \
-			 gsmtap_util.c gprs_cipher_core.c crc16.c panic.c \
-			 process.c gsm0480.c
+libosmocore_la_SOURCES = timer.c select.c signal.c msgb.c bits.c \
+			 bitvec.c statistics.c \
+			 write_queue.c utils.c \
+			 logging.c logging_syslog.c rate_ctr.c \
+			 gsmtap_util.c crc16.c panic.c backtrace.c \
+			 process.c
 
 if ENABLE_PLUGIN
 libosmocore_la_SOURCES += plugin.c
diff --git a/src/backtrace.c b/src/backtrace.c
new file mode 100644
index 0000000..4239445
--- /dev/null
+++ b/src/backtrace.c
@@ -0,0 +1,50 @@
+/*
+ * (C) 2008 by Daniel Willmann <daniel@totalueberwachung.de>
+ * (C) 2009 by Holger Hans Peter Freyther <zecke@selfish.org>
+ * (C) 2009-2010 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2010 by Nico Golde <nico@ngolde.de>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <osmocore/utils.h>
+#include "config.h"
+
+#ifdef HAVE_EXECINFO_H
+#include <execinfo.h>
+void generate_backtrace()
+{
+	int i, nptrs;
+	void *buffer[100];
+	char **strings;
+
+	nptrs = backtrace(buffer, ARRAY_SIZE(buffer));
+	printf("backtrace() returned %d addresses\n", nptrs);
+
+	strings = backtrace_symbols(buffer, nptrs);
+	if (!strings)
+		return;
+
+	for (i = 1; i < nptrs; i++)
+		printf("%s\n", strings[i]);
+
+	free(strings);
+}
+#endif
diff --git a/src/gsm/Makefile.am b/src/gsm/Makefile.am
new file mode 100644
index 0000000..a8c2e56
--- /dev/null
+++ b/src/gsm/Makefile.am
@@ -0,0 +1,13 @@
+# This is _NOT_ the library release version, it's an API version.
+# Please read Chapter 6 "Library interface versions" of the libtool documentation before making any modification
+LIBVERSION=0:0:0
+
+INCLUDES = $(all_includes) -I$(top_srcdir)/include
+AM_CFLAGS = -fPIC -Wall
+
+lib_LTLIBRARIES = libosmogsm.la
+
+libosmogsm_la_SOURCES = rxlev_stat.c tlv_parser.c comp128.c gsm_utils.c \
+                        rsl.c gsm48.c gsm48_ie.c gsm0808.c \
+			gprs_cipher_core.c gsm0480.c
+libosmogsm_la_LIBADD = $(top_builddir)/src/libosmocore.la
diff --git a/src/comp128.c b/src/gsm/comp128.c
similarity index 100%
rename from src/comp128.c
rename to src/gsm/comp128.c
diff --git a/src/gprs_cipher_core.c b/src/gsm/gprs_cipher_core.c
similarity index 100%
rename from src/gprs_cipher_core.c
rename to src/gsm/gprs_cipher_core.c
diff --git a/src/gsm0480.c b/src/gsm/gsm0480.c
similarity index 100%
rename from src/gsm0480.c
rename to src/gsm/gsm0480.c
diff --git a/src/gsm0808.c b/src/gsm/gsm0808.c
similarity index 100%
rename from src/gsm0808.c
rename to src/gsm/gsm0808.c
diff --git a/src/gsm48.c b/src/gsm/gsm48.c
similarity index 100%
rename from src/gsm48.c
rename to src/gsm/gsm48.c
diff --git a/src/gsm48_ie.c b/src/gsm/gsm48_ie.c
similarity index 100%
rename from src/gsm48_ie.c
rename to src/gsm/gsm48_ie.c
diff --git a/src/gsm_utils.c b/src/gsm/gsm_utils.c
similarity index 96%
rename from src/gsm_utils.c
rename to src/gsm/gsm_utils.c
index 31e3cd6..54a13ad 100644
--- a/src/gsm_utils.c
+++ b/src/gsm/gsm_utils.c
@@ -334,29 +334,6 @@
 	}
 }
 
-
-#ifdef HAVE_EXECINFO_H
-#include <execinfo.h>
-void generate_backtrace()
-{
-	int i, nptrs;
-	void *buffer[100];
-	char **strings;
-
-	nptrs = backtrace(buffer, ARRAY_SIZE(buffer));
-	printf("backtrace() returned %d addresses\n", nptrs);
-
-	strings = backtrace_symbols(buffer, nptrs);
-	if (!strings)
-		return;
-
-	for (i = 1; i < nptrs; i++)
-		printf("%s\n", strings[i]);
-
-	free(strings);
-}
-#endif
-
 enum gsm_band gsm_arfcn2band(uint16_t arfcn)
 {
 	int is_pcs = arfcn & ARFCN_PCS;
diff --git a/src/rsl.c b/src/gsm/rsl.c
similarity index 100%
rename from src/rsl.c
rename to src/gsm/rsl.c
diff --git a/src/rxlev_stat.c b/src/gsm/rxlev_stat.c
similarity index 100%
rename from src/rxlev_stat.c
rename to src/gsm/rxlev_stat.c
diff --git a/src/tlv_parser.c b/src/gsm/tlv_parser.c
similarity index 100%
rename from src/tlv_parser.c
rename to src/gsm/tlv_parser.c
diff --git a/src/panic.c b/src/panic.c
index 5fb7b56..21e8fd5 100644
--- a/src/panic.c
+++ b/src/panic.c
@@ -22,6 +22,7 @@
 
 #include <osmocore/gsm_utils.h>
 #include <osmocore/panic.h>
+#include <osmocore/backtrace.h>
 
 #include "../config.h"