Skip to content

Commit

Permalink
Thanks to the fine work of Russell Bryant and Dancho Lazarov, we now …
Browse files Browse the repository at this point in the history
…have autoconf and menuselect tools for Asterisk!

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@22267 65c4cc65-6c06-0410-ace0-fbb531ad65f3
  • Loading branch information
Kevin P. Fleming committed Apr 24, 2006
1 parent 746c984 commit 574e14c
Show file tree
Hide file tree
Showing 115 changed files with 22,014 additions and 827 deletions.
171 changes: 96 additions & 75 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ PWD=$(shell pwd)
# Remember the MAKELEVEL at the top
MAKETOPLEVEL?=$(MAKELEVEL)

ifneq ($(findstring dont-optimize,$(MAKECMDGOALS)),dont-optimize)
ifeq ($(findstring dont-optimize,$(MAKECMDGOALS)),)
# More GSM codec optimization
# Uncomment to enable MMXTM optimizations for x86 architecture CPU's
# which support MMX instructions. This should be newer pentiums,
Expand Down Expand Up @@ -97,13 +97,6 @@ DEBUG_THREADS += #-DDEBUG_CHANNEL_LOCKS
# Uncomment next one to enable ast_frame tracing (for debugging)
TRACE_FRAMES = #-DTRACE_FRAMES

# Uncomment next one to enable malloc debugging
# You can view malloc debugging with:
# *CLI> show memory allocations [filename]
# *CLI> show memory summary [filename]
#
MALLOC_DEBUG = #-include $(PWD)/include/asterisk/astmm.h

# Where to install asterisk after compiling
# Default -> leave empty
INSTALL_PREFIX?=
Expand Down Expand Up @@ -182,26 +175,39 @@ HTTP_CGIDIR=/var/www/cgi-bin

ASTCFLAGS=

# Define this to use files larger than 2GB (useful for sound files longer than 37 hours and logfiles)
ASTCFLAGS+=-D_FILE_OFFSET_BITS=64

# Uncomment this to use the older DSP routines
#ASTCFLAGS+=-DOLD_DSP_ROUTINES

# If the file .asterisk.makeopts is present in your home directory, you can
# include all of your favorite Makefile options so that every time you download
# a new version of Asterisk, you don't have to edit the makefile to set them.
# The file, /etc/asterisk.makeopts will also be included, but can be overridden
# include all of your favorite menuselect options so that every time you download
# a new version of Asterisk, you don't have to run menuselect to set them.
# The file /etc/asterisk.makeopts will also be included but can be overridden
# by the file in your home directory.

ifneq ($(wildcard /etc/asterisk.makeopts),)
include /etc/asterisk.makeopts
GLOBAL_MAKEOPTS=$(wildcard /etc/asterisk.makeopts)
USER_MAKEOPTS=$(wildcard ~/.asterisk.makeopts)

ifneq ($(wildcard menuselect.makeopts),)
include menuselect.makeopts
endif

ifneq ($(wildcard makeopts),)
include makeopts
endif

ifneq ($(wildcard ~/.asterisk.makeopts),)
include ~/.asterisk.makeopts
ASTCFLAGS+=$(MENUSELECT_CFLAGS)
TOPDIR_CFLAGS=-include include/autoconfig.h
MOD_SUBDIR_CFLAGS=-include ../include/autoconfig.h

# *CLI> show memory allocations [filename]
# *CLI> show memory summary [filename]
ifneq ($(findstring -DMALLOC_DEBUG,$(ASTCFLAGS)),)
TOPDIR_CFLAGS+=-include include/asterisk/astmm.h
MOD_SUBDIR_CFLAGS+=-include ../include/asterisk/astmm.h
endif

MOD_SUBDIR_CFLAGS+=-fPIC

ifeq ($(OSARCH),Linux)
ifeq ($(PROC),x86_64)
# You must have GCC 3.4 to use k8, otherwise use athlon
Expand Down Expand Up @@ -247,9 +253,13 @@ ifeq ($(OSARCH),SunOS)
endif

INCLUDE+=-Iinclude -I../include
ASTCFLAGS+=-pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) -D_REENTRANT -D_GNU_SOURCE #-DMAKE_VALGRIND_HAPPY
ASTCFLAGS+=-pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG) $(INCLUDE) #-DMAKE_VALGRIND_HAPPY
ASTCFLAGS+=$(OPTIMIZE)
ASTCFLAGS+=# -Werror -Wunused

ifeq ($(AST_DEVMODE),yes)
ASTCFLAGS+=-Werror -Wunused
endif

