about summary refs log tree commit diff
path: root/pkgs/tools/networking
diff options
context:
space:
mode:
authorPeter Hoeg <peter@hoeg.com>2019-09-23 11:05:43 +0800
committerPeter Hoeg <peter@hoeg.com>2019-09-23 11:17:57 +0800
commit76dc4b668bf5065550e53e19d98974592b37fbb8 (patch)
tree5f542ed500b8c7a83c4585144b73bda42d4ec9f6 /pkgs/tools/networking
parent423eb169130ca390fee2f88ee0effe3b01a5caa2 (diff)
downloadnixlib-76dc4b668bf5065550e53e19d98974592b37fbb8.tar
nixlib-76dc4b668bf5065550e53e19d98974592b37fbb8.tar.gz
nixlib-76dc4b668bf5065550e53e19d98974592b37fbb8.tar.bz2
nixlib-76dc4b668bf5065550e53e19d98974592b37fbb8.tar.lz
nixlib-76dc4b668bf5065550e53e19d98974592b37fbb8.tar.xz
nixlib-76dc4b668bf5065550e53e19d98974592b37fbb8.tar.zst
nixlib-76dc4b668bf5065550e53e19d98974592b37fbb8.zip
amule: cleanup
Diffstat (limited to 'pkgs/tools/networking')
-rw-r--r--pkgs/tools/networking/p2p/amule/default.nix81
-rw-r--r--pkgs/tools/networking/p2p/amule/upnp-1.8.patch230
2 files changed, 50 insertions, 261 deletions
diff --git a/pkgs/tools/networking/p2p/amule/default.nix b/pkgs/tools/networking/p2p/amule/default.nix
index 0a240248806d..7f6aeace7b8c 100644
--- a/pkgs/tools/networking/p2p/amule/default.nix
+++ b/pkgs/tools/networking/p2p/amule/default.nix
@@ -2,28 +2,53 @@
 , enableDaemon ? false # build amule daemon
 , httpServer ? false # build web interface for the daemon
 , client ? false # build amule remote gui
-, fetchurl, stdenv, zlib, wxGTK, perl, cryptopp, libupnp, gettext, libpng ? null
-, pkgconfig, makeWrapper, libX11 ? null }:
+, fetchFromGitHub, fetchpatch, stdenv, lib, zlib, wxGTK, perl, cryptopp, libupnp, gettext, libpng ? null
+, autoreconfHook, pkgconfig, makeWrapper, libX11 ? null }:
 
 assert httpServer -> libpng != null;
 assert client -> libX11 != null;
-with stdenv;
 
