Makefile for plain C source, how to? (IMAP proxy)

M66B

Mitglied
Mitglied seit
17 Feb 2010
Beiträge
225
Punkte für Reaktionen
0
Punkte
0
How do I create a makefile for a plain C source? (this one)
For now I have created an archive myself and am hosting it on my own site.

This is the makefile so far: (the Yahoo! IMAP proxy works okay on Freetz)
Code:
$(call PKG_INIT_BIN, 0.0)
$(PKG)_SITE:=<omitted>
$(PKG)_SOURCE:=yahooproxy.tar.gz
$(PKG)_DIR:=$($(PKG)_SOURCE_DIR)/yahooproxy
$(PKG)_BINARY:=$($(PKG)_DIR)/yahooproxy
$(PKG)_TARGET_BINARY:=$($(PKG)_DEST_DIR)/usr/bin/yahooproxy

$(PKG_SOURCE_DOWNLOAD)
$(PKG_UNPACKED)
$(PKG_CONFIGURED_NOP)

$($(PKG)_BINARY): $($(PKG)_DIR)/.unpacked
	$(MAKE_ENV) $(TARGET_CC) \
	$(TARGET_CFLAGS) $(TARGET_LDFLAGS) \
	$(YAHOOPROXY_DIR)/yahooproxy.c \
	-o $(YAHOOPROXY_DIR)/yahooproxy

$($(PKG)_TARGET_BINARY): $($(PKG)_BINARY)
	$(INSTALL_BINARY_STRIP)

$(pkg)-precompiled: $($(PKG)_TARGET_BINARY)

$(pkg)-clean:
	rm $(YAHOOPROXY_DIR)/yahooproxy

$(pkg)-uninstall:
	$(RM) $($(PKG)_TARGET_BINARY)

$(PKG_FINISH)
 
Zuletzt bearbeitet:

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
7,750
Punkte für Reaktionen
10
Punkte
38

M66B

Mitglied
Mitglied seit
17 Feb 2010
Beiträge
225
Punkte für Reaktionen
0
Punkte
0
Thank you for your answer, but I am not sure what you mean.
Can you explain it a little bit more?
 

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
7,750
Punkte für Reaktionen
10
Punkte
38
Ich meine, dass Du in deinem yahooproxy-Freetz-Paket ein Verzeichnis "patches" haben solltest, in dem sich der "Makefile.patch" befindet, der dann dem entpackten Quellcode das von dir gewünschte "Makefile" beifügt.
 

M66B

Mitglied
Mitglied seit
17 Feb 2010
Beiträge
225
Punkte für Reaktionen
0
Punkte
0
Maybe I didn't explain it properly.
There is no makefile available at all (just the one for Freetz I made, see above).
The author of yahooproxy only makes available a C source for download (uncompressed).
Since the Freetz build process expects an archive (zip, gz, etc) I have no idea how to make a package for yahooproxy.
(other than packing the C source and hosting the archive myself)
 

M66B

Mitglied
Mitglied seit
17 Feb 2010
Beiträge
225
Punkte für Reaktionen
0
Punkte
0
Maybe noteworthy is that the Freetz makefile takes care of the compilation.
Code:
$($(PKG)_BINARY): $($(PKG)_DIR)/.unpacked
	$(MAKE_ENV) $(TARGET_CC) \
	$(TARGET_CFLAGS) $(TARGET_LDFLAGS) \
	$(YAHOOPROXY_DIR)/yahooproxy.c \
	-o $(YAHOOPROXY_DIR)/yahooproxy
 

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
7,750
Punkte für Reaktionen
10
Punkte
38
Maybe I didn't explain it properly.
Doch, ich habe dich schon richtig verstanden.;)
There is no makefile available at all (just the one for Freetz I made, see above).
The author of yahooproxy only makes available a C source for download (uncompressed).
Ja, es gibt zum Quellcode (in Format einer ungepackten *.c-Datei) kein Makefile und Du willst eins haben, weil Du die Kompilierung mit Hilfe eines Freetz-Paketes machen willst.
Since the Freetz build process expects an archive (zip, gz, etc) I have no idea how to make a package for yahooproxy.
(other than packing the C source and hosting the archive myself)
Den 1. Schritt hast Du schon gemacht. Du hast die *.c-Datei in ein Archiv gepackt:
Code:
$(PKG)_SOURCE:=yahooproxy.tar.gz
Jetzt fehlen noch die 2. Datein für dein Freetz-Paket: "Makefile.in", "Config.in", das Verzeichnis "patches" mit dem "Makefile.patch" und einige Änderungen an der Datei "yahooproxy.mk".
 

