From 107a8125c73fc8e84cf9c608499625bf2b719f26 Mon Sep 17 00:00:00 2001 From: WB2OSZ Date: Sun, 24 Jan 2016 10:11:17 -0500 Subject: [PATCH] Mac OSX build procedure is now better about locating the SDK. modified: Makefile.macosx new file: search_sdks.sh --- Makefile.macosx | 90 +++++++++++++++++++++++-------------- dwgpsd.c | 7 ++- man1/gen_packets.1 | 8 +++- search_sdks.sh | 109 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 177 insertions(+), 37 deletions(-) create mode 100644 search_sdks.sh diff --git a/Makefile.macosx b/Makefile.macosx index b6330da..55d3106 100644 --- a/Makefile.macosx +++ b/Makefile.macosx @@ -1,5 +1,5 @@ # -# Makefile for Macintosh 10.8+ version of Dire Wolf. +# Makefile for Macintosh 10.6+ version of Dire Wolf. # # TODO: This is a modified version of Makefile.linux and it @@ -9,6 +9,20 @@ # Maybe the most of the differences could go in to platform specific include # files rather than cluttering it up with too many if blocks. +# Changes: +# +# 16 Dec 2015 +# 1. Added condition check for gps/gpsd code. Commented out due to 32/64 bit +# library issues. Macports gpsd build problem. +# 2. SDK version checks are now performed by a bash script 'search_sdks.sh'. +# This should resolve the varied locations Apple stored the SDKs on the different +# Xcode/OS versions. Executing 'make' on the first pass asks the operator +# which SDK he/she wishes to use. Executing 'make clean' resets the SDK +# selection and operator intervention is once again required. Selected SDK +# information resides in a file named './use_this_sdk' in the current working +# directory. +# 3. Removed fsk_fast_filter.h from atest receipe, clang compiler was having +# a hissy fit. Not check with GCC. all : direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients atest log2gpx gen_packets ttcalc direwolf.conf @echo " " @@ -16,34 +30,33 @@ all : direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients atest log2gpx @echo " " @echo " sudo make install" @echo " " - @echo "System SDK's (10.8 - 10.10) must be located here to make use of them. " - @echo " /Developer/SDKs " @echo " " SYS_LIBS := SYS_MIN := -SDK := $(shell find /Developer -maxdepth 1 -type d -name "SDKs") +#SDK := $(shell find /Developer -maxdepth 1 -type d -name "SDKs") #$(info $$SDK = ${SDK}) -ifeq (${SDK},/Developer/SDKs) - SDK := $(shell find /Developer/SDKs -maxdepth 1 -type d -name "MacOSX10.8.sdk") - ifeq (${SDK},/Developer/SDKs/MacOSX10.8.sdk) - SYS_LIBS := -isystem /Developer/SDKs/MacOSX10.8.sdk - SYS_MIN := -mmacosx-version-min=10.8 - else - SDK := $(shell find /Developer/SDKs -maxdepth 1 -type d -name "MacOSX10.9.sdk") - ifeq (${SDK},/Developer/SDKs/MacOSX10.9.sdk) - SYS_LIBS := -isystem /Developer/SDKs/MacOSX10.9.sdk - SYS_MIN := -mmacosx-version-min=10.9 - else - SDK := $(shell find /Developer/SDKs -maxdepth 1 -type d -name "MacOSX10.10.sdk") - ifeq (${SDK},/Developer/SDKs/MacOSX10.10.sdk) - SYS_LIBS := -isystem /Developer/SDKs/MacOSX10.10.sdk - SYS_MIN := -mmacosx-version-min=10.10 - endif - endif - endif -endif +#ifeq (${SDK},/Developer/SDKs) +# SDK := $(shell find /Developer/SDKs -maxdepth 1 -type d -name "MacOSX10.8.sdk") +# ifeq (${SDK},/Developer/SDKs/MacOSX10.8.sdk) +# SYS_LIBS := -isystem /Developer/SDKs/MacOSX10.8.sdk +# SYS_MIN := -mmacosx-version-min=10.8 +# else +# SDK := $(shell find /Developer/SDKs -maxdepth 1 -type d -name "MacOSX10.9.sdk") +# ifeq (${SDK},/Developer/SDKs/MacOSX10.9.sdk) +# SYS_LIBS := -isystem /Developer/SDKs/MacOSX10.9.sdk +# SYS_MIN := -mmacosx-version-min=10.9 +# else +# SDK := $(shell find /Developer/SDKs -maxdepth 1 -type d -name "MacOSX10.10.sdk") +# ifeq (${SDK},/Developer/SDKs/MacOSX10.10.sdk) +# SYS_LIBS := -isystem /Developer/SDKs/MacOSX10.10.sdk +# SYS_MIN := -mmacosx-version-min=10.10 +# endif +# endif +# endif +#endif +SYS_LIBS := $(shell ./search_sdks.sh) EXTRA_CFLAGS := DARWIN_CC := $(shell which clang) ifeq (${DARWIN_CC},) @@ -184,11 +197,20 @@ LDLIBS += -framework Foundation -framework CoreServices CFLAGS += -DUSE_PORTAUDIO -I/opt/local/include # Uncomment following lines to enable GPS interface & tracker function. -# Not available for MacOSX. -# Although MacPorts has gpsd, wonder if it's the same thing. +# Not available for MacOSX (as far as I know). +# Although MacPorts has gpsd, wonder if it's the same thing. Add the check +# just in case it works. +# Well never mind, issue with Macports with 64bit libs ;-( leave the check in +# until (if ever) Macports fixes the issue. +#GPS_HEADER := $(shell find /opt/local/include -maxdepth 1 -type f -name "gps.h") +#ifeq (${GPS_HEADER},) +#GPS_OBJS := +#else #CFLAGS += -DENABLE_GPSD -#LDLIBS += -lgps +#LDLIBS += -L/opt/local/lib -lgps -lgpsd +#GPS_OBJS := dwgps.o dwgpsnmea.o dwgpsd.o +#endif # Name of current directory. # Used to generate zip file name for distribution. @@ -206,7 +228,7 @@ direwolf : direwolf.o aprs_tt.o audio_portaudio.o audio_stats.o ax25_pad.o beaco kiss.o kissnet.o latlong.o latlong.o log.o morse.o multi_modem.o \ nmea.o serial_port.o pfilter.o ptt.o rdq.o recv.o redecode.o rrbb.o server.o \ symbols.o telemetry.o textcolor.o tq.o tt_text.o tt_user.o xmit.o \ - dwgps.o dwgpsnmea.o dwgpsd.o + dwgps.o dwgpsnmea.o $(CC) $(CFLAGS) -o $@ $^ -lpthread $(LDLIBS) -lm @@ -221,8 +243,6 @@ fsk_fast_filter.h : demod_afsk.c $(CC) $(CFLAGS) -o gen_fff -DGEN_FFF demod_afsk.c dsp.c textcolor.c -lm ./gen_fff > fsk_fast_filter.h - - # UTM, USNG, MGRS conversions. geotranz.a : error_string.o mgrs.o polarst.o tranmerc.o ups.o usng.o utm.o @@ -423,17 +443,19 @@ demod_afsk.o : tune.h demod_9600.o : tune.h testagc : atest.c demod.c dsp.c demod_afsk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \ - fcs_calc.c ax25_pad.c decode_aprs.c telemetry.c latlong.c symbols.c tune.h textcolor.c + fcs_calc.c ax25_pad.c decode_aprs.c telemetry.c latlong.c symbols.c tune.h textcolor.c $(CC) $(CFLAGS) -o atest $^ -lm ./atest 02_Track_2.wav | grep "packets decoded in" > atest.out # Unit test for AFSK demodulator - -atest : atest.c fsk_fast_filter.h demod.c dsp.c demod_afsk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \ - fcs_calc.c ax25_pad.c decode_aprs.c dwgpsnmea.o dwgps.o serial_port.o telemetry.c latlong.c symbols.c textcolor.c tt_text.c +atest : atest.c demod.c dsp.c demod_afsk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \ + fcs_calc.c ax25_pad.c decode_aprs.c dwgpsnmea.o dwgps.o serial_port.o telemetry.c latlong.c symbols.c textcolor.c tt_text.c $(CC) $(CFLAGS) -o $@ $^ -lm +#atest : atest.c fsk_fast_filter.h demod.c dsp.c demod_afsk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \ +# fcs_calc.c ax25_pad.c decode_aprs.c dwgpsnmea.o dwgps.o serial_port.o telemetry.c latlong.c symbols.c textcolor.c tt_text.c +# $(CC) $(CFLAGS) -o $@ $^ -lm # Unit test for inner digipeater algorithm @@ -492,7 +514,7 @@ depend : $(wildcard *.c) .PHONY: clean clean : rm -f direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients atest log2gpx gen_packets ttcalc \ - fsk_fast_filter.h *.o *.a + fsk_fast_filter.h *.o *.a use_this_sdk echo " " > tune.h diff --git a/dwgpsd.c b/dwgpsd.c index d970a88..5fc97bf 100644 --- a/dwgpsd.c +++ b/dwgpsd.c @@ -116,7 +116,7 @@ static struct gps_data_t gpsdata; * actually need the data and we don't have a lot of extra unnecessary * busy work going on. * - * The current version of gpsd, supplied with Raspian, is 3.6 from back in + * The current version of gpsd, supplied with Raspian (Wheezy), is 3.6 from back in * May 2012, is missing support for the shared memory interface. * * I tried to download a newer source and build with shared memory support @@ -132,6 +132,11 @@ static struct gps_data_t gpsdata; * sudo scons udev-install * * For now, we will use the socket interface. Maybe get back to this again someday. + * + * Update: January 2016. + * + * I'm told that it might work in Raspian, Jessie version. + * Haven't tried it yet. */ diff --git a/man1/gen_packets.1 b/man1/gen_packets.1 index b07e7f6..f1782aa 100644 --- a/man1/gen_packets.1 +++ b/man1/gen_packets.1 @@ -98,10 +98,14 @@ Both of these are equivalent. "-B 9600" automatically selects scrambled baseban Both of these generate 200 Hz shift, 300 baud, suitable for HF SSB transceiver. .RE .P -.B echo -n "WB2OSZ>WORLD:Hello, world!" | gen_packets -a 25 -o x.wav - +.B echo -n 'WB2OSZ>WORLD:Hello, world!' | gen_packets -a 25 -o x.wav - +.PD 0 +.P +.PD +.B atest x.wav .P .RS -Read message from stdin and put quarter volume sound into the file x.wav. +Read message from stdin and put quarter volume sound into the file x.wav. Decode the sound file. .RE .P diff --git a/search_sdks.sh b/search_sdks.sh new file mode 100644 index 0000000..3ddac3a --- /dev/null +++ b/search_sdks.sh @@ -0,0 +1,109 @@ +#!/bin/bash +# +# This file is part of Dire Wolf, an amateur radio packet TNC. +# +# Bash script to search for SDKs on various MacOSX versions. +# +# Copyright (C) 2015 Robert Stiles +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +FILENAME="./use_this_sdk" +selected_sdk="" +valid_flag=0 +system_sdk="" + +if [ -f $FILENAME ]; then + selected_sdk=`cat $FILENAME` + if [ -d $selected_sdk ]; then + valid_flag=1 + fi +fi + +if [ $valid_flag -eq "0" ]; then + echo " " >&2 + echo " " >&2 + echo "Searching for SDKs.... (Wait for results)" >&2 + echo " " >&2 + echo "Enter the number and press Enter/Return Key" >&2 + echo " " >&2 + echo " " >&2 + + prompt="Select SDK to use:" + + loc1=( $(find /Applications/XCode.app -type d -name "MacOSX10.*.sdk") ) + loc2=( $(find /Developer/SDKs -maxdepth 1 -type d -name "MacOSX10.*.sdk") ) + + options=("${loc1[@]}" "${loc2[@]}") + + if [ "${#options[@]}" -lt "2" ]; then + echo "$options" + fi + + PS3="$prompt " + select opt in "${options[@]}" "Do not use any SDK" ; do + if (( REPLY == 1 + ${#options[@]} )) ; then + echo " " + break + elif (( REPLY > 0 && REPLY <= ${#options[@]} )) ; then + selected_sdk="$opt" + break + fi + done + + if [ ! -z "$selected_sdk" ]; then + echo "$selected_sdk" > $FILENAME + else + echo " " > $FILENAME + fi +fi + +if [ ! -z "$selected_sdk" ]; then + temp_str="$selected_sdk" + min_str="" + flag=true + + # Search for the last MacOSX in the string. + while [ "${#temp_str}" -gt 4 ]; do + temp_str="${temp_str#*MacOSX}" + temp_str="${temp_str%%.sdk}" + min_str="$temp_str" + temp_str="${temp_str:1}" + done + + # Remove the "u" if 10.4u Universal SDK is used. + min_str="${min_str%%u}" + + system_sdk="-isystem ${selected_sdk} -mmacosx-version-min=${min_str}" +else + system_sdk=" " +fi + +echo " " >&2 +echo "*******************************************************************" >&2 + +if [ -z "${system_sdk}" ]; then + echo "SDK Selected: None" >&2 +else + echo "SDK Selected: ${system_sdk}" >&2 +fi + +echo "To change SDK version execute 'make clean' followed by 'make'." >&2 +echo "*******************************************************************" >&2 +echo " " >&2 + +echo ${system_sdk} + +