# Kamailio build system Module groups definitions # # lists are sets of modules that don't include modules that are in other lists - # break the lists as needed in order to use them to build desired groups and # packages # # * basic used modules, with no extra dependency (widespread usage) set(MOD_LIST_BASIC async auth benchmark blst cfg_rpc cfgutils corex counters ctl debugger diversion enum exec ipops kex mangler maxfwd mediaproxy mqueue nat_traversal nathelper path pike pv ratelimit rr rtimer rtpproxy sanity sdpops siputils sl statistics textops textopsx tm tmx topoh xlog rtpengine stun sipt tcpops auth_xkeys smsops tsilo cfgt statsc topos topos_htable sipdump pv_headers kemix) # * extra used modules, with no extra dependency set(MOD_LIST_EXTRA avp auth_diameter call_control call_obj dmq domainpolicy msrp carrierroute pdb qos sca seas sms sst timer tmrec uac_redirect xhttp xhttp_rpc xprint jsonrpcs nosip dmq_usrloc statsd rtjson log_custom keepalive ss7ops acc_diameter evrexec file_out sipjson lrkproxy math posops xhttp_prom dlgs sworker influxdbc) # * common modules depending on database set(MOD_LIST_DB acc alias_db auth_db avpops cfg_db db_text db_flatstore db_cluster dialog dispatcher domain drouting group htable imc matrix mohqueue msilo mtree p_usrloc pdt permissions pipelimit prefix_route registrar sipcapture siptrace speeddial sqlops uac uri_db userblocklist usrloc secfilter) # * common modules depending on database, using UID db schema set(MOD_LIST_DBUID db2_ops uid_auth_db uid_avp_db uid_domain uid_gflags uid_uri_db) # * modules for devel purposes set(MOD_LIST_DEVEL misctest) # * modules depending on pcre3 library set(MOD_LIST_PCRE dialplan lcr regex) # * modules depending on radius client library set(MOD_LIST_RADIUS acc_radius auth_radius misc_radius peering) # * modules depending on ldap client library set(MOD_LIST_LDAP db2_ldap h350 ldap) # * modules depending on mysql client library set(MOD_LIST_MYSQL db_mysql) # * modules depending on postgres client library set(MOD_LIST_POSTGRES db_postgres) # * modules depending on unixodbc library set(MOD_LIST_UNIXODBC db_unixodbc) # * modules depending on xml2 library set(MOD_LIST_CPL cplc) # * modules depending on xml2 library set(MOD_LIST_XMLDEPS xhttp_pi xmlrpc xmlops) # * modules depending on net-snmp library set(MOD_LIST_SNMPSTATS snmpstats) # * modules depending on expat library set(MOD_LIST_XMPP xmpp) # * modules depending on bdb (db4) library set(MOD_LIST_BERKELEY db_berkeley) # * modules depending on curl library set(MOD_LIST_UTILS utils http_client lost slack) # * modules depending on curl and libevent2 library set(MOD_LIST_HTTP_ASYNC http_async_client) # * modules depending on memcache library set(MOD_LIST_MEMCACHED memcached) # * modules depending on openssl library set(MOD_LIST_TLSDEPS crypto tls) # * modules depending on static openssl library set(MOD_LIST_TLSA tlsa) # * modules depending on static wolfssl library set(MOD_LIST_TLS_WOLFSSL tls_wolfssl) # * modules depending on openssl library set(MOD_LIST_OUTBOUND outbound) # * modules depending on openssl and unistring library set(MOD_LIST_WEBSOCKET websocket) # * modules depending on libval-threads libcrypto libsres libpthread set(MOD_LIST_DNSSEC dnssec) # * modules depending on libsctp set(MOD_LIST_SCTP sctp) # * modules depending on openssl library set(MOD_LIST_AUTHEPH auth_ephemeral) # * modules related to SIMPLE presence extensions set(MOD_LIST_PRESENCE presence presence_conference presence_dfks presence_dialoginfo presence_mwi presence_profile presence_reginfo presence_xml pua pua_bla pua_dialoginfo pua_reginfo pua_rpc pua_usrloc pua_xmpp rls xcap_client xcap_server) # * modules depending on lua library set(MOD_LIST_LUA app_lua) # * modules depending on perl library set(MOD_LIST_PERLDEPS app_perl db_perlvdb) # * modules depending on python library set(MOD_LIST_PYTHON app_python) # * modules depending on python3 library set(MOD_LIST_PYTHON3 app_python3 app_python3s) # * modules depending on libm (math library - standard system library) set(MOD_LIST_JSDT app_jsdt) # * modules depending on ruby library set(MOD_LIST_RUBY app_ruby app_ruby_proc) # * modules depending on geoip library set(MOD_LIST_GEOIP geoip) # * modules depending on new geoip library set(MOD_LIST_GEOIP2 geoip2) # * modules depending on sqlite library set(MOD_LIST_SQLITE db_sqlite) # * modules depending on oracle library set(MOD_LIST_ORACLE db_oracle) # * modules depending on json library set(MOD_LIST_JSON json pua_json) # * modules depending on json (+libevent) library set(MOD_LIST_JSON_EVENT jsonrpcc) # * modules depending on jansson library set(MOD_LIST_JANSSON jansson acc_json) # * modules depending on jansson (+libevent) library set(MOD_LIST_JANSSON_EVENT janssonrpcc) # * modules depending on redis library set(MOD_LIST_REDIS db_redis ndb_redis topos_redis) # * modules related to IMS extensions set(MOD_LIST_IMS cdp cdp_avp ims_dialog ims_auth ims_isc ims_icscf ims_qos ims_registrar_pcscf ims_registrar_scscf ims_usrloc_pcscf ims_usrloc_scscf ims_charging ims_ocs ims_diameter_server ims_ipsec_pcscf) # * modules depending on java library set(MOD_LIST_JAVA app_java) # * modules depending on gzip library set(MOD_LIST_GZCOMPRESS gzcompress) # * modules depending on uuid library set(MOD_LIST_UUID uuid) # * modules depending on ev library set(MOD_LIST_EV evapi) # * modules depending on libjwt library set(MOD_LIST_JWT jwt) # * modules depending on libwebsockets library set(MOD_LIST_LWSC lwsc) # * modules depending on libstirshaken library set(MOD_LIST_STIRSHAKEN stirshaken) # * modules depending on kazoo/rabbitmq set(MOD_LIST_KAZOO kazoo) # * modules depending on mongodb set(MOD_LIST_MONGODB db_mongodb ndb_mongodb) # * modules depending on redis and event library set(MOD_LIST_CNXCC cnxcc) # * modules depending on erlang library set(MOD_LIST_ERLANG erlang) # * modules depending on systemd library set(MOD_LIST_SYSTEMD log_systemd systemdops) # * modules depending on libnsq (+libev libevbuffsock libcurl libjson-c) library set(MOD_LIST_NSQ nsq) # * modules depending on librabbitmq library set(MOD_LIST_RABBITMQ rabbitmq) # * modules depending on libphonenumber library set(MOD_LIST_PHONENUM phonenum) # * modules depending on rdkafka library set(MOD_LIST_KAFKA kafka) # * modules depending on mqtt mosquitto and ev library set(MOD_LIST_MQTT mqtt) # * modules depending on nats and ev library set(MOD_LIST_NATS nats) # * modules depending on ruxc library set(MOD_LIST_RUXC ruxc) # * modules depending on microhttpd library set(MOD_LIST_MICROHTTPD microhttpd) # * modules depending on nghttp2 library set(MOD_LIST_NGHTTP2 nghttp2) # * modules depending on libgcrypt library set(MOD_LIST_GCRYPT gcrypt) # * modules depending on secsipid library set(MOD_LIST_SECSIPID secsipid secsipid_proc) # * modules depending on oRTP and mediastreamer2 libraries set(MOD_LIST_RTP_MEDIA_SERVER rtp_media_server) # * all modules set(MOD_LIST_ALL ${MOD_LIST_BASIC} ${MOD_LIST_EXTRA} ${MOD_LIST_DB} ${MOD_LIST_DBUID} ${MOD_LIST_DEVEL} ${MOD_LIST_PCRE} ${MOD_LIST_RADIUS} ${MOD_LIST_LDAP} ${MOD_LIST_MYSQL} ${MOD_LIST_POSTGRES} ${MOD_LIST_UNIXODBC} ${MOD_LIST_XMLDEPS} ${MOD_LIST_PERLDEPS} ${MOD_LIST_CPL} ${MOD_LIST_XMPP} ${MOD_LIST_BERKELEY} ${MOD_LIST_UTILS} ${MOD_LIST_MEMCACHED} ${MOD_LIST_TLSDEPS} ${MOD_LIST_WEBSOCKET} ${MOD_LIST_SNMPSTATS} ${MOD_LIST_PRESENCE} ${MOD_LIST_LUA} ${MOD_LIST_PYTHON} ${MOD_LIST_PYTHON3} ${MOD_LIST_RUBY} ${MOD_LIST_GEOIP} ${MOD_LIST_SQLITE} ${MOD_LIST_JSON} ${MOD_LIST_JSON_EVENT} ${MOD_LIST_REDIS} ${MOD_LIST_IMS} ${MOD_LIST_ORACLE} ${MOD_LIST_OUTBOUND} ${MOD_LIST_JAVA} ${MOD_LIST_DNSSEC} ${MOD_LIST_SCTP} ${MOD_LIST_AUTHEPH} ${MOD_LIST_GZCOMPRESS} ${MOD_LIST_UUID} ${MOD_LIST_EV} ${MOD_LIST_KAZOO} ${MOD_LIST_MONGODB} ${MOD_LIST_CNXCC} ${MOD_LIST_JANSSON} ${MOD_LIST_JANSSON_EVENT} ${MOD_LIST_GEOIP2} ${MOD_LIST_ERLANG} ${MOD_LIST_SYSTEMD} ${MOD_LIST_HTTP_ASYNC} ${MOD_LIST_NSQ} ${MOD_LIST_RABBITMQ} ${MOD_LIST_JSDT} ${MOD_LIST_PHONENUM} ${MOD_LIST_KAFKA} ${MOD_LIST_MQTT} ${MOD_LIST_NATS} ${MOD_LIST_RUXC} ${MOD_LIST_SECSIPID} ${MOD_LIST_JWT} ${MOD_LIST_LWSC} ${MOD_LIST_STIRSHAKEN} ${MOD_LIST_TLSA} ${MOD_LIST_TLS_WOLFSSL} ${MOD_LIST_MICROHTTPD} ${MOD_LIST_NGHTTP2} ${MOD_LIST_GCRYPT} ${MOD_LIST_RTP_MEDIA_SERVER}) # sort the list list(SORT MOD_LIST_ALL) # --- Groups defined for source code compilation ### # groups are sets of modules selected by compile target interest (should be # built by combining lists) # Modules in this group are the default compiled modules due to no external # compile or link dependencies set(MODULE_GROUP_ALL ${MOD_LIST_ALL}) set(MODULE_GROUP_DEFAULT ${MOD_LIST_BASIC} ${MOD_LIST_EXTRA} ${MOD_LIST_DB} ${MOD_LIST_DBUID} ${MOD_LIST_DEVEL} ${MOD_LIST_JSDT}) # Modules in this group are the default compiled modules due to no # internal/external compile or link dependencies # module_group_standard=$(mod_list_basic) $(mod_list_extra) \ $(mod_list_devel) # $(mod_list_jsdt) set(MODULE_GROUP_STANDARD ${MOD_LIST_BASIC} ${MOD_LIST_EXTRA} ${MOD_LIST_DEVEL} ${MOD_LIST_JSDT}) # Modules in this group are considered a standard part due to widespread usage, # but they have dependencies that must be satisfied for compilation (e.g., lcr, # radius, presence, tls, ...). module_group_common=$(mod_list_db) # $(mod_list_dbuid) \ $(mod_list_pcre) $(mod_list_radius) \ $(mod_list_xmldeps) # $(mod_list_presence) \ $(mod_list_tlsdeps) set(MODULE_GROUP_COMMON ${MOD_LIST_DB} ${MOD_LIST_DBUID} ${MOD_LIST_PCRE} ${MOD_LIST_RADIUS} ${MOD_LIST_XMLDEPS} ${MOD_LIST_PRESENCE} ${MOD_LIST_TLSDEPS}) # For db use (db modules, excluding drivers) module_group_db=$(mod_list_db) set(MODULE_GROUP_DB ${MOD_LIST_DB}) # For mysql module_group_mysql_driver=$(mod_list_mysql) # module_group_mysql=$(module_group_mysql_driver) $(module_group_db) set(MODULE_GROUP_MYSQL_DRIVER ${MOD_LIST_MYSQL}) set(MODULE_GROUP_MYSQL ${MODULE_GROUP_MYSQL_DRIVER} ${MODULE_GROUP_DB}) # For postgress module_group_postgres_driver=$(mod_list_postgres) # module_group_postgres=$(module_group_postgres_driver) $(module_group_db) set(MODULE_GROUP_POSTGRES_DRIVER ${MOD_LIST_POSTGRES}) set(MODULE_GROUP_POSTGRES ${MODULE_GROUP_POSTGRES_DRIVER} ${MODULE_GROUP_DB}) # For sqlite module_group_sqlite_driver=$(mod_list_sqlite) # module_group_sqlite=$(module_group_sqlite_driver) $(module_group_db) set(MODULE_GROUP_SQLITE_DRIVER ${MOD_LIST_SQLITE}) set(MODULE_GROUP_SQLITE ${MODULE_GROUP_SQLITE_DRIVER} ${MODULE_GROUP_DB}) # For radius set(MODULE_GROUP_RADIUS ${MODULE_LIST_RADIUS}) # For presence kamailio modules set(MODULE_GROUP_PRESENCE ${MOD_LIST_PRESENCE}) # For cassandra set(MODULE_GROUP_CASSANDRA_DRIVER ${MODULE_LIST_CASSANDRA}) set(MODULE_GROUP_CASSANDRA ${MODULE_GROUP_CASSANDRA_DRIVER} ${MODULE_GROUP_DB}) # For all modules not compiled by default # list(FILTER MOD_LIST_ALL EXCLUDE REGEX "${MODULE_GROUP_DEFAULT}") # for all protocols (excl. local ones such as unix, tcp, etc.) set(AVAILABLE_GROUPS ALL DEFAULT STANDARD COMMON) # --- Groups defined for pacKaging ### # Standard modules in main pkg set(MODULE_GROUP_KSTANDARD ${MOD_LIST_BASIC} ${MOD_LIST_EXTRA} ${MOD_LIST_DB} ${MOD_LIST_DBUID} ${MOD_LIST_PCRE} ${MOD_LIST_JSDT}) # Standard modules without any dependencies (such as pcre) set(MODULE_GROUP_KMINI ${MOD_LIST_BASIC} ${MOD_LIST_EXTRA} ${MOD_LIST_DB} ${MOD_LIST_DBUID} ${MOD_LIST_JSDT}) # pkg pcre module set(MODULE_GROUP_KPCRE ${MOD_LIST_PCRE}) # pkg mysql module set(MODULE_GROUP_KMYSQL ${MOD_LIST_MYSQL}) # pkg postgress module set(MODULE_GROUP_KPOSTGRES ${MOD_LIST_POSTGRES}) # pkg cpl module set(MODULE_GROUP_KCPL ${MOD_LIST_CPL}) # pkg xml modules set(MODULE_GROUP_KXML ${MOD_LIST_XMLDEPS}) # pkg radius modules set(MODULE_GROUP_KRADIUS ${MOD_LIST_RADIUS}) # pkg unixodbc module set(MODULE_GROUP_KUNIXODBC ${MOD_LIST_UNIXODBC}) # pkg perl module set(MODULE_GROUP_KPERL ${MOD_LIST_PERLDEPS}) # pkg snmpstats module set(MODULE_GROUP_KSNMPSTATS ${MOD_LIST_SNMPSTATS}) # pkg xmpp module set(MODULE_GROUP_KXMPP ${MOD_LIST_XMPP}) # pkg berkeley module set(MODULE_GROUP_KBERKELEY ${MOD_LIST_BERKELEY}) # pkg ldap modules set(MODULE_GROUP_KLDAP ${MOD_LIST_LDAP}) # pkg utils module set(MODULE_GROUP_KUTILS ${MOD_LIST_UTILS}) # pkg https_async module set(MODULE_GROUP_KHTTP_ASYNC ${MOD_LIST_HTTP_ASYNC}) # pkg memcached module set(MODULE_GROUP_KMEMCACHED ${MOD_LIST_MEMCACHED}) # pkg tls module set(MODULE_GROUP_KTLS_BASIC ${MOD_LIST_TLSDEPS}) # pkg tls module with curl if(KTLS_INCLUDE_TLSA) set(MODULE_GROUP_KTLS ${MOD_LIST_TLSDEPS} ${MOD_LIST_TLSA}) else() set(MODULE_GROUP_KTLS ${MOD_LIST_TLSDEPS}) set(MODULE_GROUP_KTLSA ${MOD_LIST_TLSA}) endif() # pkg tls_wolfssl module set(MODULE_GROUP_KTLS_WOLFSSL ${MOD_LIST_TLS_WOLFSSL}) # pkg websocket module set(MODULE_GROUP_KWEBSOCKET ${MOD_LIST_WEBSOCKET}) # pkg presence modules set(MODULE_GROUP_KPRESENCE ${MOD_LIST_PRESENCE}) # pkg lua module set(MODULE_GROUP_KLUA ${MOD_LIST_LUA}) # pkg python module set(MODULE_GROUP_KPYTHON ${MOD_LIST_PYTHON}) # pkg python3 module set(MODULE_GROUP_KPYTHON3 ${MOD_LIST_PYTHON3}) # pkg ruby module set(MODULE_GROUP_KRUBY ${MOD_LIST_RUBY}) # pkg geoip module set(MODULE_GROUP_KGEOIP ${MOD_LIST_GEOIP}) # pkg geoip2 module set(MODULE_GROUP_KGEOIP2 ${MOD_LIST_GEOIP2}) # pkg sqlite module set(MODULE_GROUP_KSQLITE ${MOD_LIST_SQLITE}) # K json modules set(MODULE_GROUP_KJSON_BASIC ${MOD_LIST_JSON}) # K json modules with libevent set(MODULE_GROUP_KJSON ${MOD_LIST_JSON} ${MOD_LIST_JSON_EVENT}) # K jansson modules set(MODULE_GROUP_KJANSSON_BASIC ${MOD_LIST_JANSSON}) # K jansson modules with libevent set(MODULE_GROUP_KJANSSON ${MOD_LIST_JANSSON} ${MOD_LIST_JANSSON_EVENT}) # pkg redis module set(MODULE_GROUP_KREDIS ${MOD_LIST_REDIS}) # pkg IMS modules set(MODULE_GROUP_KIMS ${MOD_LIST_IMS}) # pkg outbound module set(MODULE_GROUP_KOUTBOUND ${MOD_LIST_OUTBOUND}) # pkg java module set(MODULE_GROUP_KJAVA ${MOD_LIST_JAVA}) # pkg dnssec module set(MODULE_GROUP_KDNSSEC ${MOD_LIST_DNSSEC}) # pkg sctp module set(MODULE_GROUP_KSCTP ${MOD_LIST_SCTP}) # pkg auth_ephemeral module set(MODULE_GROUP_KAUTHEPH ${MOD_LIST_AUTHEPH}) # pkg gzcompress module set(MODULE_GROUP_KGZCOMPRESS ${MOD_LIST_GZCOMPRESS}) # pkg uuid module set(MODULE_GROUP_KUUID ${MOD_LIST_UUID}) # pkg libev modules set(MODULE_GROUP_KEV ${MOD_LIST_EV}) # pkg jwt module set(MODULE_GROUP_KJWT ${MOD_LIST_JWT}) # pkg lwsc module set(MODULE_GROUP_KLWSC ${MOD_LIST_LWSC}) # pkg stirshaken module set(MODULE_GROUP_KSTIRSHAKEN ${MOD_LIST_STIRSHAKEN}) # pkg kazoo module set(MODULE_GROUP_KKAZOO ${MOD_LIST_KAZOO}) # pkg mongodb modules set(MODULE_GROUP_KMONGODB ${MOD_LIST_MONGODB}) # pkg cnxcc module set(MODULE_GROUP_KCNXCC ${MOD_LIST_CNXCC}) # pkg erlang module set(MODULE_GROUP_KERLANG ${MOD_LIST_ERLANG}) # pkg systemd module set(MODULE_GROUP_KSYSTEMD ${MOD_LIST_SYSTEMD}) # K nsq modules set(MODULE_GROUP_KNSQ ${MOD_LIST_NSQ}) # K rabbitmq modules set(MODULE_GROUP_KRABBITMQ ${MOD_LIST_RABBITMQ}) # K phonenumber modules set(MODULE_GROUP_KPHONENUM ${MOD_LIST_PHONENUM}) # K kafka modules set(MODULE_GROUP_KKAFKA ${MOD_LIST_KAFKA}) # K mqtt modules set(MODULE_GROUP_KMQTT ${MOD_LIST_MQTT}) # K nats modules set(MODULE_GROUP_KNATS ${MOD_LIST_NATS}) # K ruxc modules set(MODULE_GROUP_KRUXC ${MOD_LIST_RUXC}) # K microhttpd module set(MODULE_GROUP_KMICROHTTPD ${MOD_LIST_MICROHTTPD}) # K nghttp2 module set(MODULE_GROUP_KNGHTTP2 ${MOD_LIST_NGHTTP2}) # K gcrypt module set(MODULE_GROUP_KGCRYPT ${MOD_LIST_GCRYPT}) # K secsipid modules set(MODULE_GROUP_KSECSIPID ${MOD_LIST_SECSIPID}) # K rtp_media_server modules set(MODULE_GROUP_KRTP_MEDIA_SERVER ${MOD_LIST_RTP_MEDIA_SERVER}) # list of static modules set(STATIC_MODULES "") list( APPEND AVAILABLE_GROUPS KSTANDARD KMINI KPCRE KMYSQL KPOSTGRES KCPL KXML KRADIUS KUNIXODBC KPERL KSNMPSTATS KXMPP KBERKELEY KLDAP KUTILS KHTTP_ASYNC KMEMCACHED KTLS_BASIC KTLS KTLS_WOLFSSL KWEBSOCKET KPRESENCE KLUA KPYTHON KPYTHON3 KRUBY KGEOIP KGEOIP2 KSQLITE KJSON_BASIC KJSON KJANSSON_BASIC KJANSSON KREDIS KIMS KOUTBOUND KJAVA KDNSSEC KSCTP KAUTHEPH KGZCOMPRESS KUUID KEV KJWT KLWSC KSTIRSHAKEN KKAZOO KMONGODB KCNXCC KERLANG KSYSTEMD KNSQ KRABBITMQ KPHONENUM KKAFKA KMQTT KNATS KRUXC KMICROHTTPD KNGHTTP2 KGCRYPT KSECSIPID KRT_MEDIA_SERVER) # # Option to allow the user to define which group to build # set(SELECTED_PACKAGE_GROUP # "" # CACHE STRING "Select the package group to build from" # PARENT_SCOPE # ) # set_property(CACHE SELECTED_PACKAGE_GROUP PROPERTY STRINGS ${PACKAGE_GROUPS}) # # Ensure the selected group is valid # if(NOT SELECTED_PACKAGE_GROUP IN_LIST PACKAGE_GROUPS) # message( # FATAL_ERROR # "Invalid package group selected: ${SELECTED_PACKAGE_GROUP}. Please choose from: ${PACKAGE_GROUPS}." # ) # endif() # message(STATUS "Building package group: ${SELECTED_PACKAGE_GROUP}")