[gnome-devel-docs] demos: build and autotools info for C programs
- From: Tiffany Antopolski <antopolski src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-devel-docs] demos: build and autotools info for C programs
- Date: Tue, 18 Jun 2013 15:58:14 +0000 (UTC)
commit ea8b0807f08686648bd78cf6d61a0a5675922b86
Author: Tiffany Ann Antopolski <tiffany antopolski gmail com>
Date: Tue Jun 18 11:56:41 2013 -0400
demos: build and autotools info for C programs
platform-demos/C/hello-world.c.page | 161 +++++++++++++++++++++
platform-demos/C/samples/hello-in-C/README | 41 ++++++
platform-demos/C/samples/hello-in-C/hello-world.c | 3 -
platform-demos/Makefile.am | 7 +
4 files changed, 209 insertions(+), 3 deletions(-)
---
diff --git a/platform-demos/C/hello-world.c.page b/platform-demos/C/hello-world.c.page
new file mode 100644
index 0000000..909c5de
--- /dev/null
+++ b/platform-demos/C/hello-world.c.page
@@ -0,0 +1,161 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ type="guide" style="task"
+ id="hello-world.c">
+
+ <info>
+ <title type="text">Hello World (C)</title>
+ <link type="guide" xref="beginner.c#tutorials" group="#first"/>
+
+ <revision version="0.1" date="2013-06-17" status="review"/>
+
+ <credit type="author copyright">
+ <name>Susanna Huhtanen</name>
+ <email>ihmis suski gmail com</email>
+ <years>2012</years>
+ </credit>
+ <credit type="editor">
+ <name>Tiffany Antopolski</name>
+ <email>tiffany antopolski gmail com</email>
+ </credit>
+
+ <desc>A basic "hello, world" application</desc>
+ </info>
+
+ <title>How to build, install and create a <file>tar.xz</file> of a Hello World program</title>
+ <media type="image" mime="image/png" style="floatend" src="media/hello-world.png"/>
+ <synopsis>
+ <p>This tutorial will demonstrate how to:</p>
+ <list style="numbered">
+ <item><p>create a small "Hello, World" application using GTK+</p></item>
+ <item><p>make the <file>.desktop</file> file</p></item>
+ <item><p>how to set up the build system</p></item>
+ </list>
+ </synopsis>
+
+ <links type="section" />
+
+ <section id="hello-world"><title>Create the program</title>
+
+ <links type="section" />
+
+ <section id="imports"><title>Libraries to import</title>
+ <code mime="text/x-csrc"><![CDATA[#include <gtk/gtk.h>
+]]></code>
+ </section>
+
+ <section id="application"><title>Creating the main window for the application</title>
+ <code mime="text/x-xcsrc"><![CDATA[static void
+activate (GtkApplication* app,
+ gpointer user_data)
+{
+ GtkWidget *window;
+
+ window = gtk_application_window_new (app);
+ gtk_window_set_title (GTK_WINDOW (window), "Hello World");
+ gtk_window_set_default_size (GTK_WINDOW (window), 200, 100);
+ gtk_widget_show_all (window);
+}
+]]></code>
+
+ <p>Gtk.Application initializes GTK+. It also connects the <gui>x</gui> button that's automatically
generated along with the window to the "destroy" signal.</p>
+ <p>We can start building our first window. We do this by creating a class called <var>MyWindow</var> and
assigning it a Gtk.ApplicationWindow.</p>
+ <p>We give the window a property called <var>title</var>. The title can be any string you want it to be.
To be on the safe side, it's best to stick to UTF-8 encoding.</p>
+ <p>Now we have a window which has a title and a working "close" button. Let's add the actual "Hello
World" text.</p>
+ </section>
+
+ <section id="label"><title>Label for the window</title>
+ <code mime="text/x-csrc"><![CDATA[GtkWidget *label;
+
+ label = gtk_label_new ("Hello World!");
+ gtk_container_add (GTK_CONTAINER (window), label);
+]]></code>
+
+ <p>Finally, we create and run the application:</p>
+
+ <code mime="text/x-csrc"><![CDATA[int
+main (int argc,
+ char **argv)
+{
+ GtkApplication *app;
+ int status;
+
+ app = gtk_application_new (NULL, G_APPLICATION_FLAGS_NONE);
+ g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
+ status = g_application_run (G_APPLICATION (app), argc, argv);
+ g_object_unref (app);
+
+ return status;
+}]]></code>
+
+ <p>GtkApplicationWindow can only hold one widget at a time. To construct more elaborate programs you
need to create a holder widget like GtkGrid inside the window, and then add all the other widgets to it.</p>
+ </section>
+
+
+ <section id="c"><title>hello-world.c</title>
+ <p>The complete file:</p>
+ <code mime="text/x-csrc" style="numbered"><xi:include href="samples/hello-in-C/hello-world.c"
parse="text"><xi:fallback/></xi:include></code>
+ </section>
+
+ <section id="terminal"><title>Running the application from terminal</title>
+ <p>To run this application, first save it as hello-world.c. Then open Terminal, go to the folder where
your application is stored.</p>
+ <p>Compile the program:</p>
+ <screen>gcc <var>hello-world</var>.c `pkg-config --cflags --libs gtk+-3.0` -o
<var>filename</var></screen>
+ <p>Run the program:</p>
+ <screen>./<var>hello-world</var></screen>
+ </section>
+ </section>
+
+ <section id="desktop.in"><title>The <file>.desktop.in</file> file</title>
+ <p>Running applications from the Terminal is useful at the beginning of the application making
process. To have fully working <link href=
"https://developer.gnome.org/integration-guide/stable/mime.html.en">application integration</link> in GNOME 3
requires a desktop launcher. For this you need to create a <file>.desktop</file> file. The
<file>.desktop</file> file describes the application name, the used icon and various integration bits. A
deeper insight into the <file>.desktop</file> file can be found <link href=
"http://developer.gnome.org/desktop-entry-spec/">here</link>. The <file>.desktop.in</file> file will create
the <file>.desktop</file>.</p>
+
+ <p>The example shows you the minimum requirements for a <code>.desktop.in</code> file.</p>
+ <code mime="text/desktop" style="numbered"><xi:include
href="samples/hello-in-python/hello-world.desktop.in" parse="text"><xi:fallback/></xi:include></code>
+
+ <p>Now let's go through some parts of the <code>.desktop.in</code> file.</p>
+ <terms>
+ <item><title>Name</title><p>The application name.</p></item>
+ <item><title>Comment</title><p>A short description of the application.</p></item>
+ <item><title>Exec</title><p>Specifies a command to execute when you choose the application from the
menu. In this example exec just tells where to find the <file>hello-world</file> file and the file takes care
of the rest.</p></item>
+ <item><title>Terminal</title><p>Specifies whether the command in the Exec key runs in a terminal
window.</p></item>
+ </terms>
+
+ <p>To put your application into the appropriate category, you need to add the necessary categories to
the Categories line. More information on the different categories can be found in the <link href =
"http://standards.freedesktop.org/menu-spec/latest/apa.html">menu specification</link>.</p>
+ <p>In this example we use an existing icon. For a custom icon you need to have a .svg file of your icon,
stored in <file>/usr/share/icons/hicolor/scalable/apps</file>. Write the name of your icon file to the
.desktop.in file, on line 7. More information on icons in: <link
href="https://live.gnome.org/GnomeGoals/AppIcon">Installing Icons for Themes</link> and <link
href="http://freedesktop.org/wiki/Specifications/icon-theme-spec">on freedesktop.org:
Specifications/icon-theme-spec</link>.</p>
+ </section>
+
+ <section id="autotools"><title>The build system</title>
+ <p>To make your application truly a part of the GNOME 3 system you need to install it with the help of
autotools. The autotools build will install all the necessary files to all the right places. </p>
+ <p>For this you need to have the following files:</p>
+ <links type="section"/>
+
+ <section id="autogen"><title>autogen.sh</title>
+ <code mime="application/x-shellscript" style="numbered"><xi:include
href="samples/hello-in-python/autogen.sh" parse="text"><xi:fallback/></xi:include></code>
+
+ <p>After the <file>autogen.sh</file> file is ready and saved, run:</p>
+ <screen><output style="prompt">$ </output><input>chmod +x autogen.sh</input></screen>
+ </section>
+
+
+ <section id="makefile"><title>Makefile.am</title>
+ <code mime="application/x-shellscript" style="numbered"><xi:include
href="samples/hello-in-python/Makefile.am" parse="text"><xi:fallback/></xi:include></code>
+ </section>
+
+
+ <section id="configure"><title>configure.ac</title>
+ <code mime="application/x-shellscript" style="numbered"><xi:include
href="samples/hello-in-python/configure.ac" parse="text"><xi:fallback/></xi:include></code>
+ </section>
+
+
+ <section id="readme"><title>README</title>
+ <p>Information users should read first. This file can be blank.</p>
+
+ <p>When you have the <file>hello-world.c</file>, <file>hello-world.desktop.in</file>,
<file>Makefile.am</file>, <file>configure.ac</file> and <file>autogen.sh</file> files with correct
information and rights, the <file>README</file> file can include the following instructions:</p>
+ <code mime="text/readme" style="numbered"><xi:include href="samples/hello-in-C/README"
parse="text"><xi:fallback/></xi:include></code>
+ </section>
+
+ <!-- TODO: How to make a custom icon with autotools -->
+
+ </section>
+</page>
diff --git a/platform-demos/C/samples/hello-in-C/README b/platform-demos/C/samples/hello-in-C/README
index e69de29..2a2dda7 100644
--- a/platform-demos/C/samples/hello-in-C/README
+++ b/platform-demos/C/samples/hello-in-C/README
@@ -0,0 +1,41 @@
+To build and install this program:
+
+./autogen.sh --prefix=/home/your_username/.local
+make
+make install
+
+-------------
+Running the first line above creates the following files:
+
+aclocal.m4
+autom4te.cache
+config.log
+config.status
+configure
+depcomp
+hello-world
+hello-world.desktop
+hello_world-hello-world.o
+install-sh
+missing
+Makefile.in
+Makefile
+
+Running "make" links all the appropriate libraries.
+
+Running "make install", installs the application in /home/your_username/.local/bin
+and installs the hello-world.desktop file in /home/your_username/.local/share/applications
+
+You can now run the application by typing "Hello World" in the Overview.
+
+----------------
+To uninstall, type:
+
+make uninstall
+
+----------------
+To create a tarball type:
+
+make distcheck
+
+This will create hello-world-1.0.tar.xz
diff --git a/platform-demos/C/samples/hello-in-C/hello-world.c
b/platform-demos/C/samples/hello-in-C/hello-world.c
index 98fffd1..01aa692 100644
--- a/platform-demos/C/samples/hello-in-C/hello-world.c
+++ b/platform-demos/C/samples/hello-in-C/hello-world.c
@@ -29,6 +29,3 @@ main (int argc,
return status;
}
-
-
-
diff --git a/platform-demos/Makefile.am b/platform-demos/Makefile.am
index 19377d8..de63d32 100644
--- a/platform-demos/Makefile.am
+++ b/platform-demos/Makefile.am
@@ -76,6 +76,12 @@ demo_sources = \
samples/GtkApplicationWindow.vala \
samples/hellognome.html \
samples/hellognome.js \
+ samples/hello-in-C/autogen.sh \
+ samples/hello-in-C/configure.ac \
+ samples/hello-in-C/hello-world.c \
+ samples/hello-in-C/hello-world.desktop.in\
+ samples/hello-in-C/Makefile.am \
+ samples/hello-in-C/README \
samples/hello-in-js/autogen.sh \
samples/hello-in-js/configure.ac \
samples/hello-in-js/hello-world \
@@ -333,6 +339,7 @@ HELP_FILES = \
guitar-tuner.py.page \
guitar-tuner.vala.page \
hellognome.js.page \
+ hello-world.c.page \
hello-world.js.page \
hello-world.py.page \
image.c.page \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]