amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Automatisches Datum increase [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

02.06.2007, 18:29 Uhr

bernd_roesch
Posts: 364
[Benutzer gesperrt]
Ich möchte, dass das Datum automatisch ohne extra Zeitaufwand beim compilieren eingefügt wird.
Da man in C selten alles compiliert , oder es vorkommen kann, dass das file in dem der Versionsstring steht nicht neu kompiliert wird
müsste das file mit den Versionsangaben in einer include sein.

Das geht aber nicht wenn ich das in ein include tue das jedes file eincompiliert.

const char version[] = "\0$VER: Version 3.96.1 "__DATE__ ;

Der linker meldet dann mehrfach deklaration.

Es gibt auch in devcpp ein automatisches buildincrease.evtl kann man da was machen
Dazu wird ein file exec_lib_private.rc immer erstellt.mache ich ein file windows.h das obige Zeile enthält.den rest kann ich nicht beeinflussen.

Es kommt in der Zeile FILETYPE der Error.
FILETYPE VFT_APP

Kann man da mit defines was machen, dass der compiler den rest ignoriert ?

Compiler: m68k-AmigaOS
Building Makefile: "E:\amiga\AmiDevCpp\usr\local\amiga\Makefile.win"
Executing make...
make.exe -f "E:\amiga\AmiDevCpp\usr\local\amiga\Makefile.win" all
windres.exe -i exec_lib_private.rc --input-format=rc -o exec_lib_private.res -O coff --include-dir E:/amiga/AMIDEV~1/usr/local/amiga/afa_os/include

In file included from exec_lib_private.rc:4:
E:/amiga/AMIDEV~1/usr/local/amiga/afa_os/include/windows.h:2:2: warning: no newline at end of file
windres.exe: exec_lib_private.rc:13: syntax error

make.exe: *** [exec_lib_private.res] Error 1

Execution terminated

/* THIS FILE WILL BE OVERWRITTEN BY DEV-C++ */
/* DO NOT EDIT! */

#include <windows.h> // include for version info constants


//
// TO CHANGE VERSION INFORMATION, EDIT PROJECT OPTIONS...
//
1 VERSIONINFO
FILEVERSION 0,1,1,4
PRODUCTVERSION 0,1,1,4
FILETYPE VFT_APP
{
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "CompanyName", ""
VALUE "FileVersion", ""
VALUE "FileDescription", "Developed using the Dev-C++ IDE"
VALUE "InternalName", ""
VALUE "LegalCopyright", ""
VALUE "LegalTrademarks", ""
VALUE "OriginalFilename", ""
VALUE "ProductName", ""
VALUE "ProductVersion", ""
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0409, 1252
}
}






Was kann man da machen ?



[ - Antworten - Zitieren - Direktlink - ]

02.06.2007, 19:40 Uhr

akl
Posts: 265
Nutzer
@bernd_roesch:
siehe http://aminet.net/package/dev/c/BumpRev vom 15.08.92

was das "duplicate declarion"-Problem angeht, gibt es dafür das magische Wort "static"

[ - Antworten - Zitieren - Direktlink - ]

02.06.2007, 20:24 Uhr

cgutjahr
Posts: 2779
[Administrator]
Zitat:
Original von akl:
siehe http://aminet.net/package/dev/c/BumpRev vom 15.08.92

Das hier ist deutlich neuer:

http://aminet.net/package/dev/misc/revbump

Allerdings hatte ich das nicht selbst vorgeschlagen, da Bernd m.W. nicht unter AmigaOS compiliert?


--
Gutjahrs Amiga Seiten

[ - Antworten - Zitieren - Direktlink - ]

03.06.2007, 00:30 Uhr

Kaesebroetchen
Posts: 643
Nutzer
@bernd_roesch:
Ich schätze die Dev-Cpp Funktion kannst du dafür nicht nehmen. Die schmeisst nämlich den Windows Ressourcen Compiler (windres.exe) an und der versucht dann windows x86code in deine 68k executables einzubauen!