M66B

Mitglied
Mitglied seit
17 Feb 2010
Beiträge
225
Punkte für Reaktionen
0
Punkte
0
Doch, ich habe dich schon richtig verstanden.
Ja, es gibt zum Quellcode (in Format einer ungepackten *.c-Datei) kein Makefile und Du willst eins haben, weil Du die Kompilierung mit Hilfe eines Freetz-Paketes machen willst.
You did :p
Den 1. Schritt hast Du schon gemacht. Du hast die *.c-Datei in ein Archiv gepackt:
So this is required? Downloading a plain, uncompressed C source is not possible?

Jetzt fehlen noch die 2. Datein für dein Freetz-Paket: "Makefile.in", "Config.in", das Verzeichnis "patches" mit dem "Makefile.patch" und einige Änderungen an der Datei "yahooproxy.mk".
IMHO compiling a simple source like this does not really need a seperate makefile.

To be complete:

Config.in:
Code:
config FREETZ_PACKAGE_YAHOOPROXY
	bool "yahooproxy (binary only)"
	default n
	help
		This proxy simply takes the commands sent to it by your mail client, 
		passes them on to Yahoo, and relays them back to your client.
		It all the while looks for your client to issue a "login" command
		so that it can inject the "id" command to unlock IMAP access.
Makefile.in:
Code:
ifeq ($(strip $(FREETZ_PACKAGE_YAHOOPROXY)),y)
PACKAGES+=yahooproxy
endif
 

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
7,750
Punkte für Reaktionen
10
Punkte
38
So this is required? Downloading a plain, uncompressed C source is not possible?
Vielleicht geht es, ist mir aber nicht bekannt. Wenn Du den Qellcode im Archiv, in den dl-Ordner ablegst, wird er vom Freetz-Paket immer dort gefunden. Evtl. kann dir ein Freetz-Entwickler hier mehr sagen bzw. helfen.
IMHO compiling a simple source like this does not really need a seperate makefile.
Ja, geht auch ohne, ist aber IMHO eleganter.
To be complete:

Config.in:
Code:
config FREETZ_PACKAGE_YAHOOPROXY
	bool "yahooproxy (binary only)"
	default n
	help
		This proxy simply takes the commands sent to it by your mail client, 
		passes them on to Yahoo, and relays them back to your client.
		It all the while looks for your client to issue a "login" command
		so that it can inject the "id" command to unlock IMAP access.
Makefile.in:
Code:
ifeq ($(strip $(FREETZ_PACKAGE_YAHOOPROXY)),y)
PACKAGES+=yahooproxy
endif
OK.
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
0
Punkte
0
You're right that Freetz doesn't support the download of a single C-Source. As this is the first time report of such a case, I think it is not worth the changes to support this, as you can create easily an archive containing the file. I also think the author should provide at least a Makefile, even for just one source file, and should create an archive with a version in the name.

You don't have to upload the archive to any site, you can just copy the archive to the dl directory in Freetz, and it will not try to download the file that is already there.
 

M66B

Mitglied
Mitglied seit
17 Feb 2010
Beiträge
225
Punkte für Reaktionen
0
Punkte
0

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
0
Punkte
0
I just noticed that they offer a Zip-file for Cygwin. Assuming it contains the same C source, you can use that.

