diff --git a/Makefile.Windows b/Makefile.Windows deleted file mode 100755 index a15e378a2..000000000 --- a/Makefile.Windows +++ /dev/null @@ -1,1993 +0,0 @@ -# -# GNU Makefile for Hamlib (MSVC / clang-cl / MinGW). -# -# G. Vanem 2019 - 2021. -# -THIS_FILE = Makefile.Windows -DATE = $(shell date +%d-%B-%Y) -ABI_VER = 4 - -# -# From 'configure.ac': -# -MAJOR_VER = 4 -MINOR_VER = 2 -VERSION = $(MAJOR_VER).$(MINOR_VER) - -# -# Choose your weapons. Do a 'make vclean' after changing any of these. -# -USE_LIBGD ?= 1 -USE_LIBINDI ?= 0 -USE_LIBREADLINE ?= 0 -USE_LIBUSB ?= 1 -USE_LIBUSRP ?= 1 -USE_LIBXML2 ?= 1 -USE_LUAJIT ?= 0 -USE_MP_COMPILE ?= 1 - -# -# Add support for a 'GnuRadio' device. -# Impossible as it is not up-to-date with current GnuRadio 3.9 API. -# -USE_GNURADIO ?= 0 - -# -# Use the Winsock tracing library (works badly for MinGW): -# https://github.com/gvanem/wsock-trace -# -USE_WSOCK_TRACE ?= 1 - -# -# Use only static external libraries to create '$(Hamlib_DLL)'. -# But '_Hamlib.pyd' and 'HamlibLua.dll' always uses '$(Hamlib_DLL)'. -# -USE_STATIC ?= 1 - -# -# Use '$(Hamlib_DLL)' for all C programs. -# And '$(Hamlib++_DLL)' for all C++ programs. -# -USE_DLLs_FOR_PROGRAMS ?= 1 - -# -# Set to 0 for no Python module. -# Set to 2 to create a Python 2.x module. -# Set to 3 to create a Python 3.x module. -# -USE_PY_BINDING ?= 3 - -# -# Use 'astyle' or 'clang-format' in the "%.i: %.c" preprocess rules below. -# -USE_ASTYLE ?= 0 -USE_CLANG_FORMAT ?= 0 - -# -# Change these as needed: -# (or create env-vars like 'LIBXML2_ROOT=c:/whatever/xml2'). -# -LIBXML2_ROOT ?= f:/MinGW32/src/Parsers/libxml2 -LIBICONV_ROOT ?= f:/MinGW32/src/libiconv-1.15 -LIBGD_ROOT ?= f:/MinGW32/src/Graphics/libgd-2.1.0 -LIBREADLINE_ROOT ?= f:/MinGW32/src/misc/libreadline -LUAJIT_ROOT ?= f:/MinGW32/src/LUA/LuaJIT -LUA5_ROOT ?= f:/MinGW32/src/LUA/Lua-5.4 -LIBUSB_ROOT ?= f:/MinGW32/src/USB/libusb -LIBUSRP_ROOT ?= f:/gv/dx-radio/Bor-IP/src/libusrp/usrp/host -GNURADIO_ROOT ?= f:/gv/dx-radio/GnuRadio/gv-build -LIBINDI_ROOT ?= f:/ProgramFiler/Stellarium/src/src/external/libindi - -PYTHON ?= py -3 - -ifeq ($(USE_LUAJIT),1) - LUA_ROOT = $(realpath $(LUAJIT_ROOT)) - LUA_LIB = $(call select, $(LUA_ROOT)/src/libluajit.a, $(LUA_ROOT)/src/luajit.lib) -else - LUA_ROOT = $(realpath $(LUA5_ROOT)) - LUA_LIB = $(call select, $(LUA_ROOT)/src/liblua.a, $(LUA_ROOT)/src/lua.lib) -endif - -MKDIR = mkdir -RMDIR = rmdir --parents -MOVE = mv --force -COPY = cp --preserve=timestamps --update - -# -# 'clang-cl' may not like stuff in '%CL'. -# Just remove it. -# -export CL= - -define Usage - - Usage: "$(MAKE) -f $(THIS_FILE) CC=[cl | clang-cl | gcc] [CPU=x86 | x64] [all | clean | vclean | realclean | depend | doxy_docs | py_module | lua_module]" - Specify CC=cl - use MSVC - Specify CC=clang-cl - use clang-cl - Specify CC=gcc - use MinGW -endef - -# -# Check the casing of '$CPU'. GNU-make is case-sensitive. -# -ifeq ($(CPU),) - CPU = x86 -endif - -ifeq ($(CPU),X86) - CPU = x86 -else ifeq ($(CPU),X64) - CPU = x64 -endif - -# -# If '$(CPU)=x64', build 64-bit version. Assuming your MinGW -# is dual-target capable and supports the '-mxx' option. -# Otherwise 32-bit programs. -# -ifeq ($(CPU),x64) - BITS = 64 - RCFLAGS = --target=pe-x86-64 - X_SUFFIX = _x64 -else - BITS = 32 - RCFLAGS = --target=pe-i386 - X_SUFFIX = -endif - -ifeq ($(CC),gcc) - OBJ_DIR = MinGW_obj - USE_MP_COMPILE := 0 - -else ifeq ($(CC),clang-cl) - OBJ_DIR = clang_obj - USE_MP_COMPILE := 0 - -else ifeq ($(CC),cl) - OBJ_DIR = MSVC_obj - -else - $(error $(Usage)) -endif - -ifeq ($(CC),gcc) - select = $(1) - CFLAGS = -m$(BITS) -O2 -g --include config.h - LDFLAGS = -m$(BITS) -Wl,--print-map,--sort-common - O = o - A = a - - # - # We want true Winsock2. Not some POSIX emulation that messes up things big-time. - # - CFLAGS += -D__USE_W32_SOCKETS - - WS2_32_LIB = -lws2_32 - -else - select = $(2) - CFLAGS = -nologo -MD -W3 -Zi -O2 -EHsc -DWIN32 -FI./config.h - LDFLAGS = -nologo -debug -incremental:no -verbose -machine:$(CPU) -nodefaultlib:uuid.lib - O = obj - A = lib - - ifeq ($(CC),clang-cl) - CFLAGS += -fms-compatibility -ferror-limit=5 - endif - - ifeq ($(USE_WSOCK_TRACE),1) - WS2_32_LIB = wsock_trace.lib - else - WS2_32_LIB = ws2_32.lib - endif -endif - -# -# Warning control: -# -ifeq ($(CC),gcc) - CFLAGS += -Wall \ - -Wno-format \ - -Wno-array-bounds \ - -Wno-missing-braces \ - -Wno-unused-function \ - -Wno-unused-variable \ - -Wno-shift-count-overflow - -else ifeq ($(CC),clang-cl) - CFLAGS += -Wall \ - -Wno-undef \ - -Wno-unused-function \ - -Wno-unused-macros \ - -Wno-unused-parameter \ - -Wno-unused-variable \ - -Wno-visibility \ - -Wno-unknown-pragmas \ - -Wno-ignored-attributes \ - -Wno-strict-prototypes \ - -Wno-reserved-id-macro \ - -Wno-shadow \ - -Wno-cast-align \ - -Wno-cast-qual \ - -Wno-shorten-64-to-32 \ - -Wno-pedantic \ - -Wno-format-pedantic \ - -Wno-format-nonliteral \ - -Wno-switch-enum \ - -Wno-covered-switch-default \ - -Wno-sign-conversion \ - -Wno-sign-compare \ - -Wno-double-promotion \ - -Wno-assign-enum \ - -Wno-unreachable-code \ - -Wno-unreachable-code-return \ - -Wno-unreachable-code-break \ - -Wno-c++98-compat-pedantic \ - -Wno-old-style-cast \ - -Wno-extra-semi-stmt \ - -Wno-missing-field-initializers \ - -Wno-missing-noreturn \ - -Wno-missing-prototypes \ - -Wno-missing-variable-declarations \ - -Wno-bad-function-cast \ - -Wno-redundant-parens \ - -Wno-tautological-unsigned-zero-compare \ - -Wno-nonportable-system-include-path \ - -Wno-implicit-int-conversion \ - -Wno-float-conversion \ - -Wno-float-equal \ - -Wno-implicit-float-conversion \ - -Wno-implicit-fallthrough \ - -Wno-shift-count-overflow \ - -Wno-documentation \ - -Wno-documentation-unknown-command \ - -Wno-gnu-zero-variadic-macro-arguments \ - -Wno-zero-as-null-pointer-constant - - ifeq ($(USE_LIBUSRP),1) - CFLAGS += -Wno-suggest-override \ - -Wno-suggest-destructor-override - endif - - # - # When on AppVeyor, do not suppress these warnings since they have an old 'clang-cl'. - # - ifeq ($(APPVEYOR_PROJECT_NAME)x,x) - CFLAGS += -Wno-implicit-int-float-conversion \ - -Wno-deprecated-copy-dtor - endif - - # - # This warning is kinda important: - # - # rigs/dummy/dummy.h(46,5): warning: 'netrigctl_get_vfo_mode' redeclared without 'dllimport' attribute: previous - # 'dllimport' ignored [-Winconsistent-dllimport] - # int netrigctl_get_vfo_mode(RIG *); - # ^ - # So do not add a '-Wno-inconsistent-dllimport'. - # - # And so is this '-Wconditional-uninitialized'. - # -else - CFLAGS += -wd4018 -wd4101 -wd4142 -wd4146 -wd4244 -wd4251 -wd4305 -wd4700 -wd4800 - - ifeq ($(BITS),64) - CFLAGS += -wd4267 - endif -endif - -# CFLAGS += -DHASH_BLOOM - -# -# External libraries for '$(Hamlib_DLL)': -# -EX_LIBS = $(WS2_32_LIB) - -# -# The DLL and library names: -# -Hamlib_DLL = Hamlib-$(ABI_VER).dll -Hamlib_IMP_LIB = $(call select, libHamlib-$(ABI_VER).dll.a, Hamlib-$(ABI_VER)_imp.lib) -Hamlib_STAT_LIB = $(call select, libHamlib-$(ABI_VER).a, Hamlib-$(ABI_VER).lib) - -# -# The C++ library -# -Hamlib++_DLL = Hamlib-$(ABI_VER)++.dll -Hamlib++_IMP_LIB = $(call select, libHamlib-$(ABI_VER)++.dll.a, Hamlib-$(ABI_VER)++_imp.lib) - -# -# The internal utility library; '$(hamlib_misc_SRC)'. -# -misc_LIB = $(call select, libmisc.a, misc.lib) - -# -# What to build: -# -TARGETS = $(Hamlib_STAT_LIB) $(Hamlib_DLL) \ - $(Hamlib_IMP_LIB) $(misc_LIB) - -# -# The C++ interface is dynamic only. -# -TARGETS += $(Hamlib++_DLL) $(Hamlib++_IMP_LIB) - -# -# For 'test/*.c' only. They all use '$(Hamlib_DLL)'. -# -PROG_LIBS = $(WS2_32_LIB) $(call select, -lwinpthread) - -ifeq ($(USE_DLLs_FOR_PROGRAMS),1) - # - # A strangely named macro ('-DUSE_Hamlib_DLL' would be better), but - # this will let all .c and .cc programs to use 'Hamlib-$(ABI_VER).dll' - # - PROG_CFLAGS = -DDLL_EXPORT - - # - # Use 'Hamlib-$(ABI_VER).dll' for C programs. - # - C_PROG_LIBS = $(misc_LIB) $(Hamlib_IMP_LIB) - - # - # Use 'Hamlib-$(ABI_VER)++.dll and 'Hamlib-$(ABI_VER).dll' for C++ programs. - # The library order matter for MinGW only. - # - CPP_PROG_LIBS = $(Hamlib_IMP_LIB) $(Hamlib++_IMP_LIB) -else - PROG_CFLAGS = - PROG_LIBS = $(EX_LIBS) - C_PROG_LIBS = $(Hamlib_STAT_LIB) $(misc_LIB) - CPP_PROG_LIBS = $(Hamlib_STAT_LIB) $(misc_LIB) $(Hamlib++_IMP_LIB) -endif - -# -# For 'rigs/kit/usrp.c' and 'rigs/kit/usrp_impl.cc'. -# This needs Boost too. Untested by me. -# -ifeq ($(USE_LIBUSRP),1) - CFLAGS += -DHAVE_USRP \ - -I$(LIBUSRP_ROOT)/include \ - -I$(LIBUSRP_ROOT)/include/usrp - - EX_LIBS += $(call select, $(LIBUSRP_ROOT)/libUSRP.a, \ - $(LIBUSRP_ROOT)/libUSRP_imp.lib) - - hamlib_CC_SRC = kit/usrp_impl.cc -endif - -ifeq ($(USE_LIBUSB),1) - CFLAGS += -DHAVE_LIBUSB \ - -DHAVE_LIBUSB_H \ - -I$(LIBUSB_ROOT)/libusb - - ifeq ($(USE_STATIC),1) - EX_LIBS += $(call select, $(LIBUSB_ROOT)/libusb-1.0.a -ladvapi32, \ - $(LIBUSB_ROOT)/libusb-1.0.lib advapi32.lib) - else - EX_LIBS += $(call select, $(LIBUSB_ROOT)/libusb-1.0.dll.a, \ - $(LIBUSB_ROOT)/libusb-1.0_imp.lib) - endif -endif - -# -# Untested; does it exist except for MinGW? -# -ifeq ($(USE_LIBREADLINE),1) - CFLAGS += -DHAVE_LIBREADLINE \ - -I$(LIBREADLINE_ROOT)/include - - EX_LIBS += $(call select, $(LIBREADLINE_ROOT)/libreadline.a, \ - $(LIBREADLINE_ROOT)/libreadline.lib) -endif - -CFLAGS += -I. \ - -I./include \ - -I./include/hamlib \ - -I./lib \ - -I./src \ - -I./tests - -ifneq ($(CC),gcc) - CFLAGS += -I$(OBJ_DIR) - EX_LIBS += user32.lib kernel32.lib -endif - -c_to_obj = $(addprefix $(OBJ_DIR)/, \ - $(notdir $(1:.c=.$(O)))) - -cc_to_obj = $(addprefix $(OBJ_DIR)/, \ - $(notdir $(1:.cc=.$(O)))) - -cpp_to_obj = $(addprefix $(OBJ_DIR)/, \ - $(notdir $(1:.cpp=.$(O)))) - -c_to_i = $(notdir $(1:.c=.i)) -cc_to_i = $(notdir $(1:.cc=.i)) - -VPATH = rigs/dummy src tests c++ amplifiers/elecraft - -VPATH += $(addprefix rigs/, \ - adat \ - alinco \ - aor \ - barrett \ - dorji \ - drake \ - elad \ - flexradio \ - icmarine \ - icom \ - jrc \ - kachina \ - kenwood \ - kit \ - lowe \ - pcr \ - prm80 \ - racal \ - rft \ - rs \ - skanti \ - tapr \ - tentec \ - tuner \ - uniden \ - winradio \ - wj \ - yaesu) - -VPATH += $(addprefix rotators/, \ - amsat \ - ars \ - celestron \ - cnctrk \ - easycomm \ - ether6 \ - fodtrack \ - gs232a \ - heathkit \ - indi \ - ioptron \ - m2 \ - meade \ - prosistel \ - rotorez \ - sartek \ - satel \ - spid \ - ts7400) - -# -# For compiling 'HamlibPy2_wrap.c,' 'HamlibPy3_wrap.c' and 'HamlibLua_wrap.c'. -# -VPATH += $(OBJ_DIR) - -# -# All of these use '$(Hamlib_DLL)': -# -TESTS_PROGS = ampctl.exe \ - ampctld.exe \ - dumpmem.exe \ - example.exe \ - listrigs.exe \ - rigctl.exe \ - rigctld.exe \ - rigctlcom.exe \ - rigsmtr.exe \ - rigswr.exe \ - rig_bench.exe \ - rotctl.exe \ - rotctld.exe \ - simyaesu.exe \ - testbcd.exe \ - testfreq.exe \ - testloc.exe \ - testrig.exe \ - testrigcaps.exe \ - testrigopen.exe \ - testtrn.exe - -ifneq ($(APPVEYOR_PROJECT_NAME),) - # - # TODO: build with 'LIBUSB_ROOT = ./CI/libusb', 'LIBXML2_ROOT = ./CI/libxml2' etc. - # when running via 'appveyor.yml' - # -endif - -ifeq ($(USE_LIBXML2),1) - TESTS_PROGS += rigmem.exe - PROG_CFLAGS += -I$(LIBXML2_ROOT)/include \ - -I$(LIBICONV_ROOT)/include \ - -DHAVE_XML2 - - # - # Use the dynamic version of 'libxml2'. - # I.e. do not set 'PROG_CFLAGS += -DLIBXML_STATIC'. - # Otherwise we could need to link to a static 'Iconv', 'Zlib' and - # a 'liblzma' too (depending on how 'libxml2' was built). - # - XML2_LIB = $(call select, $(LIBXML2_ROOT)/libxml2.dll.a, \ - $(LIBXML2_ROOT)/xml2_imp.lib) -endif - -ifeq ($(USE_LIBGD),1) - TESTS_PROGS += rigmatrix.exe - PROG_CFLAGS += -I$(LIBGD_ROOT)/src -endif - -# -# This always uses '$(Hamlib++_DLL)'. -# -TESTS_PROGS += testcpp.exe - -# -# All .c-files for '$(Hamlib_DLL)'. -# Except for those in '$(hamlib_misc_SRC)' which do not need to be exported. -# -hamlib_C_SRC = $(addprefix src/, \ - amp_conf.c \ - amp_reg.c \ - amp_settings.c \ - amplifier.c \ - cal.c \ - cm108.c \ - conf.c \ - debug.c \ - event.c \ - ext.c \ - extamp.c \ - gpio.c \ - locator.c \ - iofunc.c \ - mem.c \ - misc.c \ - microham.c \ - network.c \ - parallel.c \ - register.c \ - rig.c \ - rot_conf.c \ - rot_ext.c \ - rot_reg.c \ - rot_settings.c \ - rotator.c \ - serial.c \ - settings.c \ - sleep.c \ - tones.c \ - usb_port.c) - -hamlib_C_SRC += $(addprefix rigs/dummy/, \ - amp_dummy.c \ - dummy.c \ - dummy_common.c \ - flrig.c \ - netampctl.c \ - netrigctl.c \ - netrotctl.c \ - rot_dummy.c \ - trxmanager.c) - -hamlib_C_SRC += $(addprefix rigs/adat/, \ - adat.c \ - adt_200a.c) - -hamlib_C_SRC += $(addprefix rigs/alinco/, \ - alinco.c \ - dx77.c \ - dxsr8.c) - -hamlib_C_SRC += $(addprefix rigs/aor/, \ - aor.c \ - ar2700.c \ - ar3000.c \ - ar3030.c \ - ar5000.c \ - ar7030.c \ - ar7030p.c \ - ar7030p_utils.c \ - ar8000.c \ - ar8200.c \ - ar8600.c \ - sr2200.c) - -hamlib_C_SRC += $(addprefix rigs/barrett/, \ - 950.c \ - barrett.c) - -hamlib_C_SRC += $(addprefix rigs/dorji/, \ - dorji.c \ - dra818.c) - -hamlib_C_SRC += $(addprefix rigs/drake/, \ - drake.c \ - r8a.c \ - r8b.c) - -hamlib_C_SRC += $(addprefix rigs/elad/, \ - elad.c \ - fdm_duo.c) - -hamlib_C_SRC += $(addprefix rigs/flexradio/, \ - dttsp.c \ - flexradio.c \ - sdr1k.c) - -hamlib_C_SRC += $(addprefix rigs/icmarine/, \ - icm700pro.c \ - icm710.c \ - icm802.c \ - icm803.c \ - icmarine.c) - -hamlib_C_SRC += $(addprefix rigs/icom/, \ - delta2.c \ - frame.c \ - ic78.c \ - ic92d.c \ - ic271.c \ - ic275.c \ - ic471.c \ - ic475.c \ - ic703.c \ - ic706.c \ - ic707.c \ - ic718.c \ - ic725.c \ - ic726.c \ - ic728.c \ - ic735.c \ - ic736.c \ - ic737.c \ - ic738.c \ - ic746.c \ - ic751.c \ - ic756.c \ - ic761.c \ - ic765.c \ - ic775.c \ - ic781.c \ - ic785x.c \ - ic820h.c \ - ic821h.c \ - ic910.c \ - ic970.c \ - ic1275.c \ - ic2730.c \ - ic7000.c \ - ic7100.c \ - ic7200.c \ - ic7300.c \ - ic7410.c \ - ic7600.c \ - ic7610.c \ - ic7700.c \ - ic7800.c \ - ic9100.c \ - icom.c \ - icr6.c \ - icr10.c \ - icr20.c \ - icr30.c \ - icr71.c \ - icr72.c \ - icr75.c \ - icr7000.c \ - icr8500.c \ - icr8600.c \ - icr9000.c \ - icr9500.c \ - icrx7.c \ - id1.c \ - id31.c \ - id4100.c \ - id51.c \ - id5100.c \ - omni.c \ - optoscan.c \ - os456.c \ - os535.c \ - perseus.c \ - x108g.c) - -hamlib_C_SRC += $(addprefix rigs/jrc/, \ - jrc.c \ - nrd525.c \ - nrd535.c \ - nrd545.c) - -hamlib_C_SRC += $(addprefix rigs/kachina/, \ - 505dsp.c \ - kachina.c) - -hamlib_C_SRC += $(addprefix rigs/kenwood/, \ - elecraft.c \ - flex.c \ - flex6xxx.c \ - ic10.c \ - k2.c \ - k3.c \ - kenwood.c \ - pihpsdr.c \ - r5000.c \ - th.c \ - thd7.c \ - thd72.c \ - thd74.c \ - thf6a.c \ - thf7.c \ - thg71.c \ - tmd700.c \ - tmd710.c \ - tmv7.c \ - transfox.c \ - trc80.c \ - ts50s.c \ - ts140.c \ - ts440.c \ - ts450s.c \ - ts480.c \ - ts570.c \ - ts590.c \ - ts680.c \ - ts690.c \ - ts711.c \ - ts790.c \ - ts811.c \ - ts850.c \ - ts870s.c \ - ts930.c \ - ts940.c \ - ts950.c \ - ts990s.c \ - ts2000.c \ - xg3.c) - -hamlib_C_SRC += $(addprefix rigs/kit/, \ - dds60.c \ - drt1.c \ - dwt.c \ - elektor304.c \ - elektor507.c \ - fifisdr.c \ - funcube.c \ - hiqsdr.c \ - kit.c \ - miniVNA.c \ - pcrotor.c \ - rs_hfiq.c \ - si570avrusb.c \ - usrp.c) - -hamlib_C_SRC += $(addprefix rigs/lowe/, \ - hf235.c \ - lowe.c) - -hamlib_C_SRC += $(addprefix rigs/pcr/, \ - pcr.c \ - pcr100.c \ - pcr1000.c \ - pcr1500.c \ - pcr2500.c) - -hamlib_C_SRC += $(addprefix rigs/prm80/, \ - prm80.c \ - prm8060.c) - -hamlib_C_SRC += $(addprefix rigs/racal/, \ - ra37xx.c \ - ra3702.c \ - ra6790.c \ - racal.c) - -hamlib_C_SRC += $(addprefix rigs/rft/, \ - ekd500.c \ - rft.c) - -hamlib_C_SRC += $(addprefix rigs/rs/, \ - eb200.c \ - esmc.c \ - gp2000.c \ - rs.c \ - xk2100.c) - -hamlib_C_SRC += $(addprefix rigs/skanti/, \ - skanti.c \ - trp8000.c \ - trp8255.c) - -hamlib_C_SRC += $(addprefix rigs/tapr/, \ - dsp10.c \ - tapr.c) - -hamlib_C_SRC += $(addprefix rigs/tentec/, \ - argonaut.c \ - jupiter.c \ - omnivii.c \ - orion.c \ - paragon.c \ - pegasus.c \ - rx320.c \ - rx331.c \ - rx340.c \ - rx350.c \ - tentec.c \ - tentec2.c \ - tt550.c) - -hamlib_C_SRC += $(addprefix rigs/tuner/, \ - tuner.c \ - v4l.c \ - v4l2.c) - -hamlib_C_SRC += $(addprefix rigs/uniden/, \ - bc245.c \ - bc250.c \ - bc780.c \ - bc895.c \ - bc898.c \ - bcd396t.c \ - bcd996t.c \ - pro2052.c \ - uniden.c \ - uniden_digital.c) - -hamlib_C_SRC += $(addprefix rigs/winradio/, \ - g303.c \ - g305.c \ - g313-win.c \ - winradio.c \ - wr1000.c \ - wr1500.c \ - wr1550.c \ - wr3100.c \ - wr3150.c \ - wr3500.c \ - wr3700.c) - -hamlib_C_SRC += $(addprefix rigs/wj/, \ - wj.c \ - wj8888.c) - -hamlib_C_SRC += $(addprefix rigs/yaesu/, \ - frg100.c \ - frg8800.c \ - frg9600.c \ - ft100.c \ - ft450.c \ - ft600.c \ - ft736.c \ - ft747.c \ - ft757gx.c \ - ft767gx.c \ - ft817.c \ - ft840.c \ - ft847.c \ - ft857.c \ - ft890.c \ - ft891.c \ - ft897.c \ - ft900.c \ - ft920.c \ - ft950.c \ - ft980.c \ - ft990.c \ - ft991.c \ - ft1000d.c \ - ft1000mp.c \ - ft1200.c \ - ft2000.c \ - ft3000.c \ - ft5000.c \ - ft9000.c \ - ftdx10.c \ - ftdx101.c \ - ftdx101mp.c \ - newcat.c \ - vr5000.c \ - vx1700.c \ - yaesu.c) - -# -# Code for Antenna Rotators: -# -hamlib_C_SRC += $(addprefix rotators/, \ - amsat/if100.c \ - ars/ars.c \ - celestron/celestron.c \ - cnctrk/cnctrk.c \ - easycomm/easycomm.c \ - ether6/ether6.c \ - fodtrack/fodtrack.c \ - heathkit/hd1780.c \ - ioptron/rot_ioptron.c \ - m2/rc2800.c \ - meade/meade.c \ - prosistel/prosistel.c \ - rotorez/rotorez.c \ - sartek/sartek.c \ - satel/satel.c \ - spid/spid.c \ - ts7400/ts7400.c) - -hamlib_C_SRC += $(addprefix rotators/gs232a/, \ - gs232.c \ - gs232a.c \ - gs232b.c) - -hamlib_C_SRC += $(addprefix amplifiers/elecraft/, \ - kpa.c \ - kpa1500.c) - -# -# Untested. -# -ifeq ($(USE_LIBINDI),1) - VPATH += $(LIBINDI_ROOT)/libs/indibase - - CFLAGS += -DHAVE_LIBINDI=1 \ - -DHAVE_INDIBASE_LAYOUT=1 \ - -I$(LIBINDI_ROOT) \ - -I$(LIBINDI_ROOT)/libs \ - -I$(LIBINDI_ROOT)/../zlib - - hamlib_C_SRC += rotators/indi/indi.c - hamlib_CPP_SRC = rotators/indi/indi_wrapper.cpp \ - $(addprefix $(LIBINDI_ROOT)/libs/indibase/, \ - basedevice.cpp \ - indiproperty.cpp) -endif - -ifeq ($(USE_GNURADIO),1) - VPATH += extra/gnuradio - CFLAGS += -I./extra/gnuradio -I$(GNURADIO_ROOT)/include - - hamlib_C_SRC += $(addprefix extra/gnuradio/, \ - gr.c \ - graudio.c \ - mc4020.c) - - hamlib_CC_SRC += gnuradio/gnuradio.cc -endif - -# -# Various support code for Hamlib's internal use: -# -hamlib_misc_SRC = lib/termios.c \ - lib/win-misc.c \ - tests/sprintflst.c - -ifneq ($(CC),gcc) - hamlib_misc_SRC += $(addprefix lib/, \ - getopt_long.c \ - gettimeofday.c \ - usleep.c) -endif - -# -# .cc sources for $(Hamlib++_DLL)': -# -hamlib++_SRC = $(addprefix c++/, \ - ampclass.cc \ - rigclass.cc \ - rotclass.cc) - -# -# .c sources for various programs: -# -ampctl_SRC = $(addprefix tests/, \ - ampctl.c \ - ampctl_parse.c \ - dumpcaps_amp.c) - -ampctld_SRC = $(addprefix tests/, \ - ampctld.c \ - ampctl_parse.c \ - dumpcaps_amp.c) - -rigctlcom_SRC = $(addprefix tests/, \ - dumpcaps.c \ - rigctlcom.c \ - rigctl_parse.c) - -rigctl_SRC = $(addprefix tests/, \ - dumpcaps.c \ - dumpcaps_rot.c \ - rigctl.c \ - rigctl_parse.c) - -rigctld_SRC = $(addprefix tests/, \ - dumpcaps.c \ - dumpcaps_rot.c \ - rigctld.c \ - rigctl_parse.c) - -rigmem_SRC = $(addprefix tests/, \ - rigmem.c \ - memcsv.c \ - memload.c \ - memsave.c) - -rotctl_SRC = $(addprefix tests/, \ - rotctl.c \ - rotctl_parse.c \ - dumpcaps.c \ - dumpcaps_rot.c) - -rotctld_SRC = $(addprefix tests/, \ - rotctld.c \ - rotctl_parse.c \ - dumpcaps.c \ - dumpcaps_rot.c) - -hamlib_C_OBJ = $(call c_to_obj, $(hamlib_C_SRC)) -hamlib_CC_OBJ = $(call cc_to_obj, $(hamlib_CC_SRC)) -hamlib_CPP_OBJ = $(call cpp_to_obj,$(hamlib_CPP_SRC)) -hamlib++_OBJ = $(call cc_to_obj, $(hamlib++_SRC)) - -hamlib_misc_OBJ = $(call c_to_obj, $(hamlib_misc_SRC)) -ampctl_OBJ = $(call c_to_obj, $(ampctl_SRC)) -ampctld_OBJ = $(call c_to_obj, $(ampctld_SRC)) -rigctlcom_OBJ = $(call c_to_obj, $(rigctlcom_SRC)) -rigctl_OBJ = $(call c_to_obj, $(rigctl_SRC)) -rigctld_OBJ = $(call c_to_obj, $(rigctld_SRC)) -rigmatrix_OBJ = $(call c_to_obj, tests/rigmatrix.c) -rigmem_OBJ = $(call c_to_obj, $(rigmem_SRC)) -rotctl_OBJ = $(call c_to_obj, $(rotctl_SRC)) -rotctld_OBJ = $(call c_to_obj, $(rotctld_SRC)) - -hamlib_i = $(call c_to_i, $(hamlib_C_SRC)) -hamlib++_i = $(call cc_to_i, $(hamlib++_SRC)) - -$(hamlib_C_OBJ) \ -$(hamlib++_OBJ) \ -$(hamlib_i) \ -$(hamlib++_i): EXTRA_CFLAGS = -DIN_HAMLIB - -$(hamlib++_OBJ) \ -$(hamlib++_i): EXTRA_CFLAGS += -DDLL_EXPORT - -all_test_OBJ = $(addprefix $(OBJ_DIR)/, \ - dumpmem.$(O) \ - example.$(O) \ - listrigs.$(O) \ - rig_bench.$(O) \ - rigsmtr.$(O) \ - rigswr.$(O) \ - simyaesu.$(O) \ - testcpp.$(O) \ - testfreq.$(O) \ - testbcd.$(O) \ - testfreq.$(O) \ - testloc.$(O) \ - testrig.$(O) \ - testrigcaps.$(O) \ - testrigopen.$(O) \ - testtrn.$(O)) - -all_test_OBJ += $(ampctl_OBJ) \ - $(ampctld_OBJ) \ - $(rigctlcom_OBJ) \ - $(rigctl_OBJ) \ - $(rigctld_OBJ) \ - $(rigmatrix_OBJ) \ - $(rigmem_OBJ) \ - $(rotctl_OBJ) \ - $(rotctld_OBJ) \ - -all_test_I = $(notdir $(all_test_OBJ:.$(O)=.i)) - -$(all_test_OBJ) $(all_test_I): EXTRA_CFLAGS = $(PROG_CFLAGS) - -.SECONDARY: $(all_test_OBJ) - -GENERATED = config.h \ - tests/hamlibdatetime.h - -ifneq ($(CC),gcc) - GENERATED += $(addprefix $(OBJ_DIR)/, \ - unistd.h \ - termios.h \ - strings.h \ - sys/time.h \ - sys/ioctl.h) -endif - -all: $(OBJ_DIR) $(OBJ_DIR)/sys $(GENERATED) rm_elecraft $(TARGETS) programs epilogue - -$(OBJ_DIR) $(OBJ_DIR)/sys: - - $(MKDIR) $@ - -# -# This is a 0-byte file that messes with 'rigs/kenwood/elecraft.c' -# -rm_elecraft: - rm -f amplifiers/elecraft/elecraft.c - -epilogue: - $(call white_message, Welcome to $(Hamlib_DLL) and $(Hamlib++_DLL) (CPU=$(CPU)).) - $(call green_message, You could also do a 'make -f $(THIS_FILE) [doxy_docs | py_module | lua_module]'.\n) - -programs: $(GENERATED) $(TESTS_PROGS) - -$(hamlib_misc_OBJ): EXTRA_CFLAGS += -DIN_HAMLIB_MISC_LIB - -$(misc_LIB): $(hamlib_misc_OBJ) - $(call create_lib, $@, $^) - -$(Hamlib_STAT_LIB): $(hamlib_C_OBJ) $(hamlib_CC_OBJ) $(hamlib_CPP_OBJ) - $(call create_lib, $@, $^) - -$(Hamlib_IMP_LIB): $(Hamlib_DLL) -$(Hamlib++_IMP_LIB): $(Hamlib++_DLL) - -$(Hamlib_DLL): $(OBJ_DIR)/Hamlib.def $(Hamlib_STAT_LIB) $(misc_LIB) $(OBJ_DIR)/Hamlib.res - $(call link_DLL, $@, $(Hamlib_IMP_LIB), $(call select,,-def:)$^ $(EX_LIBS)) - -$(Hamlib++_DLL): $(hamlib++_OBJ) $(Hamlib_IMP_LIB) $(OBJ_DIR)/Hamlib++.res - $(call link_DLL, $@, $(Hamlib++_IMP_LIB), $^ $(call select, -lstdc++,) $(EX_LIBS)) - -# -# For MSVC only. -# -ifeq ($(USE_MP_COMPILE),1) - $(hamlib_C_OBJ): $(hamlib_C_SRC) | $(CC).args - $(CC) -MP @$(CC).args -DIN_HAMLIB -Fo./$(OBJ_DIR)\\ $(hamlib_C_SRC) - @echo -endif - -$(CC).args: $(THIS_FILE) - $(call green_message, Creating $@) - $(call create_resp_file, $@, $(CFLAGS) -c) - -# -# For 'testcpp.exe': -# -testcpp.exe: $(OBJ_DIR)/testcpp.$(O) $(CPP_PROG_LIBS) - $(call link_EXE, $@, $^ $(call select, -lstdc++,) $(EX_LIBS)) - -# -# For '$(TESTS_PROGS)': -# -$(OBJ_DIR)/%.$(O): tests/%.c | $(CC).args - $(call Compile, $<, $@) - -ampctl.exe: $(ampctl_OBJ) $(C_PROG_LIBS) - $(call link_EXE, $@, $^ $(PROG_LIBS)) - -ampctld.exe: $(ampctld_OBJ) $(C_PROG_LIBS) - $(call link_EXE, $@, $^ $(PROG_LIBS)) - -rigctlcom.exe: $(rigctlcom_OBJ) $(C_PROG_LIBS) - $(call link_EXE, $@, $^ $(PROG_LIBS)) - -rigctl.exe: $(rigctl_OBJ) $(C_PROG_LIBS) - $(call link_EXE, $@, $^ $(PROG_LIBS)) - -rigctld.exe: $(rigctld_OBJ) $(C_PROG_LIBS) - $(call link_EXE, $@, $^ $(PROG_LIBS)) - -rigmem.exe: $(rigmem_OBJ) $(C_PROG_LIBS) $(XML2_LIB) - $(call link_EXE, $@, $^ $(PROG_LIBS)) - -rotctl.exe: $(rotctl_OBJ) $(C_PROG_LIBS) - $(call link_EXE, $@, $^ $(PROG_LIBS)) - -rotctld.exe: $(rotctld_OBJ) $(C_PROG_LIBS) - $(call link_EXE, $@, $^ $(PROG_LIBS)) - -# -# I do not have a GD.lib for MSVC/clang. Use the dynamic MinGW version instead. -# Copy it's .DLL here to avoid another DLL-hell. -# -rigmatrix.exe: $(rigmatrix_OBJ) $(C_PROG_LIBS) $(LIBGD_ROOT)/src/libgd.dll.a - $(call link_EXE, $@, $^ $(PROG_LIBS)) - $(COPY) $(LIBGD_ROOT)/src/bgd.dll . - -# -# For all other simple test-programs: -# -%.exe: $(OBJ_DIR)/%.$(O) $(C_PROG_LIBS) - $(call link_EXE, $@, $^ $(PROG_LIBS)) - -# -# For '$(hamlib_C_SRC)' and '$(hamlib_CC_SRC)': -# -$(OBJ_DIR)/%.$(O): %.c | $(CC).args - $(call Compile, $<, $@) - -$(OBJ_DIR)/%.$(O): %.cc | $(CC).args - $(call Compile, $<, $@) - -$(OBJ_DIR)/%.$(O): %.cpp | $(CC).args - $(call Compile, $<, $@) - -# -# For '$(hamlib_misc_SRC)' since 'lib' is not in 'VPATH' due to 'lib/dummy.c'. -# -$(OBJ_DIR)/%.$(O): lib/%.c | $(CC).args - $(call Compile, $<, $@) - -clean: $(CC)_clean - rm -f $(GENERATED) $(OBJ_DIR)/*.{$(O),rc,res,def} \ - $(TESTS_PROGS:.exe=.map) cl.args clang-cl.args gcc.args lib.args cpp_filter.py - - $(RMDIR) $(OBJ_DIR)/sys $(OBJ_DIR) - -gcc_clean: ; - -cl_clean clang-cl_clean: - rm -f link.tmp vc1*.pdb $(Hamlib_DLL:.dll=.pdb) $(Hamlib++_DLL:.dll=.pdb) \ - $(TESTS_PROGS:.exe=.pdb) $(TESTS_PROGS:.exe=.exp) $(TESTS_PROGS:.exe=.lib) - -vclean realclean: clean doc_clean py_clean lua_clean - rm -f $(TARGETS) $(Hamlib_DLL:.dll=.map) $(Hamlib++_DLL:.dll=.map) \ - $(TESTS_PROGS) bgd.dll .depend.Windows - -config.h: $(THIS_FILE) - $(call Generate, $@, //) - $(file >> $@,#ifndef _CONFIG_H) - $(file >> $@,#define _CONFIG_H) - $(file >> $@,$(CONFIG_H)) - $(file >> $@,#endif /* _CONFIG_H */) - -tests/hamlibdatetime.h: $(THIS_FILE) - $(call Generate, $@, //) - $(file >> $@, #define HAMLIBDATETIME "__DATE__") - -$(OBJ_DIR)/unistd.h: $(THIS_FILE) - $(call Generate_fake, $@, #include "lib/getopt.h") - -$(OBJ_DIR)/sys/time.h: $(THIS_FILE) - $(call Generate_fake, $@) - -$(OBJ_DIR)/strings.h: $(THIS_FILE) - $(call Generate_fake, $@, #include ) - -$(OBJ_DIR)/termios.h: $(THIS_FILE) - $(call Generate_fake, $@) - -$(OBJ_DIR)/sys/ioctl.h: $(THIS_FILE) - $(call Generate_fake, $@) - -%.i: %.c FORCE $(GENERATED) cpp_filter.py $(CC).args - $(call Cxx_preprocess, $@, $<, c) - -%.i: lib/%.c FORCE $(GENERATED) cpp_filter.py $(CC).args - $(call Cxx_preprocess, $@, $<, c) - -%.i: $(OBJ_DIR)/%.c FORCE $(GENERATED) cpp_filter.py $(CC).args - $(call Cxx_preprocess, $@, $<, c) - -%.i: %.cc FORCE $(GENERATED) cpp_filter.py $(CC).args - $(call Cxx_preprocess, $@, $<, cpp) - -%.i: %.cpp FORCE $(GENERATED) cpp_filter.py $(CC).args - $(call Cxx_preprocess, $@, $<, cpp) - -FORCE: - -# -# Create API documentation in 'doc/html/index.html': -# -doxy_docs: doc/Hamlib.cfg - cd doc ; \ - doxygen Hamlib.cfg 2> doxygen.log ; \ - cd html ; \ - hhc index.hhp ; \ - mv -f Hamlib.chm .. - @echo 'Doxygen done. Look in "doc/doxygen.log" for messages.' - -doc/Hamlib.cfg: $(THIS_FILE) - $(call Generate, $@, #) - $(file >> $@,$(hamlib_CFG)) - -doc_clean: - rm -f doc/doxygen.log doc/hamlib.cfg doc/Hamlib.chm - rm -fR doc/html/* - - rmdir doc/html - -# -# Python 2/3 module stuff. -# -# Get the Python prefix via the 'py -x' launcher. -# The Python major version (2 or 3) is simply '$(USE_PY_BINDING)'. -# -PY_ROOT = $(subst \,/,$(shell py -$(USE_PY_BINDING) -c "import sys; print(sys.prefix)")) - -ifeq ($(USE_PY_BINDING),2) - PY_WRAPPER_C = $(OBJ_DIR)/HamlibPy2_wrap.c - PY_WRAPPER_O = $(OBJ_DIR)/HamlibPy2_wrap.$(O) - -else ifeq ($(USE_PY_BINDING),3) - PY_WRAPPER_C = $(OBJ_DIR)/HamlibPy3_wrap.c - PY_WRAPPER_O = $(OBJ_DIR)/HamlibPy3_wrap.$(O) -endif - -ifeq ($(CC),gcc) - PYD_LIBS = $(PY_ROOT)/libs/libpython$(USE_PY_BINDING)*.a -endif - -_Hamlib_PYD_deps = $(PY_WRAPPER_O) $(OBJ_DIR)/HamlibPy.res $(Hamlib_IMP_LIB) -PY_CFLAGS = -I$(PY_ROOT)/include -DNO_SSIZE_T -DDLL_EXPORT - -ifeq ($(USE_PY_BINDING),0) - py_module: - $(error Use 'USE_PY_BINDING=[2|3]'.) - -else - py_module: _Hamlib.pyd $(OBJ_DIR)/Hamlib.py $(Hamlib_DLL) - $(COPY) $^ $(PY_ROOT)/Lib/site-packages -ifneq ($(CC),gcc) - $(COPY) _Hamlib.pdb $(PY_ROOT)/Lib/site-packages -endif -endif - -$(OBJ_DIR)/Hamlib.py: $(PY_WRAPPER_C) - -SWIG_FLAGS = -I./include -I./bindings # -macroerrors - -$(PY_WRAPPER_C): bindings/Hamlib.swg include/hamlib/rig.h - $(call green_message, Generating $@ and $(OBJ_DIR)/Hamlib.py) - swig -python $(SWIG_FLAGS) -o $@ $< - -$(PY_WRAPPER_O) $(PY_WRAPPER_C:.c=.i): EXTRA_CFLAGS += $(PY_CFLAGS) - -ifeq ($(USE_PY_BINDING),3) - _Hamlib.pyd: $(_Hamlib_PYD_deps) - $(call link_PYD, $@, $^ $(PYD_LIBS), PyInit__Hamlib) - -else ifeq ($(USE_PY_BINDING),2) - _Hamlib.pyd: $(_Hamlib_PYD_deps) - $(call link_PYD, $@, $^ $(PYD_LIBS), init_Hamlib) -endif - -py_JUNK = $(OBJ_DIR)/Hamlib.py \ - _Hamlib.pyd \ - _Hamlib.map \ - _Hamlib.pdb \ - _Hamlib.exp \ - _Hamlib.lib \ - $(PY_WRAPPER_C) \ - $(OBJ_DIR)/HamlibPy.res - -py_clean: - rm -f $(py_JUNK) - -# -# Lua module stuff. Only LuaJIT seems to be stable. -# -# The 'HamlibLua.dll' exports only 'luaopen_Hamliblua()' -# -lua_module: HamlibLua.dll - $(call green_message, Remember to update your 'LUA_CPATH' for 'HamlibLua.dll'. And your 'PATH' for the needed '$(Hamlib_DLL)') -# $(COPY) $^ $(some_where_on_PATH_and_LUA_CPATH) - -$(OBJ_DIR)/HamlibLua_wrap.c: bindings/Hamlib.swg - $(call green_message, Generating $@) - swig -lua $(SWIG_FLAGS) -o $@ $< - -$(OBJ_DIR)/HamlibLua_wrap.$(O) HamlibLua_wrap.i: EXTRA_CFLAGS = -I$(LUA_ROOT)/src -DDLL_EXPORT - -# -# The imp-lib 'HamlibLua.$(A)' is not needed for anything. -# -HamlibLua.dll: $(OBJ_DIR)/HamlibLua_wrap.$(O) $(Hamlib_IMP_LIB) $(OBJ_DIR)/HamlibLua.res - $(call link_DLL, $@, HamlibLua.$(A), $^ $(LUA_LIB)) - -lua_JUNK = HamlibLua.dll \ - HamlibLua.$(A) \ - HamlibLua.map \ - HamlibLua.pdb \ - HamlibLua.exp \ - $(OBJ_DIR)/HamlibLua_wrap.c - -lua_clean: - rm -f $(lua_JUNK) - -$(OBJ_DIR)/Hamlib.rc: $(THIS_FILE) - $(call make_rc, $@, $(Hamlib_DLL), "Ham Radio Control Library for C", VFT_DLL) - -$(OBJ_DIR)/Hamlib++.rc: $(THIS_FILE) - $(call make_rc, $@, $(Hamlib++_DLL), "Ham Radio Control Library for C++", VFT_DLL) - -$(OBJ_DIR)/HamlibPy.rc: $(THIS_FILE) - $(call make_rc, $@, _Hamlib.pyd, "Hamlib module for Python v$(USE_PY_BINDING).x", VFT_DLL) - -$(OBJ_DIR)/HamlibLua.rc: $(THIS_FILE) - $(call make_rc, $@, HamlibLua.dll, "Hamlib module for LuaJIT", VFT_DLL) - -$(OBJ_DIR)/%.res: $(OBJ_DIR)/%.rc config.h - $(call make_res, $<, $@) - -# -# Create an export definition file by using 'nm $(Hamlib_STAT_LIB)' to -# extract all the public functions; -# i.e. ' T ' symbols are "Text symbol, global". See 'man nm' for details. -# -# On 'CPU=x86', all symbols have a leading '_'. Drop these. -# -# Ignore symbols matching ' Wspiapi.*' and ' _.*'. -# -# Append the DATA symbols manually. -# -ifeq ($(CPU),x86) - uscore := _ -endif - -# -# Export all code symbols. -# -extract_code_syms = nm $(2) | grep ' T $(uscore)[a-zA-Z0-9_]*' | \ - sed -e 's@^.* $(uscore)@ @g' \ - -e 's@ Wspiapi.*@@g' \ - -e 's@ _.*@@g' | sort | uniq >> $(1) - -define Hamlib_DATA - hamlib_version DATA - hamlib_copyright DATA - hamlib_version2 DATA - hamlib_copyright2 DATA - debugmsgsave DATA - debugmsgsave2 DATA -endef - -export Hamlib_DATA - -# -# We export stuff using this generated .def-file: -# -$(OBJ_DIR)/Hamlib.def: $(Hamlib_STAT_LIB) $(THIS_FILE) - $(call Generate, $@, ;) - $(file >> $@, LIBRARY $(Hamlib_DLL)) - $(file >> $@, EXPORTS) - $(call extract_code_syms, $@, $<) - @echo "$$Hamlib_DATA" >> $@ - -# -# GNU-make macros. -# -# This assumes you have a Cygwin/Msys 'echo' with colour support. -# -green_message = @echo -e "\e[1;32m$(strip $(1))\e[0m" -white_message = @echo -e "\e[1;37m$(strip $(1))\e[0m" - -# -# .c compile macro. -# $(1): the .c file (and extra CFLAGS) -# $(2): the .$(O) file -# -# Do not use '@gcc.args' since some old gcc gets confused by it!? -# -ifeq ($(CC),gcc) - define Compile - $(CC) @$(CC).args $(EXTRA_CFLAGS) -o $(2) $(1) - @echo - endef -else - define Compile - $(CC) @$(CC).args $(EXTRA_CFLAGS) -Fo$(strip $(2)) $(1) - @echo - endef -endif - -# -# Create an EXE from objects. -# arg1, $(1): The .exe file. -# arg2, $(2): The .$(O) file(s), extra args and libs. -# -define link_EXE - $(call green_message, Linking $(1)) - $(call link_EXE_$(CC), $(1), $(2)) - @echo -endef - -define link_EXE_cl - link $(LDFLAGS) -out:$(strip $(1)) $(2) > link.tmp - @cat link.tmp >> $(1:.exe=.map) -endef - -link_EXE_clang-cl = $(call link_EXE_cl, $(1), $(2)) -link_EXE_gcc = $(CC) $(LDFLAGS) -o $(1) $(2) > $(1:.exe=.map) - -# -# Macro to create a DLL + import-lib from objects. -# arg1, $(1): The .dll file. -# arg2, $(2): The import-lib. -# arg3, $(3): The .$(O) file(s), extra args and libs. -# -define link_DLL - $(call green_message, Linking $(1)) - $(call link_DLL_$(CC), $(1), $(2), $(3)) - @echo -endef - -define link_DLL_cl - link -dll $(LDFLAGS) -out:$(strip $(1)) -implib:$(strip $(2)) $(3) > link.tmp - @cat link.tmp >> $(1:.dll=.map) - @rm -f $(2:.lib=.exp) -endef - -link_DLL_clang-cl = $(call link_DLL_cl, $(1), $(2), $(3)) -link_DLL_gcc = $(CC) -shared $(LDFLAGS) -o $(1) -Wl,--out-implib,$(strip $(2)) $(3) > $(1:.dll=.map) - -# -# Macro to create a Python .PYD-module from objects. -# arg1, $(1): The .pyd file. -# arg2, $(2): The .$(O) file(s), extra args and libs. -# arg3, $(3): The name of the Python init function. -# Not used by MinGW. It exports the 'SWIGEXPORT SWIG_init()' function -# in the 'HamlibPyX_wrap.c' code. -# -define link_PYD - $(call green_message, Linking $(1)) - $(call link_PYD_$(CC), $(1), $(2), $(3)) - @echo -endef - -define link_PYD_cl - link -dll $(LDFLAGS) -libpath:$(PY_ROOT)/libs -export:$(strip $(3)) -out:$(strip $(1)) $(2) > link.tmp - @cat link.tmp >> $(1:.pyd=.map) - @rm -f $(1:.pyd=.exp) $(1:.pyd=.lib) -endef - -link_PYD_clang-cl = $(call link_PYD_cl, $(1), $(2), $(3)) -link_PYD_gcc = $(CC) -shared $(LDFLAGS) -o $(1) $(2) > $(1:.pyd=.map) - -define make_res - $(call green_message, Creating $(2)) - $(call make_res_$(CC), $(1), $(2)) - @echo -endef - -make_res_cl = rc -nologo -D_MSC_VER -Fo./$(strip $(2)) $(1) -make_res_clang-cl = rc -nologo -D__clang__ -Fo./$(strip $(2)) $(1) -make_res_gcc = windres -D__MINGW32__ -O COFF -I. $(RCFLAGS) -o $(2) -i $(1) - -# -# static .lib creation macro: -# arg1: $(1): the .$(A) file. -# arg2: $(2): the .$(O) files to put in it. -# -define create_lib - @rm -f $(1) - $(call green_message, Creating $(1)) - $(call create_resp_file, lib.args, $(2)) - $(call create_lib_$(CC), $(1)) - @echo -endef - -create_lib_cl = lib -nologo -out:$(strip $(1)) @lib.args -create_lib_clang-cl = $(call create_lib_cl, $(1)) -create_lib_gcc = ar rs $(1) @lib.args - -# -# Create a response file $(1). -# One word from $(2) per line. -# -define create_resp_file - $(file > $(1)) - $(foreach f, $(2), $(file >> $(1),$(strip $(f))) ) -endef - -define Warning - $(1) - $(1) DO NOT EDIT! This file was automatically generated - $(1) from $(realpath $(THIS_FILE)) at $(DATE). - $(1) Edit that file instead. - $(1) -endef - -define Generate - $(call green_message, Generating $(1)) - $(file > $(1),$(call Warning,$(strip $(2)))) -endef - -define Generate_fake - $(call Generate, $(1), //) - $(file >> $(1), // fake <$(strip $(1))> for MSVC/clang-cl) - $(file >> $(1), $(2)) -endef - -define CONFIG_H - #define ABI_VERSION $(ABI_VER) - - #if defined(IN_HAMLIB) && defined(DLL_EXPORT) && !defined(__cplusplus) - #error "Do not use '-DDLL_EXPORT' since we use a .def-file to control the exports." - #endif - - #ifndef WIN32 - #define WIN32 1 - #endif - - #if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0601) - #undef _WIN32_WINNT - #define _WIN32_WINNT 0x0601 - #endif - - #define WIN32_LEAN_AND_MEAN - - /* - * MSVC/clang-cl: - * Except for .cc code (the 'LIBUSB_ROOT' code that needs Boost), and - * while doing 'make depend', pretend we are MinGW. - */ - #if defined(_MSC_VER) - #define _CRT_SECURE_NO_WARNINGS - #define _CRT_NONSTDC_NO_WARNINGS - - struct timeval; /* Forward */ - struct timezone; /* Forward */ - - extern int gettimeofday (struct timeval *, struct timezone *); - #else - /* - * MinGW section: - */ - #define HAVE_PTHREAD 1 - #define HAVE_UNISTD_H 1 - #define HAVE_SELECT 1 - #define HAVE_SSLEEP 1 - #define HAVE_SYS_TIME_H 1 - #define HAVE_STRTOK_R 1 - - #include /* 'gettimeofday()' */ - #endif - - #include - #include /* 'struct timeval' etc. */ - #include /* 'gai_strerror()' etc. */ - #include /* 'struct timespec' etc. */ - #include /* 'open()', 'close()' etc. */ - #include /* 'int64_t' etc. */ - #include /* 'getpid()' etc. */ - #include /* 'alloca()' etc. */ - - #define HAVE_SYS_TYPES_H 1 - #define HAVE_INTTYPES_H 1 - #define HAVE_WINRADIO 1 - #define HAVE_WINDOWS_H 1 - #define HAVE_WINBASE_H 1 - #define HAVE_WS2TCPIP_H 1 - #define HAVE_WSPIAPI_H 1 - #define HAVE_GETADDRINFO 1 - #define HAVE_DECL_GAI_STRERROR 1 - #define HAVE_SELECT 1 - #define HAVE_SSLEEP 1 - #define HAVE_SLEEP 1 - - #if defined(_MSC_VER) - #ifndef __clang__ - #define __attribute__(x) - #endif - - #define strncasecmp(s1, s2, n) _strnicmp (s1, s2, n) - #define sleep(s) Sleep (1000*(s)) - - extern int usleep (unsigned long usec); - #endif - - /* No point in defining this - */ -//#define HAVE_SIGNAL 1 - - /* Since 'WIN32_LEAN_AND_MEAN' is defined, this header is - * not included in . So do it explicitly, but it is - * only needed in 'rigs/winradio/g313-win.c'. - */ - #include - - #define _TIMEVAL_DEFINED - #define _TIMESPEC_DEFINED - #define _USE_MATH_DEFINES /* 'M_PI' etc. */ - - #if !defined(_SSIZE_T_DEFINED) && !defined(NO_SSIZE_T) - #include - - typedef SSIZE_T ssize_t; - #define _SSIZE_T_DEFINED - #endif - - #if !defined(_UINT_DEFINED) - typedef unsigned int uint; - - #define _UINT_DEFINED - #endif - - #if !defined(_MODE_T_DEFINED) && !defined(__MINGW32__) - typedef unsigned short mode_t; - #define _MODE_T_DEFINED - #endif - - #if !defined(timersub) - #define timersub(a, b, result) do { \ - (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ - (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ - if ((result)->tv_usec < 0) { \ - --(result)->tv_sec; \ - (result)->tv_usec += 1000000; \ - } \ - } while (0) - #endif - - /* Hack for using libusrp dynamically (untested) - */ - #ifdef HAVE_USRP - #define LIBUSRP_SPEC __declspec(dllimport) - #endif - - #define PACKAGE_VERSION "$(VERSION)" - - /* Functions in 'lib/win-misc.c': - */ - #ifndef CLOCK_REALTIME - #define CLOCK_REALTIME 0 - #endif - - extern int clock_gettime (int clock_id, struct timespec *ts); - - #ifndef HAVE_STRTOK_R - extern char *strtok_r (char *s, const char *delim, char **ptrptr); - #endif - -endef - -# -# The contents of 'doc/Hamlib.cfg' used by Doxygen. -# -define hamlib_CFG - # - # All paths are relative to './doc'. - # - PROJECT_NAME = "Hamlib" - PROJECT_NUMBER = $(VERSION) - PROJECT_LOGO = hamlib.png - OUTPUT_DIRECTORY = . - PREDEFINED = __GNUC__ DOXYGEN DOC_HIDDEN - OUTPUT_LANGUAGE = English - GENERATE_HTML = YES - GENERATE_LATEX = NO - GENERATE_RTF = NO - GENERATE_MAN = NO - MAN_EXTENSION = .3 - TAB_SIZE = 4 - CASE_SENSE_NAMES = NO - FULL_PATH_NAMES = NO -# ALIASES = \RETURNFUNC{1}="\b RETURNFUNC(\1)" \ - - INPUT = index.doxygen ../src/ ../include/hamlib/ - INCLUDE_PATH = ../include/ - EXAMPLE_PATH = .. \ - ../tests/testrig.c \ - ../scripts/README.build-Windows \ - ../scripts/build-w32.sh \ - ../scripts/build-w64.sh - - EXCLUDE = ../src/amp_conf.h \ - ../include/hamlib/ampclass.h \ - ../include/hamlib/rotclass.h - - QUIET = YES - HTML_EXTRA_STYLESHEET = hamlib.css - HTML_FOOTER = footer.html - - EXTRACT_ALL = NO - EXTRACT_STATIC = NO - HIDE_UNDOC_MEMBERS = NO - SHOW_INCLUDE_FILES = YES - INHERIT_DOCS = YES - ENABLED_SECTIONS = "" - JAVADOC_AUTOBRIEF = NO - OPTIMIZE_OUTPUT_FOR_C = YES - MAN_LINKS = NO - MACRO_EXPANSION = YES - SOURCE_BROWSER = YES - STRIP_CODE_COMMENTS = NO - GENERATE_HTMLHELP = YES - CHM_FILE = Hamlib.chm - SEARCHENGINE = NO -endef - -define RC_COMMON - #include - - #if defined(__clang__) - #define RC_BUILDER "clang-cl" - - #elif defined(_MSC_VER) - #define RC_BUILDER "MSVC" - - #elif defined(__MINGW32__) - #define RC_BUILDER "MinGW" - - #else - #error "Who are you?" - #endif - - #ifndef RC_DESCRIPTION - #error "Add a #define RC_DESCRIPTION .." - #endif - - #ifndef RC_FILENAME - #error "Add a #define RC_FILENAME .." - #endif - - #ifndef RC_FILETYPE - #define RC_FILETYPE VFT_DLL - #endif - - #define RC_VERSION $(MAJOR_VER),$(MINOR_VER),0,0 - #define RC_VER_STRING "$(VERSION).0.0 (" RC_BUILDER ", $(CPU))" - - VS_VERSION_INFO VERSIONINFO - FILEVERSION RC_VERSION - PRODUCTVERSION RC_VERSION - FILEFLAGSMASK 0x3fL - FILEOS VOS__WINDOWS32 - FILETYPE RC_FILETYPE - FILEFLAGS 0x0L - FILESUBTYPE 0x0L - - BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "https://hamlib.github.io/" - VALUE "FileDescription", RC_DESCRIPTION - VALUE "FileVersion", RC_VER_STRING - VALUE "InternalName", "Hamlib, ABI ver. $(ABI_VER)" - VALUE "LegalCopyright", "GNU General Public License v2.0" - VALUE "OriginalFilename", RC_FILENAME - VALUE "ProductName", RC_FILENAME - VALUE "ProductVersion", RC_VER_STRING - VALUE "PrivateBuild", "The privat build of ." - VALUE "SpecialBuild", "" - VALUE "Comments", "Built on $(DATE)" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END - END -endef - -define make_rc - $(call Generate, $(1), //) - $(file >> $@, #define RC_FILENAME "$(strip $(2))") - $(file >> $@, #define RC_DESCRIPTION $(3)) - $(file >> $@, #define RC_FILETYPE $(4)) - $(file >> $@, $(RC_COMMON)) -endef - -ifeq ($(USE_ASTYLE),1) - define Cxx_preprocess - $(file > $(1),/* The preprocessed and AStyle formatter output of '$(strip $(2))':) - $(file >> $(1), * $(CC) -E) - @$(foreach f, $(CFLAGS) $(EXTRA_CFLAGS), $(file >> $(1), * $(f))) - $(file >> $(1), *---------------------------------------------------------) - $(file >> $(1), */) - $(CC) -E @$(CC).args $(EXTRA_CFLAGS) $(2) | $(PYTHON) cpp_filter.py | astyle >> $(1) - endef - -else ifeq ($(USE_CLANG_FORMAT),1) - define Cxx_preprocess - $(file > $(1),/* The preprocessed and clang-formatted output of '$(strip $(2))':) - $(file >> $(1), * $(CC) -E) - @$(foreach f, $(CFLAGS) $(EXTRA_CFLAGS), $(file >> $(1), * $(f))) - $(file >> $(1), *---------------------------------------------------------) - $(file >> $(1), */) - $(CC) -E @$(CC).args $(EXTRA_CFLAGS) $(2) | $(PYTHON) cpp_filter.py | clang-format --assume-filename=$(strip $(3)) >> $(1) - endef - -else - define Cxx_preprocess - $(file > $(1),/* The raw preprocessed output of '$(strip $(2))':) - $(file >> $(1), * $(CC) -E) - @$(foreach f, $(CFLAGS) $(EXTRA_CFLAGS), $(file >> $(1), * $(f))) - $(file >> $(1), *---------------------------------------------------------) - $(file >> $(1), */) - $(CC) -E @$(CC).args $(EXTRA_CFLAGS) $(2) | $(PYTHON) cpp_filter.py >> $(1) - endef -endif - -define CPP_FILTER_PY - import sys, os - - try: - import ntpath - except ImportError as e: - print ("Failed to import ntpath: %s" % e) - sys.exit(1) - - def _win32_abspath (path): - path = ntpath.abspath (path) - return path.replace ('\\', '/') - - def skip_cwd (s1, s2): - ''' Skip the leading part that is in common with s1 and s2 - ''' - i = 0 - while i < len(s1) and s1[i] == s2[i]: - i += 1 - return s2[i:] - - cwd = _win32_abspath (os.getcwd()) + '/' - - last_line = '??' - last_fname = '??' - empty_lines = 0 - - while True: - line = sys.stdin.readline() - if not line: - break - if line.startswith('\n') or line.startswith('\r'): - empty_lines += 1 - continue - - line = line.replace ("\\\\", "/") - fname = None - quote = line.find ('\"') - - if line.startswith ("#line ") and quote > 0: - fname = _win32_abspath (line[quote:]) - last_fname = fname - - if line.strip() != '' and last_line != '': - if fname is None or fname != last_fname: - print (line, end="") - - if line.strip() == '}': # Print a newline after a function - print ("") - - last_line = line - - if empty_lines > 0: - sys.stderr.write ("Removed %d empty lines.\n" % empty_lines) - -endef - -cpp_filter.py: $(THIS_FILE) - $(call Generate, $@, #) - $(file >> $@,from __future__ import print_function) - $(file >> $@,if 1:) - $(file >> $@,$(CPP_FILTER_PY)) - -# -# Use gcc to create a '.depend.Windows' -# -DEP_CFLAGS = -MM --include config.h $(filter -I% -D%, $(CFLAGS)) -DEP_REPLACE = sed -e 's@\(.*\)\.o: @\n$$(OBJ_DIR)\/\1.$$(O): @' \ - -e 's@$(OBJ_DIR)/[a-z]*\.h@@g' \ - -e 's@$(OBJ_DIR)/sys/[a-z]*\.h@@g' \ - -e 's@$(LIBUSRP_ROOT)@$$(LIBUSRP_ROOT)@' - -ALL_C_SRC = $(hamlib_C_SRC) $(hamlib_misc_SRC) $(wildcard tests/*.c) -ALL_CC_SRC = $(hamlib_CC_SRC) $(hamlib++_SRC) $(hamlib_CPP_SRC) - -depend: $(OBJ_DIR) $(OBJ_DIR)/sys $(GENERATED) - $(call Generate, .depend.Windows, #) - $(call create_resp_file, depend1.args, $(DEP_CFLAGS) $(ALL_C_SRC)) - $(call create_resp_file, depend2.args, $(DEP_CFLAGS) -std=c++11 $(ALL_CC_SRC)) - gcc @depend1.args | $(DEP_REPLACE) >> .depend.Windows - gcc @depend2.args | $(DEP_REPLACE) >> .depend.Windows - rm -f depend1.args depend2.args - --include .depend.Windows - - © 2021 GitHub, Inc. - Terms - Privacy - Security - Status - Docs - - Contact GitHub - Pricing - API - Training - Blog - About -