Ich meine im Kommentarbereich hätte jemand (Darius ?) erwähnt, das man sowas ins makefile einbauen könnte.
Das Makefile wird allerdings von Dev-Cpp generiert.
Mit der Option "Folgende Datei ins Makefile einschließen" im Menü Projekt->Projekt Optionen->MakeFile könnte es aber klappen.
--
http://amidevcpp.amiga-world.de/

[ - Antworten - Zitieren - Direktlink - ]

03.06.2007, 10:47 Uhr

akl
Posts: 265
Nutzer
@cgutjahr:
Problem und Lösung sind jedenfalls seit ca. 15 Jahren bekannt, der Quellcode ist enthalten - und die neuere Version (Link von Dir) beinhaltet auch ein makefile für Linux.

[ - Antworten - Zitieren - Direktlink - ]

04.06.2007, 11:32 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von akl:
was das "duplicate declarion"-Problem angeht, gibt es dafür das magische Wort "static"

Das ist keine sinnvolle Lösung. Schließlich ist dann der String ein dutzend Mal im Code enthalten und, wenn wirklich nicht alle .c Dateien übersetzt wurden, zu allem Überfluss auch noch mit verschiedenen Datumsangaben.

Nein, die Zeile
code:
const char version[] = "\0$VER: Version 3.96.1 "__DATE__ ;

gehört nicht in einen Header, sondern einfach mal in eine eigene .c Datei, die mit allen anderen zusammengelinkt wird.

Das die nicht jedes Mal neu übersetzt wird, macht überhaupt nichts, denn solange nicht die Versionsnummer geändert wird, sollte auch das Datum nicht verändert werden. Und sobald die Versionsnummer geändert wird, wird auch die .c Datei verändert, in der die Zeile steht, und somit auch neu übersetzt.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

04.06.2007, 13:25 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von Holger:
code:
const char version[] = "\0$VER: Version 3.96.1 "__DATE__ ;

gehört nicht in einen Header, sondern einfach mal in eine eigene .c Datei, die mit allen anderen zusammengelinkt wird.

Diese Zeile gehört schonmal gar nicht in irgendein .c-Datei, da sie kompletter Müll ist. ;)

Das normale Datum welches der Compiler für __DATE__ einsetzt ist nicht Standard-/Styleguidekonform. Mit SAS/C kann man einfach __AMIGADATE__ verwenden. GCC kennt das normalerweise nicht, kann man sich aber recht einfach behelfen indem man:

CDEFS += -D__AMIGADATE__=\"$(shell date "+%d.%m.%y")\"

in's Makefile einbaut.

Weiterhin wird das Program wohl kaum 'Version' heissen, dort gehört der richtige Programname hin. Auch ist die Build-Nummer eigentlich nicht passend in einem Amiga-Program.


Das führende NULL-Byte kann man sich auch sparen. Das ist nur nützlich in einem versions string define und man weniger Symbole exportieren möchte und es einfach an einem anderen String anhängt.

code:
#define VERSIONSTRING "\0$VER: App 1.0 (01.01.2007)"

/* und dann irgendwo, z.B.: */
SA_Title, "My Screen" VERSIONSTRING


für die Extremoptimierer halt. ;)





Also noch mal zusammengefasst:
"$VER: Application-Name VERSION.REVISION (DD.MM.YYYY)"
--
http://www.christianrosentreter.com ~ MorphOS Software

[ - Antworten - Zitieren - Direktlink - ]

04.06.2007, 14:15 Uhr

bernd_roesch
Posts: 364
[Benutzer gesperrt]
>Ich meine im Kommentarbereich hätte jemand (Darius ?) erwähnt, das man sowas ins makefile einbauen könnte.