ifeq ($(shell gcc -v 2>&1 | grep 'gcc version' | cut -f3 -d' ' | cut -f1 -d.),4)
ASTCFLAGS+= -Wno-pointer-sign
endif
Expand All @@ -267,14 +277,6 @@ ifeq ($(PROC),ppc)
ASTCFLAGS+=-fsigned-char
endif

ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/osp/osp.h),)
ASTCFLAGS+=-DOSP_SUPPORT -I$(CROSS_COMPILE_TARGET)/usr/local/include/osp
else
ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/osp/osp.h),)
ASTCFLAGS+=-DOSP_SUPPORT -I$(CROSS_COMPILE_TARGET)/usr/include/osp
endif
endif

ifeq ($(OSARCH),FreeBSD)
BSDVERSION=$(shell make -V OSVERSION -f $(CROSS_COMPILE_TARGET)/usr/share/mk/bsd.port.subdir.mk)
ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
Expand All @@ -300,27 +302,11 @@ ifeq ($(OSARCH),SunOS)
INCLUDE+=-Iinclude/solaris-compat -I$(CROSS_COMPILE_TARGET)/usr/local/ssl/include
endif

ifeq ($(findstring CYGWIN,$(OSARCH)),CYGWIN)
CYGLOADER=cygwin_a
OSARCH=CYGWIN
ASTOBJ=-shared -o asterisk.dll -Wl,--out-implib=libasterisk.dll.a -Wl,--export-all-symbols
ASTLINK=
LIBS+=-lpthread -lncurses -lm -lresolv
ASTSBINDIR=$(MODULES_DIR)
endif

ifndef WITHOUT_ZAPTEL

ifneq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/linux/zaptel.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/local/include/zaptel.h)$(wildcard $(CROSS_COMPILE_TARGET)/usr/pkg/include/zaptel.h),)
ASTCFLAGS+=-DZAPTEL_OPTIMIZATIONS
endif

endif # WITHOUT_ZAPTEL

LIBEDIT=editline/libedit.a

ASTERISKVERSION:=$(shell build_tools/make_version .)

ifneq ($(wildcard .version),)
ASTERISKVERSION:=$(shell cat .version)
ASTERISKVERSIONNUM:=$(shell awk -F. '{printf "%02d%02d%02d", $$1, $$2, $$3}' .version)
RPMVERSION:=$(shell sed 's/[-\/:]/_/g' .version)
else
Expand All @@ -332,11 +318,9 @@ endif
# showing the branch they are made from
ifneq ($(wildcard .svnrevision),)
ASTERISKVERSIONNUM=999999
ASTERISKVERSION:=SVN-$(shell cat .svnbranch)-r$(shell cat .svnrevision)
else
ifneq ($(wildcard .svn),)
ASTERISKVERSIONNUM=999999
ASTERISKVERSION=SVN-$(shell build_tools/make_svn_branch_name)
endif
endif

Expand All @@ -345,11 +329,12 @@ ASTCFLAGS+= $(TRACE_FRAMES)
ASTCFLAGS+= $(MALLOC_DEBUG)
ASTCFLAGS+= $(BUSYDETECT)
ASTCFLAGS+= $(OPTIONS)
ifneq ($(findstring dont-optimize,$(MAKECMDGOALS)),dont-optimize)
ifeq ($(findstring dont-optimize,$(MAKECMDGOALS)),)
ASTCFLAGS+= -fomit-frame-pointer
endif

SUBDIRS=res channels pbx apps codecs formats agi cdr funcs utils stdtime
MOD_SUBDIRS=res channels pbx apps codecs formats cdr funcs
SUBDIRS:=$(MOD_SUBDIRS) utils stdtime agi

OBJS=io.o sched.o logger.o frame.o loader.o config.o channel.o \
translate.o file.o pbx.o cli.o md5.o term.o \
Expand Down Expand Up @@ -426,30 +411,50 @@ ifeq ($(OSARCH),SunOS)
endif

ifeq ($(MAKETOPLEVEL),$(MAKELEVEL))
CFLAGS+=$(ASTCFLAGS)
CFLAGS+=$(ASTCFLAGS) $(TOPDIR_CFLAGS)
endif

# This is used when generating the doxygen documentation
ifneq ($(wildcard /usr/local/bin/dot)$(wildcard /usr/bin/dot),)
ifneq ($(DOT),:)
HAVEDOT=yes
else
HAVEDOT=no
endif

INSTALL=install