And maybe the author would create a package with a makefile, especially if you send one.
 
Zuletzt bearbeitet:

M66B

Mitglied
Mitglied seit
17 Feb 2010
Beiträge
225
Punkte für Reaktionen
0
Punkte
0
Good tip, I assumed it was a different source, but it isn't.
 

M66B

Mitglied
Mitglied seit
17 Feb 2010
Beiträge
225
Punkte für Reaktionen
0
Punkte
0
Unfortunately the .zip file does not contain a folder.
 

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
7,750
Punkte für Reaktionen
10
Punkte
38
Verzeichnis kannst mit dem Freetz-Paket erstellen:
Code:
$(call PKG_INIT_BIN, win)
$(PKG)_SOURCE:=$(pkg)-$($(PKG)_VERSION).zip
$(PKG)_SOURCE_MD5:=aac337c15cda8c08a9d3c11177dccc2a
$(PKG)_SITE:=http://www.ameir.net/files/
$(PKG)_C:=$(SOURCE_DIR)
$(PKG)_DIR:=$(SOURCE_DIR)/$(pkg)
$(PKG)_BINARY:=$(SOURCE_DIR)/$(pkg)/$(pkg)
$(PKG)_TARGET_BINARY:=$($(PKG)_DEST_DIR)/usr/bin/$(pkg)

$(PKG_SOURCE_DOWNLOAD)
$(PKG_UNPACKED)
$(PKG_CONFIGURED_NOP)

$($(PKG)_BINARY): $($(PKG)_DIR)/.configured
		mv $(YAHOOPROXY_C)/yahooproxy.c \
		$(YAHOOPROXY_DIR)/yahooproxy.c 
		rm $(YAHOOPROXY_C)/yahooproxy.exe
		rm $(YAHOOPROXY_C)/cygwin1.dll
		$(SUBMAKE) -C $(YAHOOPROXY_DIR) \
		..........
		..........

$($(PKG)_TARGET_BINARY): $($(PKG)_BINARY)
	$(INSTALL_BINARY_STRIP)

$(pkg):

$(pkg)-precompiled: $($(PKG)_TARGET_BINARY)

$(pkg)-clean:
	-$(SUBMAKE) -C $(YAHOOPROXY_DIR) clean
	 $(RM) $(YAHOOPROXY_DIR)/.configured

$(pkg)-uninstall:
	$(RM) $(YAHOOPROXY_TARGET_BINARY)

$(PKG_FINISH)
EDIT:
Mit dieser Makefile-Datei kannst Du dein binary kompilieren:
Code:
TGT=yahooproxy

CC=
CFLAGS=
LIBS=
ARCH=mipsel-linux

PREFIX = /usr
CONFDIR = /var/mod/etc
BINDIR = /usr/bin

${TGT}: Makefile ${TGT}.c 
	${CC} ${CFLAGS} -D${ARCH} -DPREFIX=\"${PREFIX}\" ${TGT}.c -o ${TGT} ${LIBS}
Code:
:~/myfreetz/freetz4945/freetz-trunk> file packages/yahooproxy-win/root/usr/bin/yahooproxy
packages/yahooproxy-win/root/usr/bin/yahooproxy: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked (uses shared libs), stripped
So sieht meine ergänzte "yahooproxy.mk"-Datei aus:
Code:
$(call PKG_INIT_BIN, win)
$(PKG)_SOURCE:=$(pkg)-$($(PKG)_VERSION).zip
$(PKG)_SOURCE_MD5:=aac337c15cda8c08a9d3c11177dccc2a
$(PKG)_SITE:=http://www.ameir.net/files/
$(PKG)_C:=$(SOURCE_DIR)
$(PKG)_DIR:=$(SOURCE_DIR)/$(pkg)
$(PKG)_BINARY:=$(SOURCE_DIR)/$(pkg)/$(pkg)
$(PKG)_TARGET_BINARY:=$($(PKG)_DEST_DIR)/usr/bin/$(pkg)