die lösung bumprev könnten funktionieren wenn ich den source für windows kompiliere.
Nur muss ich in devcpp das bumprev exe vor dem kompilieren starten,damit das file neu erzeugt wird und mitkompiliert wird.

evtl kann man über die externen makefiles executables starten ?

>Das normale Datum welches der Compiler für __DATE__ einsetzt ist nicht Standard-/Styleguidekonform.

Hat aber den Vorteil, dass man weis welches der Monat ist. es wird so angegebne 1. jun 2007

>CDEFS += -D__AMIGADATE__=\"$(shell date "+%d.%m.%y")\"

Da verwechselt ein englischer User evtl monat mit Tag .macht mans andersrum verwechselt es evtl ein deutscher User.

>Und sobald die Versionsnummer geändert wird, wird auch die .c Datei verändert, in der die Zeile steht, und somit

aber mich stört es , wenn man zeit aufwenden muss die Versionsnummer zu erhöhen und datum anzupassen.
anderswo geht das vollautomatisch, ohne das man einen Finger dafür rühren muss.so wollte ich das auch haben, zumal ich sowieso keinen
nutzen in in Versionsnummern sehe.Ich achte seit jeher auf das datum,das der dateimanager angibt.das datum habe ich noch nie verloren.
wenn man ein file per wb oder dopsu kopiert, dann wird das Datum übernommen.

derzeit hat AFA nur 9 exe, aber ist schon lästig wenn man jetzt in 9 files das alles ändern soll.
Das ganze kickrom ersetzen sind dann ca 50 files.das ist dann echt nervig wenn man Versionsnummern von Hand ändern soll.

[ - Antworten - Zitieren - Direktlink - ]

04.06.2007, 14:44 Uhr

tokai
Posts: 1071
Nutzer
Zitat:
Original von bernd_roesch:
>Das normale Datum welches der Compiler für __DATE__ einsetzt ist nicht Standard-/Styleguidekonform.

Hat aber den Vorteil, dass man weis welches der Monat ist. es wird so angegebne 1. jun 2007

>CDEFS += -D__AMIGADATE__=\"$(shell date "+%d.%m.%y")\"

Da verwechselt ein englischer User evtl monat mit Tag .macht mans andersrum verwechselt es evtl ein deutscher User.


Du hast wohl noch nicht bemerkt, dass der Versions-Befehl das Datum ausliest und entsprechend der Locale-Einstellungen darstellt? Nun gut... mit Deinen Versions-Tags im "Bernd-Rösch-Zufalls-Format" funktioniert das dann natürlich nicht, d.h. kannst Du das ja gar nicht wissen. ;) Jedenfalls tolle Argumente um nicht dem StyleGuide zu folgen! ;)


Und btw. mit GCC wird es "Jun 4 2007" und nicht "4. jun 2007".
--
http://www.christianrosentreter.com ~ MorphOS Software

[ - Antworten - Zitieren - Direktlink - ]

04.06.2007, 16:06 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von tokai:
Diese Zeile gehört schonmal gar nicht in irgendein .c-Datei, da sie kompletter Müll ist. ;)

Nun gut, so genau hab ich sie mir gar nicht angesehen.
Zitat:
Das normale Datum welches der Compiler für __DATE__ einsetzt ist nicht Standard-/Styleguidekonform.
Wie man's nimmt. Da das Datum ja nicht in Klammern steht, also nicht als solches interpretiert wird, ist es de facto nur Zusatztext, der bei version full angezeigt wird. Verletzt insofern auch kein style guide.

Natürlich wäre es schön, wenn statt eines Zusatztextes ein Datum im Versionsstring stehen würde. Aber andererseits muss man manchmal froh sein, wenn ein Autor überhaupt den Nutzen eines Versionsstrings (mit Versionsnummer) einsieht.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