CFLAGS+=-DT38_SUPPORT

_all: all
@echo " +--------- Asterisk Build Complete ---------+"
@echo " + Asterisk has successfully been built, but +"
@echo " + cannot be run before being installed by +"
@echo " + running: +"
@echo " + +"
@echo " + $(MAKE) install +"
@echo " + make install +"
@echo " +-------------------------------------------+"

all: cleantest depend asterisk subdirs
all: include/autoconfig.h menuselect.makeopts cleantest depend asterisk subdirs

configure:
-@./bootstrap.sh

include/autoconfig.h: configure
@CFLAGS="" ./configure
@echo "****"
@echo "**** The configure script was just executed, so 'make' needs to be"
@echo "**** restarted."
@echo "****"
@echo exit 1

makeopts: configure
@CFLAGS="" ./configure
@echo "****"
@echo "**** The configure script was just executed, so 'make' needs to be"
@echo "**** restarted."
@echo "****"
@echo exit 1

menuselect.makeopts: build_tools/menuselect makeopts.xml
@build_tools/menuselect --check-deps ${GLOBAL_MAKEOPTS} ${USER_MAKEOPTS} $@

#ifneq ($(wildcard tags),)
ctags: tags
Expand All @@ -459,16 +464,14 @@ ifneq ($(wildcard TAGS),)
all: TAGS
endif

noclean: depend asterisk subdirs

editline/config.h:
cd editline && unset CFLAGS LIBS && ./configure ; \

editline/libedit.a: FORCE
editline/libedit.a:
cd editline && unset CFLAGS LIBS && test -f config.h || ./configure
$(MAKE) -C editline libedit.a

db1-ast/libdb1.a: FORCE
db1-ast/libdb1.a:
$(MAKE) -C db1-ast libdb1.a

ifneq ($(wildcard .depend),)
Expand Down Expand Up @@ -511,27 +514,24 @@ asterisk.html: asterisk.sgml
asterisk.txt: asterisk.sgml
docbook2txt asterisk.sgml

defaults.h: FORCE
defaults.h: makeopts
build_tools/make_defaults_h > $@.tmp
if cmp -s $@.tmp $@ ; then echo ; else \
mv $@.tmp $@ ; \
fi
rm -f $@.tmp

include/asterisk/version.h: FORCE
include/asterisk/version.h:
build_tools/make_version_h > $@.tmp
if cmp -s $@.tmp $@ ; then echo; else \
mv $@.tmp $@ ; \
fi
rm -f $@.tmp

stdtime/libtime.a: FORCE
$(MAKE) -C stdtime libtime.a
stdtime/libtime.a:
CFLAGS="$(ASTCFLAGS) $(MOD_SUBDIR_CFLAGS)" $(MAKE) -C stdtime libtime.a

cygwin_a:
$(MAKE) -C cygwin all

asterisk: $(CYGLOADER) editline/libedit.a db1-ast/libdb1.a stdtime/libtime.a $(OBJS)
asterisk: editline/libedit.a db1-ast/libdb1.a stdtime/libtime.a $(OBJS)
build_tools/make_build_h > include/asterisk/build.h.tmp
if cmp -s include/asterisk/build.h.tmp include/asterisk/build.h ; then echo ; else \
mv include/asterisk/build.h.tmp include/asterisk/build.h ; \
Expand All @@ -544,7 +544,9 @@ muted: muted.o
$(CC) $(AUDIO_LIBS) -o muted muted.o

subdirs:
for x in $(SUBDIRS); do $(MAKE) -C $$x || exit 1 ; done
for x in $(MOD_SUBDIRS); do CFLAGS="$(ASTCFLAGS) $(MOD_SUBDIR_CFLAGS)" $(MAKE) -C $$x || exit 1 ; done
CFLAGS="$(ASTCFLAGS)" $(MAKE) -C utils
CFLAGS="$(ASTCFLAGS) -include ../include/autoconfig.h" $(MAKE) -C agi

clean-depend:
for x in $(SUBDIRS); do $(MAKE) -C $$x clean-depend || exit 1 ; done
Expand All @@ -562,11 +564,18 @@ clean: clean-depend
$(MAKE) -C db1-ast clean
$(MAKE) -C stdtime clean

dist-clean: clean
rm -f menuselect.makeopts makeopts makeopts.xml
rm -f config.log config.status
rm -f include/autoconfig.h
$(MAKE) -C mxml clean
$(MAKE) -C build_tools dist-clean

