diff --git a/Makefile b/Makefile index 9f9f002..0fd2441 100755 --- a/Makefile +++ b/Makefile @@ -30,8 +30,14 @@ endif # determine current platform BUILD_TYPE ?= debug ifeq ($(OS),Windows_NT) - OSTYPE ?= $(OS) - MACHINETYPE ?= $(PROCESSOR_ARCHITECTURE) + ifeq ($(shell uname -s | cut -d - -f 1),CYGWIN_NT) + OSTYPE ?= $(shell uname -s | cut -d - -f 1) + MACHINETYPE ?= $(shell uname -m) + build.level = $(shell date) + else + OSTYPE ?= $(OS) + MACHINETYPE ?= $(PROCESSOR_ARCHITECTURE) + endif else OSTYPE ?= $(shell uname -s) MACHINETYPE ?= $(shell uname -m) @@ -109,20 +115,41 @@ MAJOR_VERSION = 1 MINOR_VERSION = 0 VERSION = ${MAJOR_VERSION}.${MINOR_VERSION} -MQTTLIB_C_TARGET = ${blddir}/lib${MQTTLIB_C}.so.${VERSION} -MQTTLIB_CS_TARGET = ${blddir}/lib${MQTTLIB_CS}.so.${VERSION} -MQTTLIB_A_TARGET = ${blddir}/lib${MQTTLIB_A}.so.${VERSION} -MQTTLIB_AS_TARGET = ${blddir}/lib${MQTTLIB_AS}.so.${VERSION} +ifeq ($(OSTYPE),CYGWIN_NT) +MQTTLIB_C_LIBNAME = cyg${MQTTLIB_C}.dll +MQTTLIB_CS_LIBNAME = cyg${MQTTLIB_CS}.dll +MQTTLIB_A_LIBNAME = cyg${MQTTLIB_A}.dll +MQTTLIB_AS_LIBNAME = cyg${MQTTLIB_AS}.dll +else +MQTTLIB_C_LIBNAME = lib${MQTTLIB_C}.so +MQTTLIB_CS_LIBNAME = lib${MQTTLIB_CS}.so +MQTTLIB_A_LIBNAME = lib${MQTTLIB_A}.so +MQTTLIB_AS_LIBNAME = lib${MQTTLIB_AS}.so +endif + +MQTTLIB_C_TARGET = ${blddir}/${MQTTLIB_C_LIBNAME}.${VERSION} +MQTTLIB_CS_TARGET = ${blddir}/${MQTTLIB_CS_LIBNAME}.${VERSION} +MQTTLIB_A_TARGET = ${blddir}/${MQTTLIB_A_LIBNAME}.${VERSION} +MQTTLIB_AS_TARGET = ${blddir}/${MQTTLIB_AS_LIBNAME}.${VERSION} + MQTTVERSION_TARGET = ${blddir}/MQTTVersion -CCFLAGS_SO = -g -fPIC $(CFLAGS) -Os -Wall -fvisibility=hidden FLAGS_EXE = $(LDFLAGS) -I ${srcdir} -lpthread -L ${blddir} FLAGS_EXES = $(LDFLAGS) -I ${srcdir} ${START_GROUP} -lpthread -lssl -lcrypto ${END_GROUP} -L ${blddir} +ifeq ($(OSTYPE),CYGWIN_NT) +CCFLAGS_SO = -g $(CFLAGS) -Os -Wall -fvisibility=hidden +LDFLAGS_C = $(LDFLAGS) -shared -Wl,-init,$(MQTTCLIENT_INIT) -Wl,--no-whole-archive -lpthread -Wl,--export-all-symbols -Wl,--enable-auto-import +LDFLAGS_CS = $(LDFLAGS) -shared -Wl,-init,$(MQTTCLIENT_INIT) -Wl,--no-whole-archive -lpthread $(EXTRA_LIB) -lssl -lcrypto -Wl,--export-all-symbols -Wl,--enable-auto-import +LDFLAGS_A = $(LDFLAGS) -shared -Wl,-init,$(MQTTASYNC_INIT) -Wl,--no-whole-archive -lpthread -Wl,--export-all-symbols -Wl,--enable-auto-import +LDFLAGS_AS = $(LDFLAGS) -shared -Wl,-init,$(MQTTASYNC_INIT) -Wl,--no-whole-archive -lpthread $(EXTRA_LIB) -lssl -lcrypto -Wl,--export-all-symbols -Wl,--enable-auto-import +else +CCFLAGS_SO = -g -fPIC $(CFLAGS) -Os -Wall -fvisibility=hidden LDFLAGS_C = $(LDFLAGS) -shared -Wl,-init,$(MQTTCLIENT_INIT) -lpthread LDFLAGS_CS = $(LDFLAGS) -shared $(START_GROUP) -lpthread $(EXTRA_LIB) -lssl -lcrypto $(END_GROUP) -Wl,-init,$(MQTTCLIENT_INIT) LDFLAGS_A = $(LDFLAGS) -shared -Wl,-init,$(MQTTASYNC_INIT) -lpthread LDFLAGS_AS = $(LDFLAGS) -shared $(START_GROUP) -lpthread $(EXTRA_LIB) -lssl -lcrypto $(END_GROUP) -Wl,-init,$(MQTTASYNC_INIT) +endif ifeq ($(OSTYPE),Linux) @@ -135,10 +162,10 @@ END_GROUP = -Wl,--end-group EXTRA_LIB = -ldl -LDFLAGS_C += -Wl,-soname,lib$(MQTTLIB_C).so.${MAJOR_VERSION} -LDFLAGS_CS += -Wl,-soname,lib$(MQTTLIB_CS).so.${MAJOR_VERSION} -Wl,-no-whole-archive -LDFLAGS_A += -Wl,-soname,lib${MQTTLIB_A}.so.${MAJOR_VERSION} -LDFLAGS_AS += -Wl,-soname,lib${MQTTLIB_AS}.so.${MAJOR_VERSION} -Wl,-no-whole-archive +LDFLAGS_C += -Wl,-soname,${MQTTLIB_C_LIBNAME}.${MAJOR_VERSION} +LDFLAGS_CS += -Wl,-soname,${MQTTLIB_CS_LIBNAME}.${MAJOR_VERSION} -Wl,-no-whole-archive +LDFLAGS_A += -Wl,-soname,${MQTTLIB_A_LIBNAME}.${MAJOR_VERSION} +LDFLAGS_AS += -Wl,-soname,${MQTTLIB_AS_LIBNAME}.${MAJOR_VERSION} -Wl,-no-whole-archive else ifeq ($(OSTYPE),Darwin) @@ -152,11 +179,27 @@ END_GROUP = EXTRA_LIB = -ldl CCFLAGS_SO += -Wno-deprecated-declarations -DUSE_NAMED_SEMAPHORES -LDFLAGS_C += -Wl,-install_name,lib$(MQTTLIB_C).so.${MAJOR_VERSION} -LDFLAGS_CS += -Wl,-install_name,lib$(MQTTLIB_CS).so.${MAJOR_VERSION} -LDFLAGS_A += -Wl,-install_name,lib${MQTTLIB_A}.so.${MAJOR_VERSION} -LDFLAGS_AS += -Wl,-install_name,lib${MQTTLIB_AS}.so.${MAJOR_VERSION} +LDFLAGS_C += -Wl,-install_name,${MQTTLIB_C_LIBNAME}.${MAJOR_VERSION} +LDFLAGS_CS += -Wl,-install_name,${MQTTLIB_CS_LIBNAME}.${MAJOR_VERSION} +LDFLAGS_A += -Wl,-install_name,${MQTTLIB_A_LIBNAME}.${MAJOR_VERSION} +LDFLAGS_AS += -Wl,-install_name,${MQTTLIB_AS_LIBNAME}.${MAJOR_VERSION} + +else ifeq ($(OSTYPE),CYGWIN_NT) +SED_COMMAND = sed -i "s/\#\#MQTTCLIENT_VERSION_TAG\#\#/${release.version}/g; s/\#\#MQTTCLIENT_BUILD_TAG\#\#/${build.level}/g" + +MQTTCLIENT_INIT = _MQTTClient_init +MQTTASYNC_INIT = _MQTTAsync_init +START_GROUP = +END_GROUP = + +EXTRA_LIB = -ldl + +CCFLAGS_SO += -Wno-deprecated-declarations -DUSE_NAMED_SEMAPHORES +LDFLAGS_C += -Wl,--out-implib=${blddir}/lib$(MQTTLIB_C).dll.a +LDFLAGS_CS += -Wl,--out-implib=${blddir}/lib$(MQTTLIB_CS).dll.a +LDFLAGS_A += -Wl,--out-implib=${blddir}/lib${MQTTLIB_A}.dll.a +LDFLAGS_AS += -Wl,--out-implib=${blddir}/lib${MQTTLIB_AS}.dll.a endif all: build @@ -192,26 +235,26 @@ ${ASYNC_SAMPLES}: ${blddir}/samples/%: ${srcdir}/samples/%.c $(MQTTLIB_A_TARGET) ${MQTTLIB_C_TARGET}: ${SOURCE_FILES_C} ${HEADERS_C} $(SED_COMMAND) $(srcdir)/MQTTClient.c ${CC} ${CCFLAGS_SO} -o $@ ${SOURCE_FILES_C} ${LDFLAGS_C} - -ln -s lib$(MQTTLIB_C).so.${VERSION} ${blddir}/lib$(MQTTLIB_C).so.${MAJOR_VERSION} - -ln -s lib$(MQTTLIB_C).so.${MAJOR_VERSION} ${blddir}/lib$(MQTTLIB_C).so + -ln -s ${MQTTLIB_C_LIBNAME}.${VERSION} ${blddir}/${MQTTLIB_C_LIBNAME}.${MAJOR_VERSION} + -ln -s ${MQTTLIB_C_LIBNAME}.${MAJOR_VERSION} ${blddir}/${MQTTLIB_C_LIBNAME} ${MQTTLIB_CS_TARGET}: ${SOURCE_FILES_CS} ${HEADERS_C} $(SED_COMMAND) $(srcdir)/MQTTClient.c ${CC} ${CCFLAGS_SO} -o $@ ${SOURCE_FILES_CS} -DOPENSSL ${LDFLAGS_CS} - -ln -s lib$(MQTTLIB_CS).so.${VERSION} ${blddir}/lib$(MQTTLIB_CS).so.${MAJOR_VERSION} - -ln -s lib$(MQTTLIB_CS).so.${MAJOR_VERSION} ${blddir}/lib$(MQTTLIB_CS).so + -ln -s ${MQTTLIB_CS_LIBNAME}.${VERSION} ${blddir}/${MQTTLIB_CS_LIBNAME}.${MAJOR_VERSION} + -ln -s ${MQTTLIB_CS_LIBNAME}.${MAJOR_VERSION} ${blddir}/${MQTTLIB_CS_LIBNAME} ${MQTTLIB_A_TARGET}: ${SOURCE_FILES_A} ${HEADERS_A} $(SED_COMMAND) $(srcdir)/MQTTAsync.c ${CC} ${CCFLAGS_SO} -o $@ ${SOURCE_FILES_A} ${LDFLAGS_A} - -ln -s lib$(MQTTLIB_A).so.${VERSION} ${blddir}/lib$(MQTTLIB_A).so.${MAJOR_VERSION} - -ln -s lib$(MQTTLIB_A).so.${MAJOR_VERSION} ${blddir}/lib$(MQTTLIB_A).so + -ln -s ${MQTTLIB_A_LIBNAME}.${VERSION} ${blddir}/${MQTTLIB_A_LIBNAME}.${MAJOR_VERSION} + -ln -s ${MQTTLIB_A_LIBNAME}.${MAJOR_VERSION} ${blddir}/${MQTTLIB_A_LIBNAME} ${MQTTLIB_AS_TARGET}: ${SOURCE_FILES_AS} ${HEADERS_A} $(SED_COMMAND) $(srcdir)/MQTTAsync.c ${CC} ${CCFLAGS_SO} -o $@ ${SOURCE_FILES_AS} -DOPENSSL ${LDFLAGS_AS} - -ln -s lib$(MQTTLIB_AS).so.${VERSION} ${blddir}/lib$(MQTTLIB_AS).so.${MAJOR_VERSION} - -ln -s lib$(MQTTLIB_AS).so.${MAJOR_VERSION} ${blddir}/lib$(MQTTLIB_AS).so + -ln -s ${MQTTLIB_AS_LIBNAME}.${VERSION} ${blddir}/${MQTTLIB_AS_LIBNAME}.${MAJOR_VERSION} + -ln -s ${MQTTLIB_AS_LIBNAME}.${MAJOR_VERSION} ${blddir}/${MQTTLIB_AS_LIBNAME} ${MQTTVERSION_TARGET}: $(srcdir)/MQTTVersion.c $(srcdir)/MQTTAsync.h ${MQTTLIB_A_TARGET} $(MQTTLIB_CS_TARGET) ${CC} ${FLAGS_EXE} -o $@ -l${MQTTLIB_A} $(srcdir)/MQTTVersion.c -ldl @@ -222,31 +265,39 @@ strip_options: install-strip: build strip_options install install: build + $(INSTALL) -d $(DESTDIR)${libdir} + $(INSTALL) -d $(DESTDIR)${includedir} $(INSTALL_DATA) ${INSTALL_OPTS} ${MQTTLIB_C_TARGET} $(DESTDIR)${libdir} $(INSTALL_DATA) ${INSTALL_OPTS} ${MQTTLIB_CS_TARGET} $(DESTDIR)${libdir} $(INSTALL_DATA) ${INSTALL_OPTS} ${MQTTLIB_A_TARGET} $(DESTDIR)${libdir} $(INSTALL_DATA) ${INSTALL_OPTS} ${MQTTLIB_AS_TARGET} $(DESTDIR)${libdir} + -$(INSTALL_DATA) ${blddir}/lib*.dll.a $(DESTDIR)${libdir} $(INSTALL_PROGRAM) ${INSTALL_OPTS} ${MQTTVERSION_TARGET} $(DESTDIR)${bindir} - /sbin/ldconfig $(DESTDIR)${libdir} - ln -s lib$(MQTTLIB_C).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_C).so - ln -s lib$(MQTTLIB_CS).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_CS).so - ln -s lib$(MQTTLIB_A).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_A).so - ln -s lib$(MQTTLIB_AS).so.${MAJOR_VERSION} $(DESTDIR)${libdir}/lib$(MQTTLIB_AS).so + -/sbin/ldconfig $(DESTDIR)${libdir} + -ln -s ${MQTTLIB_C_LIBNAME}.${VERSION} $(DESTDIR)${libdir}/${MQTTLIB_C_LIBNAME}.${MAJOR_VERSION} + ln -s ${MQTTLIB_C_LIBNAME}.${MAJOR_VERSION} $(DESTDIR)${libdir}/${MQTTLIB_C_LIBNAME} + -ln -s ${MQTTLIB_CS_LIBNAME}.${VERSION} $(DESTDIR)${libdir}/${MQTTLIB_CS_LIBNAME}.${MAJOR_VERSION} + ln -s ${MQTTLIB_CS_LIBNAME}.${MAJOR_VERSION} $(DESTDIR)${libdir}/${MQTTLIB_CS_LIBNAME} + -ln -s ${MQTTLIB_A_LIBNAME}.${VERSION} $(DESTDIR)${libdir}/${MQTTLIB_A_LIBNAME}.${MAJOR_VERSION} + ln -s ${MQTTLIB_A_LIBNAME}.${MAJOR_VERSION} $(DESTDIR)${libdir}/${MQTTLIB_A_LIBNAME} + -ln -s ${MQTTLIB_AS_LIBNAME}.${VERSION} $(DESTDIR)${libdir}/${MQTTLIB_AS_LIBNAME}.${MAJOR_VERSION} + ln -s ${MQTTLIB_AS_LIBNAME}.${MAJOR_VERSION} $(DESTDIR)${libdir}/${MQTTLIB_AS_LIBNAME} $(INSTALL_DATA) ${srcdir}/MQTTAsync.h $(DESTDIR)${includedir} $(INSTALL_DATA) ${srcdir}/MQTTClient.h $(DESTDIR)${includedir} $(INSTALL_DATA) ${srcdir}/MQTTClientPersistence.h $(DESTDIR)${includedir} uninstall: - rm $(DESTDIR)${libdir}/lib$(MQTTLIB_C).so.${VERSION} - rm $(DESTDIR)${libdir}/lib$(MQTTLIB_CS).so.${VERSION} - rm $(DESTDIR)${libdir}/lib$(MQTTLIB_A).so.${VERSION} - rm $(DESTDIR)${libdir}/lib$(MQTTLIB_AS).so.${VERSION} + rm $(DESTDIR)${libdir}/${MQTTLIB_C_LIBNAME}.${VERSION} + rm $(DESTDIR)${libdir}/${MQTTLIB_CS_LIBNAME}.${VERSION} + rm $(DESTDIR)${libdir}/${MQTTLIB_A_LIBNAME}.${VERSION} + rm $(DESTDIR)${libdir}/${MQTTLIB_AS_LIBNAME}.${VERSION} rm $(DESTDIR)${bindir}/MQTTVersion - /sbin/ldconfig $(DESTDIR)${libdir} - rm $(DESTDIR)${libdir}/lib$(MQTTLIB_C).so - rm $(DESTDIR)${libdir}/lib$(MQTTLIB_CS).so - rm $(DESTDIR)${libdir}/lib$(MQTTLIB_A).so - rm $(DESTDIR)${libdir}/lib$(MQTTLIB_AS).so + -/sbin/ldconfig $(DESTDIR)${libdir} + rm $(DESTDIR)${libdir}/${MQTTLIB_C_LIBNAME} + rm $(DESTDIR)${libdir}/${MQTTLIB_CS_LIBNAME} + rm $(DESTDIR)${libdir}/${MQTTLIB_A_LIBNAME} + rm $(DESTDIR)${libdir}/${MQTTLIB_AS_LIBNAME} + rm $(DESTDIR)${libdir}/*paho-mqtt3*.dll.a rm $(DESTDIR)${includedir}/MQTTAsync.h rm $(DESTDIR)${includedir}/MQTTClient.h rm $(DESTDIR)${includedir}/MQTTClientPersistence.h