04.06.2007, 16:24 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Bernd
In einer Makefile kann man auch executables ausführen.
Wenn du willst, kann ich dir ein kleines Tool schreiben, dass die Revisionssnummer bei jedem Aufruf erhöht und eine .h Datei generiert, die du dann in den Main C Files includen kannst, und dir ein #define macht das den String enthält, etwa so:

AfA_Version.h:
code:
#ifndef __REVISION__
#define __REVISION__ 96
#endif
#ifndef __VERSION__
#define __VERSION__ 3
#endif


Damit hast du keine Probleme wenn du das mehrfach includest.
Die Versionsnummber kann man dann ja im Makefile hardcoden. Wenn du die AfA Version erhöhst, musst du das manuell ändern, aber nur in einer einzigen Datei.

Dein Versionstring bastelst du dann so zusammen:

const char version[] = "\0$VER: Version "__VERSION__"."__REVISION__" ("__DATE__")\0";


So ein Tool habe ich in <5min geschrieben.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

05.06.2007, 16:49 Uhr

bernd_roesch
Posts: 364
[Benutzer gesperrt]
>Du hast wohl noch nicht bemerkt, dass der Versions-Befehl das Datum ausliest und entsprechend der Locale-Einstellungen darstellt?

tatsächlich, wenn man es so macht wie du das geschrieben hast wird es von rawbinfo richtig angezeigt.
aber letztendlich ist das dann ein noch grösseres Lottospiel.Hat es jetzt rawbinfo konvertiert oder nicht.

Mach ich z.b rawbinfo bei Amistart
V0.66c Version (19.08.2006)
steht da immer dasselbe.
Wieso geht das bei amistart nicht ?

dagegen habe ich den source,

const char version[] = "$VER: version 3.96.1 (01.04.2007) "__DATE__ ;

dann gibt rawbinfo bei american setting das raus.

3.96.1 (04/01/2007)

Das __DATE__ erscheint garnicht mehr und version wird auch nicht geschrieben.

>wenn ein Autor überhaupt den Nutzen eines Versionsstrings (mit Versionsnummer) einsieht.

Den nutzen eines Versionsstring hat mir noch keiner erklärt, der ist nur gegeben wenn das File Datum verloren geht.
ansonsten ist ein filedatum immer aussagekräftiger als eine Versionsnummer.Und man kommt mit filemanager schneller an das Datum als wenn man
erst rawbinfo oder version Befehl aufrufen muss.

einzigstes Problem ist ,dass AOS ohne den zusatz clone in der shell das filedatum nicht mitkopiert.
Wie ist das eigentlich in der shell bei Linux windows.wird da das filedatum mitkopiert ?

Ich denke das ist eher ein design Fehler in AOS, man sollte den
shell copybefehl so machen wie es in jedem dateimanager auch ist.oder man nutzt nen alternativ copybefehl aus dem aminet.

>In einer Makefile kann man auch executables ausführen.

Ja und wie geht das ?
schreib ich in das makefileextension von amidev irgendwas rein

Hat denn keiner vollautomatische Versionen am Amiga ?
in der doku von revbump soll man das wohl von Hand jedesmal starten.nirgends ist erklärt wie man das in sein makefile einbaut
wie wäre es mal wenn jemand ein makefile postet das revbump automatisch ausführt ?.


[ - Antworten - Zitieren - Direktlink - ]

05.06.2007, 17:52 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Bernd

In dem Makefile für GCC kann man einfach Executables schreiben, wie in einem DOS Script.
Das wird z.B. beim compilieren der HD-Rec Effekte so benutzt, evtl. kannst du dir das Makefile anschauen als Beispiel.

...
echo "Das ist ein Test" >myTextFile.txt
echo "Und das ist die Zeile zwei..." >>myTestFile.txt
...

Würde eine TextDatei erstellen.
So kann man sich z.B. auch Kommandozeilen generieren, die man später wieder einliesst:

GCC <myTestfile.txt

oder in der Makefile selbst includiert.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Automatisches Datum increase [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.