Skip to content

Instantly share code, notes, and snippets.

@meitinger
Last active November 29, 2021 12:49
Show Gist options
  • Save meitinger/9ccfbd01302cc77b413f to your computer and use it in GitHub Desktop.
Save meitinger/9ccfbd01302cc77b413f to your computer and use it in GitHub Desktop.
Compile guide for Asterisk on Cygwin.
diff -ru asterisk-13.2.0-orig/apps/Makefile asterisk-13.2.0-patched/apps/Makefile
--- asterisk-13.2.0-orig/apps/Makefile 2013-04-15 18:43:47.000000000 +0200
+++ asterisk-13.2.0-patched/apps/Makefile 2015-03-24 03:28:53.684406200 +0100
@@ -34,6 +34,6 @@
$(subst .c,.o,$(wildcard confbridge/*.c)): _ASTCFLAGS+=$(call MOD_ASTCFLAGS,app_confbridge)
ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
- LIBS+= -lres_features.so -lres_ael_share.so -lres_monitor.so -lres_speech.so
+ LIBS+= -lres_stasis.so -lres_ael_share.so -lres_monitor.so -lres_speech.so
LIBS+= -lres_smdi.so
endif
diff -ru asterisk-13.2.0-orig/cdr/Makefile asterisk-13.2.0-patched/cdr/Makefile
--- asterisk-13.2.0-orig/cdr/Makefile 2012-10-14 23:46:45.000000000 +0200
+++ asterisk-13.2.0-patched/cdr/Makefile 2015-03-24 04:24:08.668781200 +0100
@@ -18,3 +18,8 @@
all: _all
include $(ASTTOPDIR)/Makefile.moddir_rules
+
+ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
+ cdr_odbc.so_LIBS:= -lres_odbc.so $(GENERIC_ODBC_LIB)
+ cdr_adaptive_odbc.so_LIBS:= -lres_odbc.so $(GENERIC_ODBC_LIB)
+endif
diff -ru asterisk-13.2.0-orig/cel/Makefile asterisk-13.2.0-patched/cel/Makefile
--- asterisk-13.2.0-orig/cel/Makefile 2012-10-14 23:56:13.000000000 +0200
+++ asterisk-13.2.0-patched/cel/Makefile 2015-03-24 04:25:11.981281200 +0100
@@ -18,3 +18,7 @@
all: _all
include $(ASTTOPDIR)/Makefile.moddir_rules
+
+ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
+ cel_odbc.so_LIBS:= -lres_odbc.so $(GENERIC_ODBC_LIB)
+endif
diff -ru asterisk-13.2.0-orig/channels/Makefile asterisk-13.2.0-patched/channels/Makefile
--- asterisk-13.2.0-orig/channels/Makefile 2014-07-04 15:26:37.000000000 +0200
+++ asterisk-13.2.0-patched/channels/Makefile 2015-03-24 03:28:53.684406200 +0100
@@ -20,7 +20,7 @@
include $(ASTTOPDIR)/Makefile.moddir_rules
ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
- LIBS+= -lres_monitor.so -lres_features.so
+ LIBS+= -lres_monitor.so
endif
clean::
diff -ru asterisk-13.2.0-orig/funcs/Makefile asterisk-13.2.0-patched/funcs/Makefile
--- asterisk-13.2.0-orig/funcs/Makefile 2012-10-14 23:56:13.000000000 +0200
+++ asterisk-13.2.0-patched/funcs/Makefile 2015-03-24 04:26:47.418781200 +0100
@@ -19,6 +19,10 @@
include $(ASTTOPDIR)/Makefile.moddir_rules
+ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
+ func_odbc.so_LIBS:= -lres_odbc.so $(GENERIC_ODBC_LIB)
+endif
+
# the SPRINTF() function in func_sprintf accepts format specifiers
# and thus passes them to snprintf() as non-literal strings; the compiler
# can't check the string and arguments to ensure they match, so this
diff -ru asterisk-13.2.0-orig/include/asterisk/compat.h asterisk-13.2.0-patched/include/asterisk/compat.h
--- asterisk-13.2.0-orig/include/asterisk/compat.h 2014-01-28 21:47:15.000000000 +0100
+++ asterisk-13.2.0-patched/include/asterisk/compat.h 2015-03-24 03:28:53.684406200 +0100
@@ -201,10 +201,6 @@
#endif
#endif /* __CYGWIN__ */
-#ifdef __CYGWIN__
-typedef unsigned long long uint64_t;
-#endif
-
/* glob compat stuff */
#if defined(__Darwin__) || defined(__CYGWIN__)
#define GLOB_ABORTED GLOB_ABEND
diff -ru asterisk-13.2.0-orig/include/asterisk/lock.h asterisk-13.2.0-patched/include/asterisk/lock.h
--- asterisk-13.2.0-orig/include/asterisk/lock.h 2014-12-13 00:40:50.000000000 +0100
+++ asterisk-13.2.0-patched/include/asterisk/lock.h 2015-03-24 16:40:54.423500000 +0100
@@ -72,6 +72,10 @@
/* Asterisk REQUIRES recursive (not error checking) mutexes
and will not run without them. */
+#ifdef __CYGWIN__
+#define PTHREAD_MUTEX_INIT_VALUE PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+#define AST_MUTEX_KIND PTHREAD_MUTEX_RECURSIVE
+#else
#if defined(HAVE_PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) && defined(HAVE_PTHREAD_MUTEX_RECURSIVE_NP)
#define PTHREAD_MUTEX_INIT_VALUE PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
#define AST_MUTEX_KIND PTHREAD_MUTEX_RECURSIVE_NP
@@ -79,6 +83,7 @@
#define PTHREAD_MUTEX_INIT_VALUE PTHREAD_MUTEX_INITIALIZER
#define AST_MUTEX_KIND PTHREAD_MUTEX_RECURSIVE
#endif /* PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP */
+#endif
#ifdef HAVE_PTHREAD_RWLOCK_INITIALIZER
#define __AST_RWLOCK_INIT_VALUE PTHREAD_RWLOCK_INITIALIZER
diff -ru asterisk-13.2.0-orig/include/asterisk/utils.h asterisk-13.2.0-patched/include/asterisk/utils.h
--- asterisk-13.2.0-orig/include/asterisk/utils.h 2014-11-05 01:15:48.000000000 +0100
+++ asterisk-13.2.0-patched/include/asterisk/utils.h 2015-03-24 03:28:53.684406200 +0100
@@ -25,7 +25,9 @@
#include "asterisk/network.h"
+#ifndef __CYGWIN__
#include <execinfo.h>
+#endif
#include <time.h> /* we want to override localtime_r */
#include <unistd.h>
#include <string.h>
@@ -514,12 +516,19 @@
* Ok, this sucks. But if we're already out of mem, we don't
* want the logger to create infinite recursion (and a crash).
*/
+#ifdef __CYGWIN__
+ #define MALLOC_FAILURE_MSG \
+ do { \
+ ast_log(LOG_ERROR, "Memory Allocation Failure in function %s at line %d of %s\n", func, lineno, file); \
+ } while (0)
+#else
#define MALLOC_FAILURE_MSG \
do { \
if (backtrace(_ast_mem_backtrace_buffer, _AST_MEM_BACKTRACE_BUFLEN) < _AST_MEM_BACKTRACE_BUFLEN) { \
ast_log(LOG_ERROR, "Memory Allocation Failure in function %s at line %d of %s\n", func, lineno, file); \
} \
} while (0)
+#endif
/*!
* \brief A wrapper for malloc()
diff -ru asterisk-13.2.0-orig/main/editline/np/unvis.c asterisk-13.2.0-patched/main/editline/np/unvis.c
--- asterisk-13.2.0-orig/main/editline/np/unvis.c 2009-03-02 21:16:51.000000000 +0100
+++ asterisk-13.2.0-patched/main/editline/np/unvis.c 2015-03-24 03:28:53.700031200 +0100
@@ -56,10 +56,12 @@
__weak_alias(unvis,_unvis)
#endif
+#ifndef __CYGWIN__
#ifdef __warn_references
__warn_references(unvis,
"warning: reference to compatibility unvis(); include <vis.h> for correct reference")
#endif
+#endif
#ifndef HAVE_VIS_H
/*
diff -ru asterisk-13.2.0-orig/main/libasteriskssl.c asterisk-13.2.0-patched/main/libasteriskssl.c
--- asterisk-13.2.0-orig/main/libasteriskssl.c 2012-09-14 21:53:43.000000000 +0200
+++ asterisk-13.2.0-patched/main/libasteriskssl.c 2015-03-24 05:27:25.078593800 +0100
@@ -45,7 +45,11 @@
#ifdef HAVE_OPENSSL
+#if __CYGWIN__
+#define get_OpenSSL_function(func) do { real_##func = func; } while(0)
+#else
#define get_OpenSSL_function(func) do { real_##func = dlsym(RTLD_NEXT, __stringify(func)); } while(0)
+#endif
static int startup_complete;
diff -ru asterisk-13.2.0-orig/main/Makefile asterisk-13.2.0-patched/main/Makefile
--- asterisk-13.2.0-orig/main/Makefile 2014-07-04 17:26:58.000000000 +0200
+++ asterisk-13.2.0-patched/main/Makefile 2015-03-24 03:28:53.700031200 +0100
@@ -41,7 +41,7 @@
AST_LIBS+=$(UUID_LIB)
AST_LIBS+=$(CRYPT_LIB)
-ifneq ($(findstring $(OSARCH), linux-gnu uclinux linux-uclibc kfreebsd-gnu),)
+ifneq ($(findstring $(OSARCH), linux-gnu uclinux linux-uclibc kfreebsd-gnu mingw32 cygwin ),)
ifneq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),)
AST_LIBS+=-ldl
endif
@@ -64,7 +64,11 @@
else
# These are used for all but Darwin
ifneq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),)
- ASTLINK+=-Wl,--export-dynamic
+ ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
+ ASTLINK+=-Wl,--export-all-symbols -Wl,--out-implib,libasterisk.a
+ else
+ ASTLINK+=-Wl,--export-dynamic
+ endif
else
ASTLINK+=${GC_LDFLAGS}
endif
@@ -80,10 +84,6 @@
AST_LIBS+=-lcrypto
endif
-ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
- AST_LIBS+=-lminires -ldl
- ASTLINK+=-shared -Wl,--out-implib,libasterisk.a
-endif
ifeq ($(OSARCH),NetBSD)
AST_LIBS+=-lpthread -lcrypto -lm -L/usr/pkg/lib $(EDITLINE_LIB)
endif
@@ -171,15 +171,7 @@
AST_EMBED_LIBS:=$(foreach dep,$(EMBED_LIBS),$(value $(dep)))
OBJS:=$(sort $(OBJS))
-ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
-MAIN_TGT:=asterisk.dll
-asterisk: cygload
- mv cygload.exe asterisk.exe
-
-cygload: asterisk.dll
-else
MAIN_TGT:=asterisk
-endif
ifneq ($(findstring ENABLE_UPLOADS,$(MENUSELECT_CFLAGS)),)
GMIMELDFLAGS+=$(GMIME_LIB)
@@ -247,7 +239,7 @@
$(MAIN_TGT): $(OBJS) $(ASTSSL_LIB) $(LIBEDIT_OBJ) $(AST_EMBED_LDSCRIPTS)
@$(CC) -c -o buildinfo.o $(_ASTCFLAGS) buildinfo.c $(ASTCFLAGS)
$(ECHO_PREFIX) echo " [LD] $(OBJS) $(LIBEDIT_OBJ) $(AST_EMBED_LDSCRIPTS) -> $@"
- $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(OBJS) $(ASTSSL_LDLIBS) $(LIBEDIT_OBJ) $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS) $(LIBEDIT_LIB)
+ $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(OBJS) $(ASTSSL_LDLIBS) $(LIBEDIT_OBJ) $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS) $(LIBEDIT_LIB)
ifeq ($(GNU_LD),1)
$(MAIN_TGT): asterisk.exports
diff -ru asterisk-13.2.0-orig/main/utils.c asterisk-13.2.0-patched/main/utils.c
--- asterisk-13.2.0-orig/main/utils.c 2014-12-17 10:54:00.000000000 +0100
+++ asterisk-13.2.0-patched/main/utils.c 2015-03-24 03:28:53.715656200 +0100
@@ -34,7 +34,9 @@
#include <ctype.h>
#include <fcntl.h>
#include <sys/stat.h>
+#ifndef __CYGWIN__
#include <sys/syscall.h>
+#endif
#include <unistd.h>
#if defined(__APPLE__)
#include <mach/mach.h>
diff -ru asterisk-13.2.0-orig/Makefile.rules asterisk-13.2.0-patched/Makefile.rules
--- asterisk-13.2.0-orig/Makefile.rules 2014-11-12 14:46:25.000000000 +0100
+++ asterisk-13.2.0-patched/Makefile.rules 2015-03-24 03:28:53.715656200 +0100
@@ -161,6 +161,6 @@
%: %.o
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
- $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $^ $(CXX_LIBS) $(ASTLDFLAGS)
+ $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $^ $(CXX_LIBS) $(ASTLDFLAGS)
dist-clean:: clean
diff -ru asterisk-13.2.0-orig/res/Makefile asterisk-13.2.0-patched/res/Makefile
--- asterisk-13.2.0-orig/res/Makefile 2013-08-30 15:28:50.000000000 +0200
+++ asterisk-13.2.0-patched/res/Makefile 2015-03-24 04:13:29.559406200 +0100
@@ -24,6 +24,53 @@
# We use order-only dependencies, and then add the libraries as required.
res_agi.so: | res_speech.so
res_agi.so_LIBS:= -lres_speech.so
+ res_ari_applications.so: | res_ari.so res_stasis.so
+ res_ari_applications.so_LIBS:= -lres_ari.so -lres_stasis.so
+ res_ari_asterisk.so: | res_ari.so res_stasis.so
+ res_ari_asterisk.so_LIBS:= -lres_ari.so -lres_stasis.so
+ res_ari_bridges.so: | res_ari.so res_stasis.so res_stasis_playback.so res_stasis_recording.so
+ res_ari_bridges.so_LIBS:= -lres_ari.so -lres_stasis.so -lres_stasis_playback.so -lres_stasis_recording.so
+ res_ari_channels.so: | res_ari.so res_stasis.so res_stasis_answer.so res_stasis_playback.so res_stasis_recording.so res_stasis_snoop.so
+ res_ari_channels.so_LIBS:= -lres_ari.so -lres_stasis.so -lres_stasis_answer.so -lres_stasis_playback.so -lres_stasis_recording.so -lres_stasis_snoop.so
+ res_ari_device_states.so: | res_ari.so res_stasis.so res_stasis_device_state.so
+ res_ari_device_states.so_LIBS:= -lres_ari.so -lres_stasis.so -lres_stasis_device_state.so
+ res_ari_endpoints.so: | res_ari.so res_stasis.so
+ res_ari_endpoints.so_LIBS:= -lres_ari.so -lres_stasis.so
+ res_ari_events.so: | res_ari.so res_stasis.so
+ res_ari_events.so_LIBS:= -lres_ari.so -lres_stasis.so
+ res_ari_mailboxes.so: | res_ari.so res_stasis.so res_stasis_mailbox.so res_mwi_external.so
+ res_ari_mailboxes.so_LIBS:= -lres_ari.so -lres_stasis.so -lres_stasis_mailbox.so -lres_mwi_external.so
+ res_ari_playbacks.so: | res_ari.so res_stasis.so res_stasis_playback.so
+ res_ari_playbacks.so_LIBS:= -lres_ari.so -lres_stasis.so -lres_stasis_playback.so
+ res_ari_recordings.so: | res_ari.so res_stasis.so res_stasis_recording.so
+ res_ari_recordings.so_LIBS:= -lres_ari.so -lres_stasis.so -lres_stasis_recording.so
+ res_ari_sounds.so: | res_ari.so res_stasis.so
+ res_ari_sounds.so_LIBS:= -lres_ari.so -lres_stasis.so
+ res_calendar_caldav.so: | res_calendar.so
+ res_calendar_caldav.so_LIBS:= -lres_calendar.so
+ res_calendar_ews.so: | res_calendar.so
+ res_calendar_ews.so_LIBS:= -lres_calendar.so
+ res_calendar_icalendar.so: | res_calendar.so
+ res_calendar_icalendar.so_LIBS:= -lres_calendar.so
+ res_config_odbc.so: | res_odbc.so
+ res_config_odbc.so_LIBS:= -lres_odbc.so $(GENERIC_ODBC_LIB)
+ res_hep_rtcp.so: | res_hep.so
+ res_hep_rtcp.so_LIBS:= -lres_hep.so
+ res_mwi_external_ami.so: | res_mwi_external.so
+ res_mwi_external_ami.so_LIBS:= -lres_mwi_external.so
+ res_stasis_answer.so: | res_stasis.so
+ res_stasis_answer.so_LIBS:= -lres_stasis.so
+ res_stasis_device_state.so: | res_stasis.so
+ res_stasis_device_state.so_LIBS:= -lres_stasis.so
+ res_stasis_mailbox.so: | res_mwi_external.so
+ res_stasis_mailbox.so_LIBS:= -lres_mwi_external.so
+ res_stasis_playback.so: | res_stasis.so res_stasis_recording.so
+ res_stasis_playback.so_LIBS:= -lres_stasis.so -lres_stasis_recording.so
+ res_stasis_recording.so: | res_stasis.so
+ res_stasis_recording.so_LIBS:= -lres_stasis.so
+
+ res_rtp_asterisk.so_LIBS:= $(OPENSSL_LIB)
+ res_config_ldap.so_LIBS:= $(LDAP_LIB) -llber
endif
res_config_ldap.o: _ASTCFLAGS+=-DLDAP_DEPRECATED
diff -ru asterisk-13.2.0-orig/res/res_monitor.c asterisk-13.2.0-patched/res/res_monitor.c
--- asterisk-13.2.0-orig/res/res_monitor.c 2014-12-06 19:16:18.000000000 +0100
+++ asterisk-13.2.0-patched/res/res_monitor.c 2015-03-24 19:09:01.095375000 +0100
@@ -51,7 +51,9 @@
#include "asterisk/utils.h"
#include "asterisk/config.h"
#include "asterisk/options.h"
+#ifndef __CYGWIN__
#include "asterisk/beep.h"
+#endif
/*** DOCUMENTATION
<application name="Monitor" language="en_US">
@@ -525,9 +527,11 @@
ast_log(LOG_WARNING, "Execute of %s failed.\n",tmp);
}
+#ifndef __CYGWIN__
if (!ast_strlen_zero(ast_channel_monitor(chan)->beep_id)) {
ast_beep_stop(chan, ast_channel_monitor(chan)->beep_id);
}
+#endif
ast_free(ast_channel_monitor(chan)->format);
ast_free(ast_channel_monitor(chan));
@@ -734,10 +738,12 @@
interval_str, interval);
}
+#ifndef __CYGWIN__
if (ast_beep_start(chan, interval, beep_id, sizeof(beep_id))) {
ast_log(LOG_WARNING, "Unable to enable periodic beep, please ensure func_periodic_hook is loaded.\n");
return -1;
}
+#endif
}
}
# get required packages:
# pkg-config
# make
# wget
# gcc-core
# gcc-g++
# patch
# openssl-devel
# libdb-devel
# libxslt-devel
# libxml2-devel
# zlib-devel
# libvorbis-devel
# libuuid-devel
# libcrypt-devel
# libsqlite3-devel
# speex-devel
# libogg-devel
# libiodbc-devel
# libneon-devel
# libncurses-devel
# libedit-devel
# openldap-devel
# libiconv-devel
# libical-devel
# libgsm-devel
# libgmime-devel
# libcurl-devel
wget http://www.digip.org/jansson/releases/jansson-2.7.tar.gz && \
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13.2.0.tar.gz && \
wget https://gist.github.com/Meitinger/9ccfbd01302cc77b413f/raw/3038d1740555b8d07c48d06357e4a1237ce3699d/asterisk-13.2.0-win.patch && \
tar xf jansson-2.7.tar.gz && \
cd jansson-2.7 && \
./configure --prefix=/usr && \
make && \
make install && \
cd .. && \
tar xf asterisk-13.2.0.tar.gz && \
cd asterisk-13.2.0 && \
patch -p1 < ../asterisk-13.2.0-win.patch && \
./configure \
--disable-asteriskssl \
--prefix=/usr \
--sbindir=/usr/bin \
CFLAGS="-Wno-char-subscripts -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-function -Wno-missing-braces" && \
make menuselect && \
make && \
make install && \
cd ..
@wade-fs
Copy link

wade-fs commented Apr 21, 2016

I passed the configure step in cygwin64, and then make install successfully.
But when I start asterisk, the asterisk blocked.
After I modified modules.conf that do not load any module when start, I found that the system blocked when load module.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment