Gscreendump, kompilering på Ubuntu 8.04

Kategori overført fra Linux1

Gscreendump, kompilering på Ubuntu 8.04

Innleggav TO » søn 05.04.2009 22:42

Jeg prøver å kompilere Gscreendump tatt fra http://code.google.com/p/gscreendump/source/checkout nå. Jeg bruker 32 bits Ubuntu 8.04, det kompilerer ikke.
(Deb-pakken for 8.10 fungerer ikke på denne 8.04, gscreendump vil ikke starte)

Utfra hva jeg ser så er ./configure OK:
Kode: Merk alt
$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for g++... g++
checking for C++ compiler default output file name... a.out
checking whether the C++ compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking for a BSD-compatible install... /usr/bin/install -c
checking whether make sets $(MAKE)... (cached) yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for GTK... yes
checking for GTHREAD... yes
checking for GCONF... yes
checking for GNOME_VFS... yes
checking for GTKIMAGEVIEW... yes
checking for IMAGEWAND... yes
checking how to run the C preprocessor... gcc -E
checking for X... libraries , headers
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/wait.h that is POSIX.1 compatible... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking libintl.h usability... yes
checking libintl.h presence... yes
checking for libintl.h... yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking for unistd.h... (cached) yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for pid_t... yes
checking for size_t... yes
checking vfork.h usability... no
checking vfork.h presence... no
checking for vfork.h... no
checking for fork... yes
checking for vfork... yes
checking for working fork... yes
checking for working vfork... (cached) yes
checking whether lstat dereferences a symlink specified with a trailing slash... yes
checking whether stat accepts an empty string... no
checking for vprintf... yes
checking for _doprnt... no
checking for floor... yes
checking for memset... yes
checking for modf... yes
checking for pow... yes
checking for sqrt... yes
checking for strchr... yes
checking for strtol... yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking for LC_MESSAGES... yes
checking for libintl.h... (cached) yes
checking for ngettext in libc... yes
checking for dgettext in libc... yes
checking for bind_textdomain_codeset... yes
checking for msgfmt... /usr/bin/msgfmt
checking for dcgettext... yes
checking if msgfmt accepts -c... yes
checking for gmsgfmt... /usr/bin/msgfmt
checking for xgettext... /usr/bin/xgettext
checking for catalogs to be installed...  nb_NO
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating po/Makefile.in
config.status: creating src/config.h
config.status: src/config.h is unchanged
config.status: executing depfiles commands
config.status: executing default-1 commands


Jeg får feil for make:
Kode: Merk alt
$ make
Making all in src
make[1]: Entering directory `/home/TO/src/gscreendump-read-only/src'
make  all-am
make[2]: Entering directory `/home/TO/src/gscreendump-read-only/src'
if gcc -DHAVE_CONFIG_H -I. -I. -I. -DPACKAGE_DATA_DIR=\""/usr/share"\" -DPACKAGE_LOCALE_DIR=\""/usr/share/locale"\" -DPACKAGE_BIN_DIR=\""/usr/bin"\" -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1   -DORBIT2=1 -pthread -I/usr/include/gconf/2 -I/usr/include/orbit-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include   -pthread -DORBIT2=1 -I/usr/include/gnome-vfs-2.0 -I/usr/include/gnome-vfs-module-2.0 -I/usr/lib/gnome-vfs-2.0/include -I/usr/include/gconf/2 -I/usr/include/orbit-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include       -g -O2 -Wall -MT main.o -MD -MP -MF ".deps/main.Tpo" -c -o main.o main.c; \
   then mv -f ".deps/main.Tpo" ".deps/main.Po"; else rm -f ".deps/main.Tpo"; exit 1; fi
In file included from main.c:44:
sd_canvas.h:170: error: expected ‘)’ before ‘*’ token
make[2]: *** [main.o] Error 1
make[2]: Leaving directory `/home/TO/src/gscreendump-read-only/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/TO/src/gscreendump-read-only/src'
make: *** [all-recursive] Error 1


Her er det rundt linje 170 i sd_canvas.h:
Kode: Merk alt
$ nl -ba ./src/sd_canvas.h |grep -C3 170
   167   
   168   void canvas_rotate_image(gchar *filename, double angle);
   169   void canvas_flip_image(gchar *filename, gchar direction/*'h' or 'v'*/);
   170   void canvas_run_image_application(GAppInfo *app, gchar *filename);
   171   
   172   GString *canvas_get_selection_as_text(gchar delim_ch, gchar quote_ch, gboolean convert_to_uri);
   173   gchar **canvas_get_selection_as_uri_list();
medlem i 212 måneder
 

Re: Gscreendump, kompilering på Ubuntu 8.04

Innleggav moma » søn 12.04.2009 20:01

Hei TO,
og beklager at du ikke har fått noe svar ennå. Er ikke så ofte på dev1.no.

Jeg har en gammel 8.04 partisjon liggende så jeg skal boote i den og sjekke kildekoden der. 8.04 og 8.10 har ulike versjoner av GTK-bilioteket. De fleste ulikhetene er lett å omgå med programmering.

Jeg kommer med bedre svar litt senere.

(ps. laget et par demo-videoer (screencast-[1-3].avi)
----------------------------------------------------
EDIT:
Jeg har nå sjekket koden under Ubuntu 8.04. Aller fleste av kompileringsfeil under 8.04 er lett å rettes opp. F.eks den [sd_canvas.h:170: ] feilen mangler header filen <gio/gio.h>, så du kunen legge til #include <gio/gio.h> i sd_capture.h. Den vil rette opp samme feilen i et par andre steder. På samme måten mabgler filen "sd_file.c" #include <signal.h> for SIGTERM.

Men noen andre feil som kommer senere i kompileringa krever mer om-programmering, som jeg dessverre ikke kan gjøre nå. F.eks GTK-bilioteket i 8.04 mangler "gtk_clipboard_wait_is_uris_available" funksjonen. Filen "sd_drag_drop.c" benytter den. Man kan sikkert om-programmere rundt det ved å benytte "gtk_clipboard_wait_is_target_available" med riktige parametere. Men...

Dessverre jeg kommer til å droppe Ubuntu 8.04. Nå er det 8.10 og spesielt 9.04 som gjelder. Sorry TO!. Vil du kunne ta ansvaret for Gscreendump v0.2 på Ubuntu 8.04?

Jeg fikset de enkle feilene i min lokale kopi (har ikke gjort svn commit ennå) , men disse gjenstående feilene vil dessverre punktere Gscreendump på 8.04:
sd_drag_drop.c:537: undefined reference to `gtk_clipboard_wait_is_uris_available'
sd_drag_drop.c:276: undefined reference to `gtk_clipboard_wait_is_uris_available'
sd_interface.c:471: undefined reference to `gtk_image_new_from_gicon'
sd_canvas.c:2199: undefined reference to `gtk_image_new_from_gicon'
sd_progress_dialog.c:850: undefined reference to `gtk_dialog_get_action_area'

--------------------------------

Jeg legger også Gscreendump v0.2 til siden og begynner med versjon 0.3 som vil bli annerledes på noen punkter. F.eks det vil bli mulig å tegne primitive ting som sirkler og streker og legge til tekst på bildene. Man vil også kunne legge til tale-bobler (callouts) osv.

Beste hilsen
Moma

Erfaren
Brukerens avatar
medlem i 234 måneder
 

Re: Gscreendump, kompilering på Ubuntu 8.04

Innleggav TO » søn 12.04.2009 21:32

Takker for hjelpa moma, siden jeg regner med å bruke Ubuntu 8.04 lenge så kunne jeg i prinsippet støttet en deb-pakke for Ubuntu 8.04. Uheldigvis så har jeg ikke kunnskap/erfaring om det som det er snakk om her. Begynner likevel å samle noen informasjonslenker:

Mht. nå: `gtk_clipboard_wait_is_uris_available'
og mulig erstatter: 'gtk_clipboard_wait_is_target_available':
http://library.gnome.org/devel/gtk/unst ... oards.html

Mht. nå `gtk_image_new_from_gicon'
og mulig erstatter: ?
http://library.gnome.org/devel/gtk/unst ... Image.html

Mht. nå `gtk_dialog_get_action_area'
og mulig erstatter: ?
http://library.gnome.org/devel/gtk/unst ... ialog.html

EDIT (status rapport mht. arbeid som pågår, og stort sett gjetting :-P ):
Kode: Merk alt
Index: src/sd_canvas.c
===================================================================
--- src/sd_canvas.c   (revision 98)
+++ src/sd_canvas.c   (working copy)
@@ -2195,8 +2195,15 @@
       gchar *tip = g_strdup_printf (_("Use \"%s\" to open the selected image"), g_app_info_get_name(app));
    
       /* Application icon */
+      /*
       GIcon *icon = g_app_info_get_icon(app);
       GtkWidget *icon_widget = gtk_image_new_from_gicon(icon, GTK_ICON_SIZE_MENU);
+      */
+      /*start, by TO*/
+      GIcon *icon = g_app_info_get_icon(app);
+      const char *        byTO_icon_name =g_app_info_get_name(app);
+      GtkWidget *icon_widget = gtk_image_new_from_icon_name(byTO_icon_name, GTK_ICON_SIZE_MENU);
+      /*end, by TO*/
 
       menu_item = gtk_image_menu_item_new_with_label(label);
       gtk_widget_show(menu_item);

Index: src/sd_interface.c
===================================================================
--- src/sd_interface.c   (revision 98)
+++ src/sd_interface.c   (working copy)
@@ -467,9 +467,17 @@
       gchar *tip = g_strdup_printf (_("Use \"%s\" to open the selected image"), g_app_info_get_name(app));
 
       /* Application icon */
+      /*
       GIcon *icon = g_app_info_get_icon(app);
       GtkWidget *icon_widget = gtk_image_new_from_gicon(icon, GTK_ICON_SIZE_MENU);
+      */
+      /*start, by TO*/
+      GIcon *icon = g_app_info_get_icon(app);
+      const char *        byTO_icon_name =g_app_info_get_name(app);
+      GtkWidget *icon_widget = gtk_image_new_from_icon_name(byTO_icon_name, GTK_ICON_SIZE_MENU);
+      /*end, by TO*/
 
+
       menu_item = gtk_image_menu_item_new_with_label(label);
       gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), icon_widget);


Kode: Merk alt
Index: src/sd_capture.h
===================================================================
--- src/sd_capture.h   (revision 98)
+++ src/sd_capture.h   (working copy)
@@ -20,7 +20,7 @@
 
 #ifndef SD_CAPTURE_H
 #define SD_CAPTURE_H
-
+#include <gio/gio.h>
 #include <stdio.h>
 #include <stdlib.h>
 
Index: src/sd_file.c
===================================================================
--- src/sd_file.c   (revision 98)
+++ src/sd_file.c   (working copy)
@@ -21,6 +21,7 @@
 
 #include <gio/gio.h>
 
+#include <signal.h>
 #include "sd_support.h"
 #include "sd_interface.h"
 #include "sd_thumb_view.h"


Kode: Merk alt
Index: src/sd_drag_drop.c
===================================================================
--- src/sd_drag_drop.c   (revision 98)
+++ src/sd_drag_drop.c   (working copy)
@@ -264,6 +264,10 @@
    GdkAtom atom_text_html = gdk_atom_intern("text/html", FALSE);
    GdkAtom atom_text_http = gdk_atom_intern("text/http", FALSE);
 
+   /* by TO */
+   GdkAtom atom_uri_list = gdk_atom_intern ("text/uri-list", FALSE);
+
+
    #if 0
    /* Debug formats */
    gtk_clipboard_request_targets(cb, clipboard_target_func, NULL);
@@ -273,10 +277,19 @@
    {
       gtk_clipboard_request_image(cb, clipboard_paste_image_callback, NULL);
    }
+   /*
    else if (gtk_clipboard_wait_is_uris_available(cb))
    {
       gtk_clipboard_request_uris(cb, clipboard_paste_uris_callback, NULL);
    }
+   */
+   /*start, by TO*/
+   else if (gtk_clipboard_wait_is_target_available(cb, atom_uri_list) )
+   {
+      gtk_clipboard_wait_for_contents(cb, clipboard_paste_uris_callback);
+   }
+   /*end, by TO*/   
+
    else if (gtk_clipboard_wait_is_target_available(cb, atom_text_html) ||
             gtk_clipboard_wait_is_target_available(cb, atom_text_http))
    {
@@ -534,9 +547,18 @@
 {
    GtkClipboard *cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD/*GDK_SELECTION_PRIMARY*/);
 
+   /* by TO */
+   GdkAtom atom_uri_list = gdk_atom_intern ("text/uri-list", FALSE);
+   /*
    return (gtk_clipboard_wait_is_text_available(cb) ||
            gtk_clipboard_wait_is_image_available(cb) ||
            gtk_clipboard_wait_is_uris_available(cb));
+   */
+   /*start, by TO*/
+   return (gtk_clipboard_wait_is_text_available(cb) ||
+           gtk_clipboard_wait_is_image_available(cb) ||
+      gtk_clipboard_wait_is_target_available(cb, atom_uri_list) );
+   /*end, by TO*/
 }


Mht "gtk_dialog_get_action_area" så fant ikke jeg noen åpenbar erstatter,
men det kompilerte og startet selv om jeg kommenterte ut denne:
Kode: Merk alt
Index: src/sd_progress_dialog.c
===================================================================
--- src/sd_progress_dialog.c   (revision 98)
+++ src/sd_progress_dialog.c   (working copy)
@@ -847,8 +847,17 @@
 
    g_object_set_data(G_OBJECT(g_progress.dialog), "message-area", (gpointer)textview1);
 
+   /*by TO*/
+   /*
    GtkWidget *action_area = gtk_dialog_get_action_area(GTK_DIALOG(g_progress.dialog));
    gtk_widget_hide(action_area);
+   */
+   /*start, by TO*/
+   /*
+   GtkWidget *action_area = gtk_dialog_get_action_area(GTK_DIALOG(g_progress.dialog));
+   gtk_widget_hide(action_area);
+   */
+   /*end, by TO*/
 
    /* Add an idle function */
    g_progress.idle_func = g_idle_add(progress_dialog_idle_function, NULL);
@@ -882,7 +891,11 @@
    {
       gtk_widget_set_sensitive(button, FALSE);
       gtk_window_resize(GTK_WINDOW(g_progress.dialog), PROGRESS_DIALOG_WIDTH*1.3, PROGRESS_DIALOG_HEIGHT*2);
+      /*by TO*/
+      /*
       gtk_widget_show(action_area);
+      */
+      
       gdk_flush();
        gtk_dialog_run(GTK_DIALOG(g_progress.dialog));
    }
Sist endret av TO den man 13.04.2009 12:47, endret 1 gang
medlem i 212 måneder
 

Re: Gscreendump, kompilering på Ubuntu 8.04

Innleggav moma » man 13.04.2009 9:52

Hei og takk for bra arbeid med å finne erstatninger.

Den siste er allerede løst i "sd_dialog.c" filen. Søk etter "gtk_dialog_get_action_area".

GtkWidget *action_area;
/* GTK 2.14.4 or later:
action_area = gtk_dialog_get_action_area(GTK_DIALOG(dialog));
*/
/* The old method */
action_area = GTK_DIALOG(dialog)->action_area;

----
Man må nesten bruke GTK_CHECK_VERSION(x,y,z) for å sjekke versjonen til GTK+ under kompileringa.

Denne kommando vil rapportere versjonen til GTK+ og GDK bibliotekene i de respektive operativsystemene.
$ pkg-config --modversion gtk+-2.0 gdk-2.0

Ubuntu 8.04 sier: 2.12.9 og 2.12.9
Ubuntu 8.10 sier: 2.14.4 og 2.14.4
Ubuntu 9.04 beta sier: 2.16.0 og 2.16.0
----------------------------
Skal kommentere de andre punktene senere.

Erfaren
Brukerens avatar
medlem i 234 måneder
 

Re: Gscreendump, kompilering på Ubuntu 8.04

Innleggav TO » man 13.04.2009 12:53

Takk for den moma!
jeg prøvde/gjettet meg frem i går kveld og kompilerte en 'gscreendump' som startet og tok skjermbilder. Jeg måtte melde pass på akkurat den ene som du har løst over, jeg kommenterte rett og slett action_area vekk for å få den kompiler. Jeg har lagt min 'diff' i forrige post.
--------
EDIT, med din alternative "action_area" så har jeg nå noe som virker fint - så langt jeg kan bedømme, se følgende "diff" for sd_progress_dialog.c:

Kode: Merk alt
Index: src/sd_progress_dialog.c
===================================================================
--- src/sd_progress_dialog.c   (revision 98)
+++ src/sd_progress_dialog.c   (working copy)
@@ -847,8 +847,17 @@
 
    g_object_set_data(G_OBJECT(g_progress.dialog), "message-area", (gpointer)textview1);
 
+   /*by TO*/
+   /*
    GtkWidget *action_area = gtk_dialog_get_action_area(GTK_DIALOG(g_progress.dialog));
    gtk_widget_hide(action_area);
+   */
+   /*start, by TO*/
+   
+   GtkWidget *action_area = GTK_DIALOG(g_progress.dialog)->action_area;
+   gtk_widget_hide(action_area);
+   
+   /*end, by TO*/
 
    /* Add an idle function */
    g_progress.idle_func = g_idle_add(progress_dialog_idle_function, NULL);
@@ -882,7 +891,11 @@
    {
       gtk_widget_set_sensitive(button, FALSE);
       gtk_window_resize(GTK_WINDOW(g_progress.dialog), PROGRESS_DIALOG_WIDTH*1.3, PROGRESS_DIALOG_HEIGHT*2);
+      /*by TO*/
+
       gtk_widget_show(action_area);
+
+      
       gdk_flush();
        gtk_dialog_run(GTK_DIALOG(g_progress.dialog));
    }
medlem i 212 måneder
 

Re: Gscreendump, kompilering på Ubuntu 8.04

Innleggav moma » man 13.04.2009 15:08

Hei,
Bra jobb TO :-)
Den diffen din er OK. Se også løsningen gitt her under.

Jeg har nå gjort endringer i kildekoden og programmet skal nå kompilere og kjøre på Ubuntu 8.04 (og muligens andre distroer som benytter GTK+ biblioteket eldre enn 2.14.0.).

Du kan se endringene her:
http://code.google.com/p/gscreendump/so ... tail?r=104

Programmet vil ha noen avvikende funksjonalitet på Ubuntu 8.04:
1) Menyvalgene i Image -> Open image with... vil ikke vise ikoner for de ulike programmene (meny linjene). Den viser bare teksten. Vi kan godt leve med det.

2) Det samme gjelder popup-menyen som vises når du høyre-klikker på selve bildet (imagen). Ingen ikoner vises for menyvalgene under Open image with...

3) Lim-inn fungerer ikke når clipboard-data er en filliste (eller sk. URI-list).
Funksjonen callback_paste_uri_content() i sd_drag_drop.c filen gjør foreløpig ingenting. Jeg ser at URI-dataen (fillisten) er tilgjengelig men funksjonen får ikke tak iden.

Altså dette gjaldt Lim-inn funksjonen og menyvalet Edit -> Paste.
Samme gjelder Paste-menyvalget når man høyreklikker på imagen. Selve drag & drop (dra og slipp) skal fungere riktig.

Du må hente en ny kopi fra SVN-repoen på http://code.google.com/p/gscreendump/source/checkout

Sjekk for at du får med endringene i http://code.google.com/p/gscreendump/so ... tail?r=104 (klikk på de små diff lenkene på siden)

En liten advarsel 1: Programmet skal nå kompileres riktig på Ubuntu 8.04. Men feil kan likevel oppstå under kjøringa, feil som ikke sees i nyere distroer.

En liten advarsel 2: Jeg jobbet litt for raskt i går og kom til å slette hele .../trunk katalogen fra SVN-repoen. Jeg måtte importere alt på nytt fra min lokale kopi. Alt skal nå fungere riktig men si-i-fra hvis du opplever problemer med SVN-repoen.

PS. Husk å installere alle bitene som nevnes i http://code.google.com/p/gscreendump/so ... nk/INSTALL

Les debian/README hvis du vil generere .deb pakke for Ubuntu.

Jeg tror det var alt.

Erfaren
Brukerens avatar
medlem i 234 måneder
 

Re: Gscreendump, kompilering på Ubuntu 8.04

Innleggav TO » man 13.04.2009 16:56

moma,
jeg bekrefter at versjon r105 kompilerer korrekt på min Ubuntu 8.04. Jeg har også fått laget deb-pakke. Prosedyren jeg brukte er som følger:

Kompilering på Ubuntu 8.04:
1 Hent kildekoden fra http://code.google.com/p/gscreendump/source/checkout
Kode: Merk alt
1.1 $ cd ./src
1.2 $ svn checkout http://gscreendump.googlecode.com/svn/trunk/ gscreendump-read-only
1.3 $ cd ./src/gscreendump-read-only

2 Kjør ./configure som bl.a. sjekker at avhengigheter er møtt.
Kode: Merk alt
2.1 $ ./configure
2.2 $ make

3 Lager deb-pakke, kompatibilitetsnivået for deb-pakken må settes lik 6 for Ubuntu 8.04. For 'debuild' så bruker jeg opsjon '-d' siden jeg ellers får klage og full stopp som er knyttet til en umøtt avhengighet hos meg, jeg har en manuellt installerte OpenOffice.org 3.0.
Kode: Merk alt
3.1 $ sed -i.bak -e 's%7%6%' ./debian/compat
3.2 $ debuild  -d -us -uc 

4 Her er deb-pakker og tilhørende:
Kode: Merk alt
$ ls  -1 ../gscreendump_*
../gscreendump_0.2.dsc
../gscreendump_0.2_i386.build
../gscreendump_0.2_i386.changes
../gscreendump_0.2_i386.deb
../gscreendump_0.2.tar.gz

Det er et kjempefint program!
medlem i 212 måneder
 

Re: Gscreendump, kompilering på Ubuntu 8.04

Innleggav moma » fre 17.04.2009 1:44

Jeg sier bare: Perfict. 8-)


Sist flyttet til topp av TO den fre 17.04.2009 1:44

Erfaren
Brukerens avatar
medlem i 234 måneder
 


Returner til Utvikling i Linux



Hvem er i Forumene

Registrerte brukere: Google [Bot]