datafiles: all
if [ x`$(ID) -un` = xroot ]; then sh build_tools/mkpkgconfig $(DESTDIR)/usr/lib/pkgconfig; fi
# Should static HTTP be installed during make samples or even with its own target ala
# webvoicemail? There are portions here that *could* be customized but might also be
# improved a lot. I'll put it here for now.
# Should static HTTP be installed during make samples or even with its own target ala
# webvoicemail? There are portions here that *could* be customized but might also be
# improved a lot. I'll put it here for now.
mkdir -p $(DESTDIR)$(ASTDATADIR)/static-http
for x in static-http/*; do \
install -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \
Expand Down Expand Up @@ -664,7 +673,6 @@ bininstall: all
mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/meetme
mkdir -p $(DESTDIR)$(ASTSPOOLDIR)/monitor
if [ -f asterisk ]; then $(INSTALL) -m 755 asterisk $(DESTDIR)$(ASTSBINDIR)/; fi
if [ -f cygwin/asterisk.exe ]; then $(INSTALL) -m 755 cygwin/asterisk.exe $(DESTDIR)$(ASTSBINDIR)/; fi
if [ -f asterisk.dll ]; then $(INSTALL) -m 755 asterisk.dll $(DESTDIR)$(ASTSBINDIR)/; fi
ln -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk
$(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/
Expand Down Expand Up @@ -887,7 +895,7 @@ valgrind: dont-optimize
depend: include/asterisk/version.h .depend defaults.h
for x in $(SUBDIRS); do $(MAKE) -C $$x depend || exit 1 ; done

.depend: include/asterisk/version.h
.depend: include/asterisk/version.h defaults.h
build_tools/mkdep $(CFLAGS) $(wildcard *.c)

.tags-depend:
Expand Down Expand Up @@ -928,7 +936,6 @@ env:
# If the cleancount has been changed, force a make clean.
# .cleancount is the global clean count, and .lastclean is the
# last clean count we had
# We can avoid this by making noclean

cleantest:
if cmp -s .cleancount .lastclean ; then echo ; else \
Expand Down Expand Up @@ -967,3 +974,17 @@ uninstall-all: _uninstall
rm -rf $(DESTDIR)$(ASTSPOOLDIR)
rm -rf $(DESTDIR)$(ASTETCDIR)
rm -rf $(DESTDIR)$(ASTLOGDIR)

menuselect: build_tools/menuselect makeopts.xml
-@build_tools/menuselect ${GLOBAL_MAKEOPTS} ${USER_MAKEOPTS} menuselect.makeopts && echo "menuselect changes saved!" || echo "menuselect changes NOT saved!"

build_tools/menuselect: build_tools/menuselect.c build_tools/menuselect.h mxml/libmxml.a
$(MAKE) -C build_tools menuselect

mxml/libmxml.a:
@cd mxml && unset CFLAGS && test -f config.h || ./configure
$(MAKE) -C mxml libmxml.a

makeopts.xml: $(foreach dir,$(MOD_SUBDIRS),$(dir)/*.c) build_tools/cflags.xml
@echo "Generating list of available modules ..."
@build_tools/prep_moduledeps > $@
32 changes: 32 additions & 0 deletions UPGRADE.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,38 @@
Information for Upgrading From Previous Asterisk Releases
=========================================================

Build Process (configure script):

Asterisk now uses an autoconf-generated configuration script to learn how it
should build itself for your system. As it is a standard script, running:

$ ./configure --help

will show you all the options available. This script can be used to tell the
build process what libraries you have on your system (if it cannot find them
automatically), which libraries you wish to have ignored even though they may
be present, etc.

You must run the configure script before Asterisk will build, although it will
attempt to automatically run it for you with no options specified; for most users,
that will result in a similar build to what they would have had before the
configure script was added to the build process (except for having to run 'make'
again after the configure script is run). Note that the configure script does NOT
need to be re-run just to rebuild Asterisk; you only need to re-run it when your
system configuration changes or you wish to build Asterisk with different options.

Build Process (module selection):

The Asterisk source tree now includes a basic module selection and build option
selection tool called 'menuselect'. Run 'make menuselect' to make your choices.
In this tool, you can disable building of modules that you don't care about,
turn on/off global options for the build and see which modules will not (and cannot)
be built because your system does not have the required external dependencies
installed.

(TODO: document where 'global' and 'per-user' menuselect input files should go
and what they need to contain)

PBX Core:

* The (very old and undocumented) ability to use BYEXTENSION for dialing
Expand Down
Loading

0 comments on commit 574e14c

Please sign in to comment.