the package hoodselector crasht while building with luaminifyer
luamin get problems with multicore building. Here is a log dump from a discussion between neoraider and tata:
below in german:
(22:34:42) neoraider: Ansonsten fällt mir noch auf, dass du in den Makefiles viel $(PKG_NAME) in anderen defines benutzt, was bei OpenWrt eigentlich nicht üblich ist
(22:34:55) neoraider: Ich vermute nicht, dass das Probleme auslöst, aber möglich wäre es
(22:35:05) neoraider: Kennst du den unterschied zwischen = und := in Make?
(22:36:00) Tarek: nein
(22:36:11) Tarek: warscheinlich ist := für listen oder so
(22:36:28) neoraider: Nein, es hängt damit zusammen, wann Variablen aufgelöst werden
(22:36:57) neoraider: Eine Variable, die mit := zugewiesen wird, wird sofort zu einem String aufgelöst
(22:37:08) Tarek: Error: no such file. (Error: ENOENT: no such file or directory, open ''
)
(22:37:11) Tarek: gepatch
(22:37:17) neoraider: Eine, die mit = zugewiesen wird, behält ihre Variablen-Referenzen, und die werden erst bei der Verwendung aufgelöst
(22:37:20) neoraider: Also z.B.
(22:37:50) neoraider: FOO := foo
FOO1 := $(FOO)
FOO2 = $(FOO)
FOO := bar
(22:38:13) neoraider: Bei den Zuweisungen von FOO ist das := egal, da der zugewiesene Wert keine Variablen enthält
(22:38:19) neoraider: Bei FOO1 und FOO2 macht es einen Unterschied
(22:38:40) neoraider: FOO1 hat am Ende den Wert foo, FOO2 den Wert bar (solange FOO seinen Wert behält)
(22:39:02) Tarek: soweit kann ich folgen
(22:39:15) neoraider: Ein define ist erstmal einfach ein mehrzeiliges =
(22:39:58) neoraider: Somit könnte es bei deiner Verwendung von $(PKG_NAME) passieren, dass irgendetwas magisches von den OpenWrt-Makefiles den Wert später verändert und die defines dann falsch sind
(22:40:03) neoraider: Ich denke nicht, dass sowas passiert
(22:40:07) neoraider: Aber möglich wäre es
(22:40:42) neoraider: Wobei... du benutzt die Variable ja nur im Namen der defines, nicht im Wert, dann ist es eh egal
(22:40:48) Tarek: z.b. ein package was paralel gebaut wird
(22:41:03) neoraider: Nein, der parallele Build läuft in unabhängigen Prozessen
(22:41:08) neoraider: Das sollte darauf keinen Einfluss haben
(22:41:26) Tarek: Wobei... du benutzt die Variable ja nur im Namen der defines, nicht im Wert, dann ist es eh egal
(22:41:33) Tarek: was meinst du im wert ?
(22:42:20) neoraider: define Package/$(PKG_NAME)
SECTION:=networke
CATEGORY:=Freifunk Nordwest
TITLE:=Select the hoods depending on the geo coordinate
DEPENDS:=+lwtrace +ffnw-hoods +dkjson +gluon-mesh-batman-adv-15 +gluon-mesh-vpn-fastd
endef z.B. setzt eine Variable namens Package/ffnw-hoodselector auf einen Wert mit 4 Zeilen
(22:42:38) neoraider: Die Sache mit := vs. = hat nur auf den Wert der Variable eine Wirkung, nicht auf den Namen
(22:44:20) neoraider: Ah, ich habe ein Problem gefunden
(22:44:28) Tarek: ok d.h. ein befehl wie luamin -f (PKG_BUILD_DIR)/
(PKG_NAME) > (PKG_BUILD_DIR)/
(PKG_NAME)-min könnte ein problem werden
(22:44:29) neoraider: Denke ich
(22:44:29) Tarek: ?
(22:44:53) neoraider: Hmm, wahrscheinlich nicht
(22:45:15) neoraider: Aber staging_dir/host/bin/luamin ist ein absoluter Link, das sollte nicht
(22:45:24) Tarek: ok und $(eval (call BuildPackage,
(PKG_NAME))) auch nicht ?
(22:45:26) neoraider: Aber das kann das Problem auch nicht auslösen
(22:45:39) neoraider: Keine Ahnung, das könnte schon problematischer sein
(22:46:16) neoraider: staging_dir/host/bin/luamin kannst du ja recht einfach in einen relativen Link umwandeln, das wäre glaube ich eine gute Idee
(22:46:50) neoraider: Hast du mal vor dem luamin nen Check eingebaut, ob es die Eingabedatei gibt?
(22:47:22) neoraider: Moment...
(22:47:51) neoraider: luamin bekommt an der Stelle nen leeren String als Namen der Eingabedatei
(22:48:27) Tarek: ok, ich kann dir nicht mehr ganz folgen
(22:49:22) neoraider: Error: no such file. (Error: ENOENT: no such file or directory, open ''
)
(22:49:25) neoraider: Da ist nen leerer String
(22:49:34) neoraider: Und vorher, als da noch snippet stand, war das auch leer
(22:50:04) Tarek: und woher könnte der leere string rühren ?
(22:50:40) neoraider: Keine Ahnung, du könntest mal weiter oben in Luamin snippets ausgeben lassen, oder process.argv
(23:04:16) Tarek: /home/tata/gluon/build/ar71xx-generic/openwrt/staging_dir/host/bin/luamin: symbolic link to /home/tata/gluon/build/ar71xx-generic/openwrt/staging_dir/host/lib/node_modules/luamin/bin/luamin
(23:04:28) Tarek: also der link scheint zu funktionieren
(23:07:07) Tarek: hm mir erschließt sich echt nicht wieso es ohne V=s nicht geht
(23:07:21) Tarek: make package/hoodselector/compile GLUON_BRANCH=stable GLUON_RELEASE=0.9 GLUON_TARGET=ar71xx-generic
(23:07:46) Tarek: bei einem core ist es übrigens auch das identische probel
(23:08:35) Tarek: könnte es evtl. bei luamin -f $(PKG_BUILD_DIR)/hoodselector > $(PKG_BUILD_DIR)/hoodselector-min an den pfeil nach rechts liegen ?
(23:10:20) neoraider: Ich denke nicht, dass es am Link liegt
(23:10:22) neoraider: Äh
(23:10:28) neoraider: Dass es am Pfeil liegt
(23:10:32) neoraider: Am Link liegt es auch nicht
(23:10:39) neoraider: Der sollte trotzdem lieber relativ sein
(23:11:22) neoraider: Hmm
(23:11:39) Tarek: https://git.nordwest.freifunk.net/ffnw-firmware/packages/commit/f87897761c8657dd77f37c59555722d046f92b16
(23:11:41) neoraider: Hast du mal probiert, in luamin noch mehr Debug-Ausgaben einzubauen?
(23:12:15) Tarek: ich hab das früher schon mal in einem makefile gehabt evtl. haben die '' was zu bedeuten
(23:12:57) neoraider: An sich werden die Variablen einfach von make ersetzt und das ganze durch sh -c ausgeführt (mit einem Shell-Aufruf pro Zeile des Makefiles)
(23:13:14) neoraider: Also sollte das > und so einfach funktionieren
(23:13:33) Tarek: jop
(23:14:34) neoraider: Ich würde sehr empfehlen, in luamin mal process.argv anzuschauen
(23:14:51) Tarek: ok
(05/17/16 01:10:41) Tarek: hm ich muss mir das mal genauer anschune wie das in JS geht :S bin schlafen
Der output von luamin der variablen process.argv und snippets sollte zum debuggen in eine datei nach /tmp/ geschreiben werden um zu prüfen welchen inhalt diese haben.