-mkDerivation rec {
-  name = "aMule-2.3.2";
+stdenv.mkDerivation rec {
+  pname = "amule";
+  version = "2.3.2";
 
-  src = fetchurl {
-    url = "mirror://sourceforge/amule/${name}.tar.xz";
-    sha256 = "0a1rd33hjl30qyzgb5y8m7dxs38asci3kjnlvims1ky6r3yj0izn";
+  src = fetchFromGitHub {
+    owner = "amule-project";
+    repo = "amule";
+    rev = version;
+    sha256 = "010wxm6g9f92x6fympj501zbnjka32rzbx0sk3a2y4zpih5d2nsn";
   };
 
-  buildInputs =
-    [ zlib wxGTK perl cryptopp libupnp gettext pkgconfig makeWrapper ]
-    ++ lib.optional httpServer libpng
-    ++ lib.optional client libX11;
+  patches = [
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/amule-project/amule/pull/135.patch";
+      sha256 = "1n24r1j28083b8ipbnh1nf6i4j6vx59pdkfl1c0g6bb4psx9wvvi";
+      name = "libupnp_18.patch";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace src/libs/ec/file_generator.pl \
+      --replace /usr/bin/perl ${perl}/bin/perl
+
+    # autotools expects these to be in the root
+    cp docs/{AUTHORS,README} .
+    cp docs/Changelog ./ChangeLog
+    cp docs/Changelog ./NEWS
+  '';
+
+  preAutoreconf = ''
+    pushd src/pixmaps/flags_xpm >/dev/null
+    ./makeflags.sh
+    popd >/dev/null
+  '';
 
-  # See: https://github.com/amule-project/amule/issues/126
-  patches = [ ./upnp-1.8.patch ];
+  nativeBuildInputs = [ autoreconfHook gettext makeWrapper pkgconfig ];
+
+  buildInputs = [
+    zlib wxGTK perl cryptopp libupnp
+  ] ++ lib.optional httpServer libpng
+    ++ lib.optional client libX11;
 
   enableParallelBuilding = true;
 
@@ -31,27 +56,21 @@ mkDerivation rec {
     "--with-crypto-prefix=${cryptopp}"
     "--disable-debug"
     "--enable-optimize"
-    (stdenv.lib.enableFeature monolithic "monolithic")
-    (stdenv.lib.enableFeature enableDaemon "amule-daemon")
-    (stdenv.lib.enableFeature client "amule-gui")
-    (stdenv.lib.enableFeature httpServer "webserver")
+    (lib.enableFeature monolithic   "monolithic")
+    (lib.enableFeature enableDaemon "amule-daemon")
+    (lib.enableFeature client       "amule-gui")
+    (lib.enableFeature httpServer   "webserver")
   ];
 
-  postConfigure = ''
-    sed -i "src/libs/ec/file_generator.pl"     \
-        -es'|/usr/bin/perl|${perl}/bin/perl|g'
-  '';
-
   # aMule will try to `dlopen' libupnp and libixml, so help it
   # find them.
   postInstall = lib.optionalString monolithic ''
-    wrapProgram "$out/bin/amule" --prefix LD_LIBRARY_PATH ":" "${libupnp}/lib"
+    wrapProgram $out/bin/amule \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libupnp ]}
   '';
 
-  meta = {
-    homepage = http://amule.org/;
+  meta = with lib; {
     description = "Peer-to-peer client for the eD2K and Kademlia networks";
-
     longDescription = ''
       aMule is an eMule-like client for the eD2k and Kademlia
       networks, supporting multiple platforms.  Currently aMule
@@ -63,9 +82,9 @@ mkDerivation rec {
       applications.
     '';
 
-    license = stdenv.lib.licenses.gpl2Plus;
-
-    platforms = stdenv.lib.platforms.gnu ++ stdenv.lib.platforms.linux;  # arbitrary choice
-    maintainers = [ stdenv.lib.maintainers.phreedom ];
+    homepage = "https://amule.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ phreedom ];
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/networking/p2p/amule/upnp-1.8.patch b/pkgs/tools/networking/p2p/amule/upnp-1.8.patch
deleted file mode 100644
index 3f5502582a25..000000000000
--- a/pkgs/tools/networking/p2p/amule/upnp-1.8.patch
+++ /dev/null
@@ -1,230 +0,0 @@
---- a/src/UPnPBase.cpp
-+++ b/src/UPnPBase.cpp
-@@ -29,22 +29,12 @@
-
- #ifdef ENABLE_UPNP
-
--// check for broken Debian-hacked libUPnP
- #include <upnp.h>
--#ifdef STRING_H			// defined in UpnpString.h Yes, I would have liked UPNPSTRING_H much better.
--#define BROKEN_DEBIAN_LIBUPNP
--#endif
-
- #include "UPnPBase.h"
-
- #include <algorithm>		// For transform()
-
--#ifdef BROKEN_DEBIAN_LIBUPNP
--  #define GET_UPNP_STRING(a) UpnpString_get_String(a)
--#else
--  #define GET_UPNP_STRING(a) (a)
--#endif
--
- std::string stdEmptyString;
-
- const char s_argument[] = "argument";
-@@ -1127,7 +1117,7 @@
-
-
- // This function is static
--int CUPnPControlPoint::Callback(Upnp_EventType EventType, void *Event, void * /*Cookie*/)
-+int CUPnPControlPoint::Callback(Upnp_EventType EventType, const void *Event, void * /*Cookie*/)
- {
- 	std::ostringstream msg;
- 	std::ostringstream msg2;
-@@ -1149,24 +1139,24 @@
- 		msg2<< "UPNP_DISCOVERY_SEARCH_RESULT: ";
- 		// UPnP Discovery
- upnpDiscovery:
--		struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)Event;
-+		UpnpDiscovery *d_event = (UpnpDiscovery *)Event;
- 		IXML_Document *doc = NULL;
- 		int ret;
--		if (d_event->ErrCode != UPNP_E_SUCCESS) {
--			msg << UpnpGetErrorMessage(d_event->ErrCode) << ".";
-+		if (UpnpDiscovery_get_ErrCode(d_event) != UPNP_E_SUCCESS) {
-+			msg << UpnpGetErrorMessage(UpnpDiscovery_get_ErrCode(d_event)) << ".";
- 			AddDebugLogLineC(logUPnP, msg);
- 		}
- 		// Get the XML tree device description in doc
--		ret = UpnpDownloadXmlDoc(d_event->Location, &doc);
-+		ret = UpnpDownloadXmlDoc(UpnpDiscovery_get_Location_cstr(d_event), &doc);
- 		if (ret != UPNP_E_SUCCESS) {
- 			msg << "Error retrieving device description from " <<
--				d_event->Location << ": " <<
-+				UpnpDiscovery_get_Location_cstr(d_event) << ": " <<
- 				UpnpGetErrorMessage(ret) <<
- 				"(" << ret << ").";
- 			AddDebugLogLineC(logUPnP, msg);
- 		} else {
- 			msg2 << "Retrieving device description from " <<
--				d_event->Location << ".";
-+				UpnpDiscovery_get_Location_cstr(d_event) << ".";
- 			AddDebugLogLineN(logUPnP, msg2);
- 		}
- 		if (doc) {
-@@ -1195,7 +1185,7 @@
- 				}
- 				// Add the root device to our list
- 				upnpCP->AddRootDevice(rootDevice, urlBase,
--					d_event->Location, d_event->Expires);
-+					UpnpDiscovery_get_Location_cstr(d_event), UpnpDiscovery_get_Expires(d_event));
- 			}
- 			// Free the XML doc tree
- 			IXML::Document::Free(doc);
-@@ -1216,28 +1206,28 @@
- 	case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: {
- 		//fprintf(stderr, "Callback: UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE\n");
- 		// UPnP Device Removed
--		struct Upnp_Discovery *dab_event = (struct Upnp_Discovery *)Event;
--		if (dab_event->ErrCode != UPNP_E_SUCCESS) {
-+		UpnpDiscovery *dab_event = (UpnpDiscovery *)Event;
-+		if (UpnpDiscovery_get_ErrCode(dab_event) != UPNP_E_SUCCESS) {
- 			msg << "error(UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE): " <<
--				UpnpGetErrorMessage(dab_event->ErrCode) <<
-+				UpnpGetErrorMessage(UpnpDiscovery_get_ErrCode(dab_event)) <<
- 				".";
- 			AddDebugLogLineC(logUPnP, msg);
- 		}
--		std::string devType = dab_event->DeviceType;
-+		std::string devType = UpnpDiscovery_get_DeviceType_cstr(dab_event);
- 		// Check for an InternetGatewayDevice and removes it from the list
- 		std::transform(devType.begin(), devType.end(), devType.begin(), tolower);
- 		if (stdStringIsEqualCI(devType, UPnP::Device::IGW)) {
--			upnpCP->RemoveRootDevice(dab_event->DeviceId);
-+			upnpCP->RemoveRootDevice(UpnpDiscovery_get_DeviceID_cstr(dab_event));
- 		}
- 		break;
- 	}
- 	case UPNP_EVENT_RECEIVED: {
- 		//fprintf(stderr, "Callback: UPNP_EVENT_RECEIVED\n");
- 		// Event reveived
--		struct Upnp_Event *e_event = (struct Upnp_Event *)Event;
--		const std::string Sid = e_event->Sid;
-+		UpnpEvent *e_event = (UpnpEvent *)Event;
-+		const std::string Sid = UpnpEvent_get_SID_cstr(e_event);
- 		// Parses the event
--		upnpCP->OnEventReceived(Sid, e_event->EventKey, e_event->ChangedVariables);
-+		upnpCP->OnEventReceived(Sid, UpnpEvent_get_EventKey(e_event), UpnpEvent_get_ChangedVariables(e_event));
- 		break;
- 	}
- 	case UPNP_EVENT_SUBSCRIBE_COMPLETE:
-@@ -1252,16 +1242,15 @@
- 		//fprintf(stderr, "Callback: UPNP_EVENT_RENEWAL_COMPLETE\n");
- 		msg << "error(UPNP_EVENT_RENEWAL_COMPLETE): ";
- upnpEventRenewalComplete:
--		struct Upnp_Event_Subscribe *es_event =
--			(struct Upnp_Event_Subscribe *)Event;
--		if (es_event->ErrCode != UPNP_E_SUCCESS) {
-+		UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event;
-+		if (UpnpEventSubscribe_get_ErrCode(es_event) != UPNP_E_SUCCESS) {
- 			msg << "Error in Event Subscribe Callback";
- 			UPnP::ProcessErrorMessage(
--				msg.str(), es_event->ErrCode, NULL, NULL);
-+				msg.str(), UpnpEventSubscribe_get_ErrCode(es_event), NULL, NULL);
- 		} else {
- #if 0
- 			TvCtrlPointHandleSubscribeUpdate(
--				GET_UPNP_STRING(es_event->PublisherUrl),
-+				UpnpEventSubscribe_get_PublisherUrl_cstr(es_event),
- 				es_event->Sid,
- 				es_event->TimeOut );
- #endif
-@@ -1280,29 +1269,29 @@
- 		msg << "error(UPNP_EVENT_SUBSCRIPTION_EXPIRED): ";
- 		msg2 << "UPNP_EVENT_SUBSCRIPTION_EXPIRED: ";
- upnpEventSubscriptionExpired:
--		struct Upnp_Event_Subscribe *es_event =
--			(struct Upnp_Event_Subscribe *)Event;
-+		UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event;
- 		Upnp_SID newSID;
- 		memset(newSID, 0, sizeof(Upnp_SID));
- 		int TimeOut = 1801;
- 		int ret = UpnpSubscribe(
- 			upnpCP->m_UPnPClientHandle,
--			GET_UPNP_STRING(es_event->PublisherUrl),
-+
-+			UpnpEventSubscribe_get_PublisherUrl_cstr(es_event),
- 			&TimeOut,
- 			newSID);
- 		if (ret != UPNP_E_SUCCESS) {
- 			msg << "Error Subscribing to EventURL";
- 			UPnP::ProcessErrorMessage(
--				msg.str(), es_event->ErrCode, NULL, NULL);
-+				msg.str(), UpnpEventSubscribe_get_ErrCode(es_event), NULL, NULL);
- 		} else {
- 			ServiceMap::iterator it =
--				upnpCP->m_ServiceMap.find(GET_UPNP_STRING(es_event->PublisherUrl));
-+				upnpCP->m_ServiceMap.find(UpnpEventSubscribe_get_PublisherUrl_cstr(es_event));
- 			if (it != upnpCP->m_ServiceMap.end()) {
- 				CUPnPService &service = *(it->second);
- 				service.SetTimeout(TimeOut);
- 				service.SetSID(newSID);
- 				msg2 << "Re-subscribed to EventURL '" <<
--					GET_UPNP_STRING(es_event->PublisherUrl) <<
-+					UpnpEventSubscribe_get_PublisherUrl_cstr(es_event) <<
- 					"' with SID == '" <<
- 					newSID << "'.";
- 				AddDebugLogLineC(logUPnP, msg2);
-@@ -1321,17 +1310,16 @@
- 	case UPNP_CONTROL_ACTION_COMPLETE: {
- 		//fprintf(stderr, "Callback: UPNP_CONTROL_ACTION_COMPLETE\n");
- 		// This is here if we choose to do this asynchronously
--		struct Upnp_Action_Complete *a_event =
--			(struct Upnp_Action_Complete *)Event;
--		if (a_event->ErrCode != UPNP_E_SUCCESS) {
-+		UpnpActionComplete *a_event = (UpnpActionComplete *)Event;
-+		if (UpnpActionComplete_get_ErrCode(a_event) != UPNP_E_SUCCESS) {
- 			UPnP::ProcessErrorMessage(
- 				"UpnpSendActionAsync",
--				a_event->ErrCode, NULL,
--				a_event->ActionResult);
-+				UpnpActionComplete_get_ErrCode(a_event), NULL,
-+				UpnpActionComplete_get_ActionResult(a_event));
- 		} else {
- 			// Check the response document
- 			UPnP::ProcessActionResponse(
--				a_event->ActionResult,
-+				UpnpActionComplete_get_ActionResult(a_event),
- 				"<UpnpSendActionAsync>");
- 		}
- 		/* No need for any processing here, just print out results.
-@@ -1342,12 +1330,11 @@
- 	case UPNP_CONTROL_GET_VAR_COMPLETE: {
- 		//fprintf(stderr, "Callback: UPNP_CONTROL_GET_VAR_COMPLETE\n");
- 		msg << "error(UPNP_CONTROL_GET_VAR_COMPLETE): ";
--		struct Upnp_State_Var_Complete *sv_event =
--			(struct Upnp_State_Var_Complete *)Event;
--		if (sv_event->ErrCode != UPNP_E_SUCCESS) {
-+		UpnpStateVarComplete *sv_event = (UpnpStateVarComplete *)Event;
-+		if (UpnpStateVarComplete_get_ErrCode(sv_event) != UPNP_E_SUCCESS) {
- 			msg << "m_UpnpGetServiceVarStatusAsync";
- 			UPnP::ProcessErrorMessage(
--				msg.str(), sv_event->ErrCode, NULL, NULL);
-+				msg.str(), UpnpStateVarComplete_get_ErrCode(sv_event), NULL, NULL);
- 		} else {
- #if 0
- 			// Warning: The use of UpnpGetServiceVarStatus and
---- a/src/UPnPBase.h
-+++ b/src/UPnPBase.h
-@@ -490,9 +490,19 @@
- 	// Callback function
- 	static int Callback(
- 		Upnp_EventType EventType,
--		void* Event,
-+		const void* Event,
- 		void* Cookie);
-
-+#if UPNP_VERSION < 10800
-+	/* in libupnp 1.6 Event is not const */
-+	static int Callback(
-+		Upnp_EventType EventType,
-+		void* Event,
-+		void* Cookie) {
-+		return Callback(EventType, (const void *)Event, Cookie);
-+	}
-+#endif
-+
- private:
- 	void OnEventReceived(
- 		const std::string &Sid,
\ No newline at end of file