Makefile.in 8.2 KB
#
# "Software pw3270, desenvolvido com base nos códigos fontes do WC3270  e X3270
# (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
# aplicativos mainframe. Registro no INPI sob o nome G3270.
#
# Copyright (C) <2008> <Banco do Brasil S.A.>
#
# Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
# os termos da GPL v.2 - Licença Pública Geral  GNU,  conforme  publicado  pela
# Free Software Foundation.
#
# Este programa é distribuído na expectativa de  ser  útil,  mas  SEM  QUALQUER
# GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou  de  ADEQUAÇÃO
# A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
# obter mais detalhes.
#
# Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
# programa;  se  não, escreva para a Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA, 02111-1307, USA
#
# Contatos:
#
# perry.werneck@gmail.com	(Alexandre Perry de Souza Werneck)
# erico.mendonca@gmail.com	(Erico Mascarenhas de Mendonça)
#

#---[ Library configuration ]------------------------------------------------------------

LIBNAME=lib@LIB3270_NAME@++

SOURCES= \
	$(wildcard *.cc) \
	$(wildcard local/*.cc) \
	$(wildcard ipc/*.cc) \
        $(wildcard @OSNAME@/*.cc) \
        $(wildcard @OSNAME@/*.rc)

TEST_SOURCES= \
	$(wildcard testprogram/*.cc)

#---[ Tools ]----------------------------------------------------------------------------

CXX=@CXX@
HOST_CC=@HOST_CC@
LD=@CXX@
LN_S=@LN_S@
MKDIR=@MKDIR_P@
INSTALL=@INSTALL@
INSTALL_DATA=@INSTALL_DATA@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
XGETTEXT=@XGETTEXT@
MSGCAT=@MSGCAT@
WINDRES=@WINDRES@
AR=@AR@
VALGRIND=@VALGRIND@

#---[ Paths ]----------------------------------------------------------------------------

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
sbindir=@sbindir@
libdir=@libdir@
includedir=@includedir@
datarootdir=@datarootdir@
localedir=@localedir@
docdir=@docdir@
sysconfdir=@sysconfdir@

BASEDIR=@BASEDIR@

POTDIR=$(BASEDIR)/.pot

OBJDIR=$(BASEDIR)/.obj/$(LIBNAME)
OBJDBG=$(OBJDIR)/Debug
OBJRLS=$(OBJDIR)/Release

BINDIR=$(BASEDIR)/.bin
BINDBG=$(BINDIR)/Debug
BINRLS=$(BINDIR)/Release

#---[ Rules ]----------------------------------------------------------------------------

DEPENDS= \
	Makefile \
	../include/*.h \
	../include/lib3270/*.h \
	../lib3270/*.h


CFLAGS= \
	@CFLAGS@ \
	@CPPFLAGS@ \
	-g \
	-I../include \
	-DBUILD_DATE=`date +%Y%m%d` \
	@DBUS_CFLAGS@

LIBS= \
	@LIBS@ \
	@LIBSSL_LIBS@ \
	@LIBICONV@ \
	@INTL_LIBS@ \
	@DBUS_LIBS@


#---[ Debug Rules ]----------------------------------------------------------------------

$(OBJDBG)/%.o: \
	%.cc \
	$(DEPENDS)

	@echo $< ...
	@$(MKDIR) `dirname $@`
	@$(CXX) \
		$(CFLAGS) \
		-Wall -Wextra -fstack-check \
		-DDEBUG=1 \
		-o $@ -c $<

$(OBJDBG)/%.o: \
	%.rc

	@echo $< ...
	@$(MKDIR) `dirname $@`
	@$(WINDRES) $< -O coff -o $@

#---[ Release Rules ]--------------------------------------------------------------------

$(OBJRLS)/%.o: \
	%.cc \
	$(DEPENDS)

	@echo $< ...
	@$(MKDIR) `dirname $@`
	@$(CXX) \
		$(CFLAGS) \
		-DNDEBUG=1 \
		-o $@ -c $<

$(OBJRLS)/%.o: \
	%.rc

	@echo $< ...
	@$(MKDIR) `dirname $@`
	@$(WINDRES) $< -O coff -o $@

#---[ Misc Rules ]-----------------------------------------------------------------------

$(POTDIR)/$(LIBNAME)/%.pot: \
	%.cc

	@echo $(notdir $@) ...
	@$(MKDIR) `dirname $@`
	@$(XGETTEXT) \
		--language=C \
		--keyword=_ \
		--keyword=N_ \
		--keyword=MSG_:2 \
		--output=$@ \
		$<
	@touch $@

$(POTDIR)/$(LIBNAME)/%.pot: \
	%.rc

	@echo $< ...
	@$(MKDIR) `dirname $@`
	@touch $@

#---[ Release Targets ]------------------------------------------------------------------

all: \
	$(BINRLS)/$(LIBNAME)@DLLEXT@ \
	$(BINRLS)/static/$(LIBNAME).a \
	$(POTDIR)/$(LIBNAME).pot


Release: \
	$(BINRLS)/$(LIBNAME)@DLLEXT@ \
	$(BINRLS)/static/$(LIBNAME).a


$(BINRLS)/$(LIBNAME)@DLLEXT@: \
	$(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@

	@echo $< ...
	@rm -f $@
	@$(LN_S) \
		$^ \
		$@

$(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@: \
	$(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@

	@rm -f $@
	@$(LN_S) \
		$^ \
		$@

$(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@: \
	$(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o)

	@$(MKDIR) $(@D)
	@echo $< ...

	@$(LD) \
		@DLL_LDFLAGS@ \
		-o $@ \
		$(LDFLAGS) \
		$(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o) \
		-L$(BINRLS) \
		$(LIBS) \
		-l@LIB3270_NAME@

$(BINRLS)/static/$(LIBNAME).a: \
	$(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o)

	@echo $@ ...
	@$(MKDIR) `dirname $@`
	@$(AR) rcs $@ $^


#---[ Install Targets ]------------------------------------------------------------------

install: \
	install-shared \
	install-static \
	install-dev

install-shared: \
	$(BINRLS)/$(LIBNAME)@DLLEXT@

	# Install library
	@mkdir -p $(DESTDIR)$(libdir)

	@$(INSTALL_PROGRAM) \
		$(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ \
		$(DESTDIR)$(libdir)


	@$(LN_S) \
		$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ \
		$(DESTDIR)$(libdir)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@

	@$(LN_S) \
		$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ \
		$(DESTDIR)$(libdir)/$(LIBNAME)@DLLEXT@

install-static: \
	$(BINRLS)/static/$(LIBNAME).a

	# Install static library
	@mkdir -p $(DESTDIR)$(libdir)
	@$(INSTALL_DATA) \
		$(BINRLS)/static/$(LIBNAME).a \
		$(DESTDIR)$(libdir)/$(LIBNAME)static.a

	# Install static PKG-CONFIG files
	@mkdir -p $(DESTDIR)$(libdir)/pkgconfig
	@$(INSTALL_DATA) \
		lib3270++static.pc \
		$(DESTDIR)$(libdir)/pkgconfig/lib3270++static.pc

install-dev:

	# Install SDK
	@$(INSTALL_DATA) \
		../include/lib3270++.h \
		$(DESTDIR)$(includedir)/lib3270++.h

	# Install PKG-CONFIG files
	@mkdir -p $(DESTDIR)$(libdir)/pkgconfig
	@$(INSTALL_DATA) \
		lib3270++.pc \
		$(DESTDIR)$(libdir)/pkgconfig/lib3270++.pc


#---[ Misc Targets ]---------------------------------------------------------------------

$(POTDIR)/$(LIBNAME).pot: \
	$(foreach SRC, $(basename $(SOURCES)), $(POTDIR)/$(LIBNAME)/$(SRC).pot)

	@rm -f $@
	@mkdir -p `dirname $@`
	@$(MSGCAT) --sort-output $^ > $@

locale: \
	$(POTDIR)/$(LIBNAME).pot


#---[ Debug Targets ]--------------------------------------------------------------------

Debug: \
	$(BINDBG)/$(LIBNAME)@EXEEXT@

$(BINDBG)/$(LIBNAME)@EXEEXT@: \
	$(foreach SRC, $(basename $(TEST_SOURCES)), $(OBJDBG)/$(SRC).o) \
	$(BINDBG)/$(LIBNAME)@DLLEXT@

	@$(MKDIR) `dirname $@`
	@echo $< ...
	@$(LD) \
		-Wl,--rpath,$(BINDBG) \
		-o $@ \
		$^ \
		$(LDFLAGS) \
		$(LIBS)

run: \
	$(BINDBG)/$(LIBNAME)@EXEEXT@

ifeq ($(VALGRIND),no)

	@LD_LIBRARY_PATH=$(BINDBG) \
		$(BINDBG)/$(LIBNAME)@EXEEXT@

else
	@touch valgrind.suppression

	@LD_LIBRARY_PATH=$(BINDBG) \
		$(VALGRIND) --leak-check=full --track-origins=yes --gen-suppressions=all --suppressions=valgrind.suppression \
			$(BINDBG)/$(LIBNAME)@EXEEXT@
endif


$(BINDBG)/$(LIBNAME)@DLLEXT@: \
	$(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@

	@echo $< ...
	@rm -f $@
	@$(LN_S) \
		$^ \
		$@

$(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@: \
	$(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@

	@rm -f $@
	@$(LN_S) \
		$^ \
		$@

$(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@: \
	$(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC).o)

	@$(MKDIR) `dirname $@`
	@echo $< ...
	@$(LD) \
		-shared \
		-Wl,-soname,$(@F) \
		-Wl,--rpath,$(BINDBG) \
		-o $@ \
		$(LDFLAGS) \
		$(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC).o) \
		-L$(BINDBG) \
		$(LIBS) \
		-l@LIB3270_NAME@

#---[ Clean Targets ]--------------------------------------------------------------------

clean: \
	cleanDebug \
	cleanRelease

	@rm -fr $(BASEDIR)/.tmp/$(LIBNAME)
	@rm -fr $(POTDIR)/$(LIBNAME)

cleanDebug:

	@rm -fr $(OBJDBG)
	@rm -f $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@
	@rm -f $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@
	@rm -f $(BINDBG)/$(LIBNAME)@DLLEXT@

cleanRelease:

	@rm -fr $(OBJRLS)

	@rm -f $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@
	@rm -f $(BINRLS)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@
	@rm -f $(BINRLS)/$(LIBNAME)@DLLEXT@

	@rm -fr $(POTDIR)
	@rm -f lib$(LIBNAME).pot

clean: \
	cleanDebug \
	cleanRelease