$(PKG_SOURCE_DOWNLOAD)
$(PKG_UNPACKED)
$(PKG_CONFIGURED_NOP)

[COLOR="Red"]$($(PKG)_BINARY): $($(PKG)_DIR)/.configured
		mv $(YAHOOPROXY_C)/yahooproxy.c \
		$(YAHOOPROXY_DIR)/yahooproxy.c 
		cp $(YAHOOPROXY_C)/Makefile \
		$(YAHOOPROXY_DIR)/
		rm $(YAHOOPROXY_C)/yahooproxy.exe
		rm $(YAHOOPROXY_C)/cygwin1.dll
		$(SUBMAKE) -C $(YAHOOPROXY_DIR) \
		CC="$(TARGET_CC)" \
		CFLAGS="$(TARGET_CFLAGS)"[/COLOR]

$($(PKG)_TARGET_BINARY): $($(PKG)_BINARY)
	$(INSTALL_BINARY_STRIP)

$(pkg):

$(pkg)-precompiled: $($(PKG)_TARGET_BINARY)

$(pkg)-clean:
	-$(SUBMAKE) -C $(YAHOOPROXY_DIR) clean
	 $(RM) $(YAHOOPROXY_DIR)/.configured

$(pkg)-uninstall:
	$(RM) $(YAHOOPROXY_TARGET_BINARY)

$(PKG_FINISH)
 
Zuletzt bearbeitet:

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
0
Punkte
0
Man muß nicht zwangsläufig ein SUBMAKE verwenden, man kann den Compiler auch aus dem anderen Makefile direkt aufrufen.
Und das Beispiel-Makefile übergibt unnötigerweise PREFIX und ARCH, wobei speziell ARCH seltsame Effekte hätte, wenn es verwendet werden würde.
 

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
7,750
Punkte für Reaktionen
10
Punkte
38
Danke für die Korrektur bzw. für den Verbesserungsvorschlag.
 

M66B

Mitglied
Mitglied seit
17 Feb 2010
Beiträge
225
Punkte für Reaktionen
0
Punkte
0
Works perfectly, thanks.

Attached a complete patch, for if someone wants to use this proxy.
 

Anhänge

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
0
Punkte
0
So ganz verstehe ich den roten Teil oben nicht. Ich würde sogar vermuten, daß DU ihn nicht ausprobiert hast.

Mein Kommentar bezog sich auf diese Zeile im anderen Makefile:
Code:
${CC} ${CFLAGS} -D${ARCH} -DPREFIX=\"${PREFIX}\" ${TGT}.c -o ${TGT} ${LIBS}
Vermutlich ist es doch sinnvoller, ein Archiv mit Pfadnamen zu erstellen.
 

sf3978

IPPF-Promi
Mitglied seit
2 Dez 2007
Beiträge
7,750
Punkte für Reaktionen
10
Punkte
38
So ganz verstehe ich den roten Teil oben nicht. Ich würde sogar vermuten, daß DU ihn nicht ausprobiert hast.
[...]
Deine Vermutung ist leider falsch.;) I. d. R. poste ich nur Sachen die ich getestet habe. Und das ist hier auch der Fall. Bei mir funktioniert auch der "rote Teil".

