aboutsummaryrefslogtreecommitdiff
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
parent423eb169130ca390fee2f88ee0effe3b01a5caa2 (diff)
amule: cleanup
-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 0a240248806..7f6aeace7b8 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 3f5502582a2..00000000000
--- 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