diff options
| -rwxr-xr-x | assets/ci.sh | 127 | ||||
| -rw-r--r-- | backends/Makefile | 5 | ||||
| -rw-r--r-- | backends/artnet.c | 2 | ||||
| -rw-r--r-- | backends/sacn.c | 2 | ||||
| -rw-r--r-- | backends/visca.c | 16 | ||||
| -rw-r--r-- | midimonster.h | 2 | 
6 files changed, 97 insertions, 57 deletions
diff --git a/assets/ci.sh b/assets/ci.sh index 94b8bed..f31f385 100755 --- a/assets/ci.sh +++ b/assets/ci.sh @@ -3,20 +3,28 @@  ################################################ SETUP ################################################  dep_build_core=( -    libasound2-dev -    libevdev-dev -    liblua5.3-dev -    libola-dev -    libjack-jackd2-dev -    python3-dev -    libssl-dev +	libasound2-dev +	libevdev-dev +	liblua5.3-dev +	libola-dev +	libjack-jackd2-dev +	python3-dev +	libssl-dev  	build-essential  	pkg-config  	git  ) +dep_build_osx=( +	ola +	lua +	openssl@1.1 +	jack +	python3 +) +  dep_build_win=( -    mingw-w64 +	mingw-w64  )  dep_build_debian=( @@ -68,29 +76,29 @@ print_help() {  	printf "Valid dependency install targets are: \t\"deps-linux\", \"deps-windows\", \"deps-debian\", \"deps-osx\" \"deps-tests\", \"deps-all\".\n\n"  } -install_dependencies(){ -    start_apt update -y -qq > /dev/null || error_handler "There was an error doing apt update." +deps_apt(){ +	start_apt update -y -qq > /dev/null || error_handler "There was an error doing apt update."  	for dependency in "$@"; do  		if [ "$(dpkg-query -W -f='${Status}' "$dependency" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then -            deps+=("$dependency")   # Add not installed dependency to the "to be installed array". +			deps+=("$dependency")   # Add not installed dependency to the "to be installed array".  		else  			[[ -n $verbose ]] && printf "%s already installed!\n" "$dependency"   # If the dependency is already installed print it.  		fi  	done -if [ ! "${#deps[@]}" -ge "1" ]; then    # If nothing needs to get installed don't start apt. -    [[ -n $verbose ]] && echo "All dependencies are fulfilled."    # Dependency array empty! Not running apt! -else -    [[ -z $verbose ]] && echo "Starting dependency installation." -    [[ -n $verbose ]] && echo "Then following dependencies are going to be installed:"    # Dependency array contains items. Running apt. -	[[ -n $verbose ]] && echo "${deps[@]}" | sed 's/ /, /g' -    start_apt install -y -qq --no-install-suggests --no-install-recommends "${deps[@]}" > /dev/null || error_handler "There was an error doing dependency installation!" -fi +	if [ ! "${#deps[@]}" -ge "1" ]; then	# If nothing needs to get installed don't start apt. +		[[ -n $verbose ]] && echo "All dependencies are fulfilled."	# Dependency array empty! Not running apt! +	else +		[[ -z $verbose ]] && echo "Starting dependency installation." +		[[ -n $verbose ]] && echo "Then following dependencies are going to be installed:"	# Dependency array contains items. Running apt. +		[[ -n $verbose ]] && echo "${deps[@]}" | sed 's/ /, /g' +		start_apt install -y -qq --no-install-suggests --no-install-recommends "${deps[@]}" > /dev/null || error_handler "There was an error doing dependency installation!" +	fi  	[[ -n $verbose ]] && printf "\n"  }  start_apt(){ -    i="0" +	i="0"  	if command -v fuser &> /dev/null; then  		while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do  			[ "$i" -eq "0" ] && printf "\nWaiting for other software managers to finish" @@ -103,13 +111,45 @@ start_apt(){  	DEBIAN_FRONTEND=noninteractive apt-get "$@"  } +deps_brew(){ +	# 'brew install' sometimes returns non-zero for some arcane reason.  +	for dependency in "$@"; do +		brew install "$dependency" +	done +	brew link --overwrite python +} +  # Build targets and corresponding deployment.  build-linux(){ -	[[ -n $install_deps ]] && install_dependencies "${dep_build_core[@]}" +	[[ -n $install_deps ]] && deps_apt "${dep_build_core[@]}"  	make full  } +build-osx(){ +	# OpenSSL is not a proper install due to some Apple bull, so provide additional locations via the environment... +	# Additionally, newer versions of this "recipe" seem to use the name 'openssl@1.1' instead of plain 'openssl' and there seems to be +	# no way to programmatically get the link and include paths. Genius! Hardcoding the new version for the time being... +	export CFLAGS="$CFLAGS -I/usr/local/opt/openssl@1.1/include" +	export LDFLAGS="$LDFLAGS -L/usr/local/opt/openssl@1.1/lib" +	make full +} + +build-windows(){ +	[[ -n $install_deps ]] && deps_apt "${dep_build_core[@]}" "${dep_build_win[@]}" +	# Download libraries to link with for Windows +	wget "https://downloads.sourceforge.net/project/luabinaries/5.3.5/Windows%20Libraries/Dynamic/lua-5.3.5_Win64_dllw6_lib.zip" -O lua53.zip +	unzip lua53.zip lua53.dll +	make windows +	make -C backends lua.dll +} + +build-debian(){ +	[[ -n $install_deps ]] && deps_apt "${dep_build_core[@]}" "${dep_build_debian[@]}" +	git checkout debian/master +	gbp buildpackage +} +  build-linux-deploy(){  	#printf "\nLinux Deployment started..\n"  	mkdir -p ./deployment/linux/backends @@ -125,11 +165,6 @@ build-linux-deploy(){  	find . ! -iname "*.zip" ! -iname "*.tgz" -delete  } -build-windows(){ -	[[ -n $install_deps ]] && install_dependencies "${dep_build_core[@]}" "${dep_build_win[@]}" -	make windows -} -  build-windows-deploy(){  	#printf "\nWindows Deployment started..\n"  	mkdir -p ./deployment/windows/backends @@ -146,12 +181,6 @@ build-windows-deploy(){  	find . ! -iname "*.zip" ! -iname "*.tgz" -delete  } -build-debian(){ -	[[ -n $install_deps ]] && install_dependencies "${dep_build_core[@]}" "${dep_build_debian[@]}" -	git checkout debian/master -	gbp buildpackage -} -  build-debian-deploy(){  	#printf "\nDebian Package Deployment started..\n"  	mkdir -p ./deployment/debian/ @@ -161,7 +190,7 @@ build-debian-deploy(){  # Tests  ckeck-spelling(){		# Check spelling. -	[[ -n $install_deps ]] && install_dependencies "lintian" +	[[ -n $install_deps ]] && deps_apt "lintian"  	spellcheck_files=$(find . -type f | grep -v ".git/")	# Create list of files to be spellchecked.  	sl_results=$(xargs spellintian 2>&1 <<< "$spellcheck_files")	# Run spellintian to find spelling errors  	sl_errors=$(wc -l <<< "$sl_results") @@ -178,7 +207,7 @@ ckeck-spelling(){		# Check spelling.  }  check-codespelling(){	# Check code for common misspellings. -	[[ -n $install_deps ]] && install_dependencies "codespell" +	[[ -n $install_deps ]] && deps_apt "codespell"  	spellcheck_files=$(find . -type f | grep -v ".git/")	# Create list of files to be spellchecked.  	cs_results=$(xargs codespell --quiet 2 <<< "$spellcheck_files" 2>&1)  	cs_errors=$(wc -l <<< "$cs_results") @@ -192,7 +221,7 @@ check-codespelling(){	# Check code for common misspellings.  }  analyze-complexity(){	# code complexity analyser. -	[[ -n $install_deps ]] && install_dependencies "python3" "python3-pip" +	[[ -n $install_deps ]] && deps_apt "python3" "python3-pip"  	if [ -z "$(which ~/.local/bin/lizard)" ]; then  		printf "Installing lizard...\n"  		pip3 install lizard >/dev/null @@ -205,7 +234,7 @@ analyze-complexity(){	# code complexity analyser.  }  analyze-shellscript(){	# Shellscript analysis tool. -	[[ -n $install_deps ]] && install_dependencies "shellcheck" +	[[ -n $install_deps ]] && deps_apt "shellcheck"  	printf "Running shellcheck:\n"  	shell_files="$(find . -type f -iname \*.sh)"  	xargs shellcheck -Cnever -s bash <<< "$shell_files" @@ -215,7 +244,7 @@ analyze-shellscript(){	# Shellscript analysis tool.  }  stats(){				# Code statistics. -	[[ -n $install_deps ]] && install_dependencies "cloc" +	[[ -n $install_deps ]] && deps_apt "cloc"  	printf "Code statistics:\n"  	cloc ./  } @@ -243,40 +272,40 @@ target_queue(){  			build-linux|10)  				OS="linux"  				build-linux -				[[ -n $deploy ]] && build-linux-deploy	# Deploy build artifacts if the deploy flag is set. +				[[ -n $deploy ]] && build-linux-deploy  			;;  			build-windows|build-win|11)  				build-windows -				[[ -n $deploy ]] && build-windows-deploy	# Deploy build artifacts if the deploy flag is set. +				[[ -n $deploy ]] && build-windows-deploy  			;;  			build-debian|build-deb|12)  				build-debian -				[[ -n $deploy ]] && build-debian-deploy	# Deploy build artifacts if the deploy flag is set. +				[[ -n $deploy ]] && build-debian-deploy  			;;  			build-osx|13)  				OS="osx" -				printf "\nNot implemented yet!\n" -				#build-linux -				#[[ -n $deploy ]] && build-linux-deploy		# Deploy build artifacts if the deploy flag is set. +				build-osx +				[[ -n $deploy ]] && build-linux-deploy  			;;  			deps-linux)  				# Target to install all needed dependencies for linux builds. -				install_dependencies "${dep_build_core[@]}" +				deps_apt "${dep_build_core[@]}"  			;;  			deps-windows|deps-win)  				# Target to install all needed dependencies for windows builds. -				install_dependencies "${dep_build_core[@]}" "${dep_build_win[@]}" +				deps_apt "${dep_build_core[@]}" "${dep_build_win[@]}"  			;;  			deps-debian|deps-deb)  				# Target to install all needed dependencies for debian packaging. -				install_dependencies "${dep_build_core[@]}" "${dep_build_debian[@]}" +				deps_apt "${dep_build_core[@]}" "${dep_build_debian[@]}"  			;;  			deps-osx)  				# Target to install all needed dependencies for osx.  				printf "\nNot implemented yet!\n" +				deps_brew "${dep_build_osx[@]}"  			;;  			deps-tests) -				install_dependencies "lintian" "codespell" "python3" "python3-pip" "shellcheck" "cloc" +				deps_apt "lintian" "codespell" "python3" "python3-pip" "shellcheck" "cloc"  				# Install lizard if not found.  				if [ -z "$(which ~/.local/bin/lizard)" ]; then  					pip3 install lizard >/dev/null @@ -284,7 +313,7 @@ target_queue(){  			;;  			deps-all)  				# Target to install all needed dependencies for this ci script. -				install_dependencies "${dep_build_core[@]}" "${dep_build_win[@]}" "${dep_build_debian[@]}" "lintian" "codespell" "python3" "python3-pip" "shellcheck" "cloc" +				deps_apt "${dep_build_core[@]}" "${dep_build_win[@]}" "${dep_build_debian[@]}" "lintian" "codespell" "python3" "python3-pip" "shellcheck" "cloc"  			;;  			*)  				printf "Target '%s' not valid!\n" "$i" @@ -310,4 +339,4 @@ target_queue	# Start requestet targets.  # Allow failure handler.  [[ -z $allow_failure ]] && exit "$exitcode" -exit "0"
\ No newline at end of file +exit "0" diff --git a/backends/Makefile b/backends/Makefile index be870d6..35782ab 100644 --- a/backends/Makefile +++ b/backends/Makefile @@ -60,7 +60,10 @@ openpixelcontrol.dll: ADDITIONAL_OBJS += $(BACKEND_LIB)  openpixelcontrol.dll: LDLIBS += -lws2_32  maweb.so: ADDITIONAL_OBJS += $(BACKEND_LIB) -maweb.so: LDLIBS = $(shell pkg-config --libs openssl || echo "-DBUILD_ERROR=\"Missing pkg-config data for openssl\"") +# On OSX, the system provides libressl but no pkg-config data. +# Brew provides OpenSSL v1.1, but with a mangled path and no clear way to find it +# Give up and just default to -lcrypto for the time being... +maweb.so: LDLIBS = $(shell pkg-config --libs openssl || echo "-lcrypto")  maweb.dll: ADDITIONAL_OBJS += $(BACKEND_LIB)  maweb.dll: LDLIBS += -lws2_32  maweb.dll: CFLAGS += -DMAWEB_NO_LIBSSL diff --git a/backends/artnet.c b/backends/artnet.c index dae9ba3..7c5f7e0 100644 --- a/backends/artnet.c +++ b/backends/artnet.c @@ -429,7 +429,7 @@ static int artnet_handle(size_t num, managed_fd* fds){  						LOG("Failed to process frame");  					}  					else if(!inst && global_cfg.detect > 1){ -						LOGPF("Received data for unconfigured universe %d (net %d) on descriptor %" PRIsize_t, frame->universe, frame->net, (((uint64_t) fds[u].impl) & 0xFF)); +						LOGPF("Received data for unconfigured universe %d (net %d) on descriptor %" PRIu64, frame->universe, frame->net, (((uint64_t) fds[u].impl) & 0xFF));  					}  				}  			} diff --git a/backends/sacn.c b/backends/sacn.c index e395ae2..5c5b81d 100644 --- a/backends/sacn.c +++ b/backends/sacn.c @@ -613,7 +613,7 @@ static int sacn_handle(size_t num, managed_fd* fds){  					}  					else if(!inst && global_cfg.detect > 1){  						//this will only happen with unicast input -						LOGPF("Received data for unconfigured universe %d on descriptor %" PRIsize_t, be16toh(data->universe), ((uint64_t) fds[u].impl) & 0xFFFF); +						LOGPF("Received data for unconfigured universe %d on descriptor %" PRIu64, be16toh(data->universe), ((uint64_t) fds[u].impl) & 0xFFFF);  					}  				}  			} diff --git a/backends/visca.c b/backends/visca.c index a36b139..6ae14d9 100644 --- a/backends/visca.c +++ b/backends/visca.c @@ -4,9 +4,12 @@  #include <string.h>  #include <math.h> -#ifndef _WIN32 +#ifdef __linux__  	#include <sys/ioctl.h>  	#include <asm/termbits.h> +#elif __APPLE__ +	#include <sys/ioctl.h> +	#include <IOKit/serial/ioss.h>  #endif  #include "visca.h" @@ -89,9 +92,6 @@ static int ptz_configure_instance(instance* inst, char* option, char* value){  		LOG("Direct device connections are not possible on Windows");  		return 1;  		#else - -		struct termios2 device_config; -  		options = strchr(value, ' ');  		if(options){  			//terminate port name @@ -108,6 +108,8 @@ static int ptz_configure_instance(instance* inst, char* option, char* value){  		//configure baudrate  		if(options){ +			#ifdef __linux__ +			struct termios2 device_config;  			//get current port config  			if(ioctl(data->fd, TCGETS2, &device_config)){  				LOGPF("Failed to get port configuration data for %s: %s", value, strerror(errno)); @@ -123,6 +125,12 @@ static int ptz_configure_instance(instance* inst, char* option, char* value){  			if(ioctl(data->fd, TCSETS2, &device_config)){  				LOGPF("Failed to set port configuration data for %s: %s", value, strerror(errno));  			} +			#elif __APPLE__ +			speed_t speed = strtoul(options, NULL, 10); +			if(ioctl(data->fd, IOSSIOSPEED, &speed)){ +				LOGPF("Failed to set port configuration data for %s: %s", value, strerror(errno)); +			} +			#endif  		}  		return 0;  		#endif diff --git a/midimonster.h b/midimonster.h index 89688c4..64aa1e5 100644 --- a/midimonster.h +++ b/midimonster.h @@ -7,7 +7,7 @@  /* Core version unless set by the build process */  #ifndef MIDIMONSTER_VERSION -	#define MIDIMONSTER_VERSION "v0.6-dist" +	#define MIDIMONSTER_VERSION "v0.7-dist"  #endif  /* Set backend name if unset */  | 
