[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [paho-dev] New Makefile for building C client | 
| Hi Ian,
 I have a VS-project. Do you like to have it?
 
 paho_dienst is the library,
 publish and subscribe are the examples.
 
 With VS it builds, but you also have to add a define in the
      examples.
 See here:
 
 #ifdef WIN32
 #include <Windows.h>
 #endif
 
 
 Cheers,
 
 
 luja
 
 
 
 
 On 10/30/2013 5:57 PM, Ian Craggs wrote:
 
 
      
      I don't intend to do, and never did, a cygwin build for Windows
        - for Windows I would always use a Microsoft compiler and build
        a native DLL.   The major reason for having a cygwin build would
        be to allow it to work in the Eclipse IDE, which I admit, is
        reasonably compelling, as we are an Eclipse project.  I might
        look into that sometime, but if someone wants to volunteer...
 
 On WIndows, if you have installed Visual Studio C/C++ support,
        cl.exe is always there (the latest version I've used is 2010). 
        There is a batch file called vcvars32.bat in the Visual Studio
        installation directory which will set up paths to point to the
        command line compiler.
 
 One of the reasons for the condition of the previous Makefile,
        which was mostly not written by me, is that it attempted to
        build the clients for many platforms.   Adding all targets for
        all platforms is a time-consuming job.
 
 The new Makefile targets Linux to start, with MacOS to follow.
 
 Ian
 
 
 On 30/10/13 16:24, luja wrote:
 
 
        
        Hi Ian,
 Hopefully it will be better. The old makefile was really bad.
 Make sure, that the examples compile!
 
 have a make install for linux!
 what about linux?
 
 regarding windows build:
 cl.exe as a c compiler is not there. But I have a C-compiler,
          as VS2010 is installed
 
 cygwin build also is not nice:
 no make install, examples dont compile/link.
 
 Thank you for touching the makefile at all!
 
 Cheers
 
 luja
 
 
 
 On 10/30/2013 3:18 PM, Ian Craggs wrote:
 
 
          
          I've created a new Makefile for building the C client, in the
          root directory of the C project on Linux.  I've attempted to
          conform to as many standards as I could find, like:
 
 http://www.gnu.org/prep/standards/html_node/Standard-Targets.html
 http://l4u-00.jinr.ru/usoft/WWW/HOWTO/GCC-HOWTO-6.html
 
 It adds library versioning, targets for install/uninstall,
          clean and doc.
 
 I intend to do the same for MacOS.  For Windows, I'm planning
          a Visual Studio project and Ant for automated builds.
 
 I think that will cover the major platforms of interest for
          now.
 
 Ian
 
 
 
 _______________________________________________
paho-dev mailing list
paho-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/paho-dev
 
 
 
 _______________________________________________
paho-dev mailing list
paho-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/paho-dev
 
 
 
 _______________________________________________
paho-dev mailing list
paho-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/paho-dev
 
 | 
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C++ Express 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "paho_dienst_tx", "paho_dienst_tx\paho_dienst_tx.vcxproj", "{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Win32 = Debug|Win32
		Release|Win32 = Release|Win32
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Debug|Win32.ActiveCfg = Debug|Win32
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Debug|Win32.Build.0 = Debug|Win32
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Release|Win32.ActiveCfg = Release|Win32
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Release|Win32.Build.0 = Release|Win32
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C++ Express 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "paho_dienst", "paho_dienst\paho_dienst.vcxproj", "{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Win32 = Debug|Win32
		Release|Win32 = Release|Win32
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Debug|Win32.ActiveCfg = Debug|Win32
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Debug|Win32.Build.0 = Debug|Win32
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Release|Win32.ActiveCfg = Release|Win32
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Release|Win32.Build.0 = Release|Win32
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual C++ Express 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "paho_dienst_rx", "paho_dienst_rx\paho_dienst_rx.vcxproj", "{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Win32 = Debug|Win32
		Release|Win32 = Release|Win32
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Debug|Win32.ActiveCfg = Debug|Win32
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Debug|Win32.Build.0 = Debug|Win32
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Release|Win32.ActiveCfg = Release|Win32
		{FDADC8B3-FE09-4EAF-BEDF-E237496057FA}.Release|Win32.Build.0 = Release|Win32
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal
/*******************************************************************************
 * Copyright (c) 2012, 2013 IBM Corp.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution. 
 *
 * The Eclipse Public License is available at 
 *   http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at 
 *   http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *    Ian Craggs - initial contribution
 *******************************************************************************/
#ifdef WIN32
#include <Windows.h>
#endif
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "MQTTAsync.h"
#define ADDRESS     "tcp://localhost:1883"
#define CLIENTID    "ExampleClientSub2123"
#define TOPIC       "MQTT Examples"
#define PAYLOAD     "Hello World!FN0RD1"
#define QOS         1
#define TIMEOUT     10000L
volatile MQTTAsync_token deliveredtoken;
int finished = 0;
void connlost(void *context, char *cause)
{
	MQTTAsync client = (MQTTAsync)context;
	MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
	int rc;
	printf("\nConnection lost\n");
	printf("     cause: %s\n", cause);
	printf("Reconnecting\n");
	conn_opts.keepAliveInterval = 20;
	conn_opts.cleansession = 1;
	if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
	{
		printf("Failed to start connect, return code %d\n", rc);
 		finished = 1;
	}
}
void onDisconnect(void* context, MQTTAsync_successData* response)
{
	printf("Successful disconnection\n");
	finished = 1;
}
void onSend(void* context, MQTTAsync_successData* response)
{
	MQTTAsync client = (MQTTAsync)context;
	MQTTAsync_disconnectOptions opts = MQTTAsync_disconnectOptions_initializer;
	int rc;
	printf("Message with token value %d delivery confirmed\n", response->token);
	opts.onSuccess = onDisconnect;
	opts.context = client;
	if ((rc = MQTTAsync_disconnect(client, &opts)) != MQTTASYNC_SUCCESS)
	{
		printf("Failed to start sendMessage, return code %d\n", rc);
		exit(-1);	
	}
}
void onConnectFailure(void* context, MQTTAsync_failureData* response)
{
	printf("Connect failed, rc %d\n", response ? response->code : 0);
	finished = 1;
}
void onConnect(void* context, MQTTAsync_successData* response)
{
	MQTTAsync client = (MQTTAsync)context;
	MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
	MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
	int rc;
	printf("Successful connection\n");
	
	opts.onSuccess = onSend;
	opts.context = client;
	pubmsg.payload = PAYLOAD;
	pubmsg.payloadlen = strlen(PAYLOAD);
	pubmsg.qos = QOS;
	pubmsg.retained = 0;
	deliveredtoken = 0;
	if ((rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &opts)) != MQTTASYNC_SUCCESS)
	{
		printf("Failed to start sendMessage, return code %d\n", rc);
 		exit(-1);	
	}
}
int main(int argc, char* argv[])
{
	MQTTAsync client;
	MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
	MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
	MQTTAsync_token token;
	int rc;
	MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
	MQTTAsync_setCallbacks(client, NULL, connlost, NULL, NULL);
	conn_opts.keepAliveInterval = 20;
	conn_opts.cleansession = 1;
	conn_opts.onSuccess = onConnect;
	conn_opts.onFailure = onConnectFailure;
	conn_opts.context = client;
	printf("\n * PAHO DIENST TX *\n");
	if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
	{
		printf("Failed to start connect, return code %d\n", rc);
		exit(-1);	
	}
	printf("Waiting for publication of %s\n"
         "on topic %s for client with ClientID: %s\n",
         PAYLOAD, TOPIC, CLIENTID);
	while (!finished)
		#if defined(WIN32)
			Sleep(100);
		#else
			usleep(10000L);
		#endif
	MQTTAsync_destroy(&client);
 	return rc;
}
  
/*******************************************************************************
 * Copyright (c) 2012, 2013 IBM Corp.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution. 
 *
 * The Eclipse Public License is available at 
 *   http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at 
 *   http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *    Ian Craggs - initial contribution
 *******************************************************************************/
#ifdef WIN32
#include <Windows.h>
#endif
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "MQTTAsync.h"
#define ADDRESS     "tcp://localhost:1883"
#define CLIENTID    "ExampleClientSub2123"
#define TOPIC       "MQTT Examples"
#define PAYLOAD     "Hello World!FN0RD1"
#define QOS         1
#define TIMEOUT     10000L
volatile MQTTAsync_token deliveredtoken;
int disc_finished = 0;
int subscribed = 0;
int finished = 0;
void connlost(void *context, char *cause)
{
	MQTTAsync client = (MQTTAsync)context;
	MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
	int rc;
	printf("\nConnection lost\n");
	printf("     cause: %s\n", cause);
	printf("Reconnecting\n");
	conn_opts.keepAliveInterval = 20;
	conn_opts.cleansession = 1;
	if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
	{
		printf("Failed to start connect, return code %d\n", rc);
	    finished = 1;
	}
}
int msgarrvd(void *context, char *topicName, int topicLen, MQTTAsync_message *message)
{
    int i;
    char* payloadptr;
    printf("Message arrived\n");
    printf("     topic: %s\n", topicName);
    printf("   message: ");
    payloadptr = message->payload;
    for(i=0; i<message->payloadlen; i++)
    {
        putchar(*payloadptr++);
    }
    putchar('\n');
    MQTTAsync_freeMessage(&message);
    MQTTAsync_free(topicName);
    return 1;
}
void onDisconnect(void* context, MQTTAsync_successData* response)
{
	printf("Successful disconnection\n");
	disc_finished = 1;
}
void onSubscribe(void* context, MQTTAsync_successData* response)
{
	printf("Subscribe succeeded\n");
	subscribed = 1;
}
void onSubscribeFailure(void* context, MQTTAsync_failureData* response)
{
	printf("Subscribe failed, rc %d\n", response ? response->code : 0);
	finished = 1;
}
void onConnectFailure(void* context, MQTTAsync_failureData* response)
{
	printf("Connect failed, rc %d\n", response ? response->code : 0);
	finished = 1;
}
void onConnect(void* context, MQTTAsync_successData* response)
{
	MQTTAsync client = (MQTTAsync)context;
	MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
	MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
	int rc;
	printf("Successful connection\n");
	printf("Subscribing to topic %s\nfor client %s using QoS%d\n\n"
           "Press Q<Enter> to quit\n\n", TOPIC, CLIENTID, QOS);
	opts.onSuccess = onSubscribe;
	opts.onFailure = onSubscribeFailure;
	opts.context = client;
	deliveredtoken = 0;
	if ((rc = MQTTAsync_subscribe(client, TOPIC, QOS, &opts)) != MQTTASYNC_SUCCESS)
	{
		printf("Failed to start subscribe, return code %d\n", rc);
		exit(-1);	
	}
}
int main(int argc, char* argv[])
{
	MQTTAsync client;
	MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
	MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
	MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
	MQTTAsync_token token;
	int rc;
	int ch;
	MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
	MQTTAsync_setCallbacks(client, NULL, connlost, msgarrvd, NULL);
	conn_opts.keepAliveInterval = 20;
	conn_opts.cleansession = 1;
	conn_opts.onSuccess = onConnect;
	conn_opts.onFailure = onConnectFailure;
	conn_opts.context = client;
	printf("\n * PAHO DIENST RX *\n");
	if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
	{
		printf("Failed to start connect, return code %d\n", rc);
		exit(-1);	
	}
	while	(!subscribed)
		#if defined(WIN32)
			Sleep(100);
		#else
			usleep(10000L);
		#endif
	if (finished)
		goto exit;
	do 
	{
		ch = getchar();
	} while (ch!='Q' && ch != 'q');
	disc_opts.onSuccess = onDisconnect;
	if ((rc = MQTTAsync_disconnect(client, &disc_opts)) != MQTTASYNC_SUCCESS)
	{
		printf("Failed to start disconnect, return code %d\n", rc);
		exit(-1);	
	}
 	while	(!disc_finished)
		#if defined(WIN32)
			Sleep(100);
		#else
			usleep(10000L);
		#endif
exit:
	MQTTAsync_destroy(&client);
 	return rc;
}