#
# Copyright 2008, 2009 Free Software Foundation, Inc.
#
# This software is distributed under the terms of the GNU Public License.
# See the COPYING file in the main directory for details.
#
# 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 3 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, see <http://www.gnu.org/licenses/>.
#

# FIXME: This has to go!!
OPENBSC_DIR = $(top_srcdir)/../openbsc/openbsc
OPENGGSN_DIR = $(top_srcdir)/../openggsn

AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) -I$(OPENBSC_DIR)/include
AM_CXXFLAGS = -Wall -ldl -pthread -lgtp

noinst_LTLIBRARIES = libgprs.la

libgprs_la_SOURCES = \
	gprs_debug.cpp \
	csn1.cpp \
	gsm_rlcmac.cpp \
	gprs_bssgp_pcu.cpp \
	gprs_rlcmac.cpp \
	gprs_rlcmac_data.cpp \
	gprs_rlcmac_sched.cpp \
	gsm_timer.cpp \
	bitvector.cpp

if ENABLE_SYSMOBTS
libgprs_la_SOURCES += \
	sysmo_l1_if.cpp
else
libgprs_la_SOURCES += \
	pcu_l1_if.cpp
endif

noinst_PROGRAMS = \
	RLCMACTest \
	pcu

noinst_HEADERS = \
	gprs_debug.h \
	csn1.h \
	gsm_rlcmac.h \
	gprs_bssgp_pcu.h \
	gprs_rlcmac.h \
	pcu_l1_if.h \
	gsm_timer.h \
	bitvector.h

RLCMACTest_SOURCES = RLCMACTest.cpp
RLCMACTest_LDADD = \
	libgprs.la \
	$(LIBOSMOCORE_LIBS) \
	$(COMMON_LA)

pcu_SOURCES = pcu_main.cpp
pcu_LDADD = \
	libgprs.la \
	$(OPENBSC_DIR)/src/libgb/gprs_ns.o \
	$(OPENBSC_DIR)/src/libgb/gprs_bssgp.o \
	$(OPENBSC_DIR)/src/libgb/gprs_bssgp_bss.o \
	$(OPENBSC_DIR)/src/libgb/gprs_bssgp_util.o \
	$(OPENBSC_DIR)/src/libgb/gprs_ns_frgre.o \
	$(OPENBSC_DIR)/src/libcommon/socket.o \
	$(OPENBSC_DIR)/src/gprs/gprs_llc.o \
	$(OPENBSC_DIR)/src/gprs/gprs_gmm.o \
	$(OPENBSC_DIR)/src/gprs/gprs_sgsn.o \
	$(OPENBSC_DIR)/src/gprs/sgsn_libgtp.o \
	$(OPENBSC_DIR)/src/gprs/gprs_sndcp.o \
	$(OPENBSC_DIR)/src/gprs/crc24.o \
	$(LIBOSMOCORE_LIBS) \
	$(LIBOSMOGSM_LIBS) \
	$(COMMON_LA)

#MOSTLYCLEANFILES += testSource testDestination