EDIT:
Das hat M66B in seinem Patch:
Code:
+$($(PKG)_BINARY): $($(PKG)_DIR)/.configured
+	mv $(YAHOOPROXY_C)/yahooproxy.c \
+	$(YAHOOPROXY_DIR)/yahooproxy.c 
+	rm $(YAHOOPROXY_C)/yahooproxy.exe
+	rm $(YAHOOPROXY_C)/cygwin1.dll
+	$(MAKE_ENV) $(TARGET_CC) \
+	$(TARGET_CFLAGS) $(TARGET_LDFLAGS) \
+	$(YAHOOPROXY_DIR)/yahooproxy.c \
+	-o $(YAHOOPROXY_DIR)/yahooproxy
EDIT 2:
Hier ein "make yahooproxy-precompiled" mit meinem "kranken" Makefile;):
Code:
:~/myfreetz/freetz4945/freetz-trunk> make yahooproxy-precompiled
mkdir -p packages/yahooproxy-win/root
if test -d make/yahooproxy/files; then tar -c -C make/yahooproxy/files --exclude=.svn . | tar -x -C packages/yahooproxy-win ; fi
---> package/yahooproxy: preparing... unzip  -u dl/yahooproxy-win.zip -d source/target-mipsel_uClibc-0.9.29
Archive:  dl/yahooproxy-win.zip
  inflating: source/target-mipsel_uClibc-0.9.29/yahooproxy.exe
  inflating: source/target-mipsel_uClibc-0.9.29/cygwin1.dll
  inflating: source/target-mipsel_uClibc-0.9.29/yahooproxy.c
set -e; shopt -s nullglob; for i in make/yahooproxy/patches/*.patch; do tools/freetz_patch source/target-mipsel_uClibc-0.9.29/yahooproxy $i; done
mv source/target-mipsel_uClibc-0.9.29/yahooproxy.c \
                source/target-mipsel_uClibc-0.9.29/yahooproxy/yahooproxy.c
cp source/target-mipsel_uClibc-0.9.29/Makefile \
                source/target-mipsel_uClibc-0.9.29/yahooproxy/
rm source/target-mipsel_uClibc-0.9.29/yahooproxy.exe
rm source/target-mipsel_uClibc-0.9.29/cygwin1.dll
cmd() { PATH="/home/gm/myfreetz/freetz4945/freetz-trunk/toolchain/target/bin:/home/gm/myfreetz/freetz4945/freetz-trunk/toolchain/kernel/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin" LD_RUN_PATH="/usr/lib/freetz" make -j2  "[email protected]"  || { printf "\n\\033[33m%s\\033[m\n" "ERROR: Build failed.";  exit 1; } };      if [ -e source/.echo_item_start -a ! -e source/.echo_item_build ]; then echo -n "building... "; touch source/.echo_item_build; fi; cmd -C source/target-mipsel_uClibc-0.9.29/yahooproxy \
                CC="/home/gm/myfreetz/freetz4945/freetz-trunk/toolchain/target/bin/mipsel-linux-uclibc-gcc" \
                CFLAGS="-Os -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
building... make[1]: Entering directory `/home/gm/myfreetz/freetz4945/freetz-trunk/source/target-mipsel_uClibc-0.9.29/yahooproxy'
/home/gm/myfreetz/freetz4945/freetz-trunk/toolchain/target/bin/mipsel-linux-uclibc-gcc -Os -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Dmipsel-linux -DPREFIX=\"/usr\" yahooproxy.c -o yahooproxy
<command-line>: warning: missing whitespace after the macro name
make[1]: Leaving directory `/home/gm/myfreetz/freetz4945/freetz-trunk/source/target-mipsel_uClibc-0.9.29/yahooproxy'
mkdir -p packages/yahooproxy-win/root/usr/bin/; cp source/target-mipsel_uClibc-0.9.29/yahooproxy/yahooproxy packages/yahooproxy-win/root/usr/bin/yahooproxy; /home/gm/myfreetz/freetz4945/freetz-trunk/toolchain/target/bin/mipsel-linux-uclibc-strip --remove-section={.comment,.note,.pdr} packages/yahooproxy-win/root/usr/bin/yahooproxy;
done.
 
Zuletzt bearbeitet:

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,592
Beiträge
2,024,546
Mitglieder
350,422
Neuestes Mitglied
MachtNix04