Skip to content

Commit d2cd58c

Browse files
author
Łukasz Grabski
committed
Merge pull request #37 from activey/#3
#3 - debian package builder plugin :) Very early version ;P
2 parents fc09db8 + ceff754 commit d2cd58c

File tree

74 files changed

+3463
-100
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+3463
-100
lines changed

.gitignore

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
target/*
2-
src/library/c/
3-
src/library/vapi/
1+
target/bin/*
2+
target/plugins/*
3+
src/library/c/*.h
4+
src/library/vapi/*.vapi
45
**/target/lib/*.so

build-cmdline.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ PACKAGES_PREFIXED=$(printf " --pkg %s" "${PACKAGES[@]}")
1010
VAPI_DIRS_PREFIXED=$(printf " --vapidir %s" "${VAPI_DIRS[@]}")
1111

1212
mkdir -p target/plugins
13-
valac -g -v $SOURCES_PREFIXED -X -Wl,-rpath=\$ORIGIN/lib -X -Ltarget/lib -X -lbob -X -Isrc/library/c $VAPI_DIRS_PREFIXED $PACKAGES_PREFIXED -o target/bob
13+
valac -g -v $SOURCES_PREFIXED -X -Wl,-rpath=\$ORIGIN/lib -X -Ltarget/lib -X -lbob -X -Isrc/library/c $VAPI_DIRS_PREFIXED $PACKAGES_PREFIXED -o target/bin/bob

plugin-build/old.sh

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/bin/bash
2+
3+
LIBRARY_NAME='plugin-build'
4+
VAPI_SOURCES=(`find ../src/library/vapi -type f -name "**.vapi"`)
5+
HEADER_LOCATION=('../src/library/c')
6+
SOURCES=(`find src/library/vala -type f -name "**.vala"`)
7+
PACKAGES=('glib-2.0' 'gobject-2.0' 'gio-2.0' 'json-glib-1.0' 'gmodule-2.0' 'libvala-0.28')
8+
9+
VAPI_SOURCES_PREFIXED=$(printf "%s " "${VAPI_SOURCES[@]}")
10+
SOURCES_PREFIXED=$(printf "%s " "${SOURCES[@]}")
11+
PACKAGES_PREFIXED=$(printf " --pkg %s" "${PACKAGES[@]}")
12+
13+
mkdir -p target/lib
14+
valac -v --library=$LIBRARY_NAME $VAPI_SOURCES_PREFIXED $SOURCES_PREFIXED -X -fPIC -X --shared -X -I$HEADER_LOCATION $PACKAGES_PREFIXED -o target/lib/lib$LIBRARY_NAME.so

plugin-build/src/library/c/plugin-build-0.0.1.h

+27-10
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <glib-object.h>
1010
#include <stdlib.h>
1111
#include <string.h>
12+
#include <vala.h>
1213

1314
G_BEGIN_DECLS
1415

@@ -101,6 +102,17 @@ typedef struct _bobbuilderbuildpluginCCOptions bobbuilderbuildpluginCCOptions;
101102
typedef struct _bobbuilderbuildpluginCCOptionsClass bobbuilderbuildpluginCCOptionsClass;
102103
typedef struct _bobbuilderbuildpluginCCOptionsPrivate bobbuilderbuildpluginCCOptionsPrivate;
103104

105+
#define BOB_BUILDER_BUILD_PLUGIN_TYPE_DEPENEDENCY_DATA_TESTER (bob_builder_build_plugin_depenedency_data_tester_get_type ())
106+
#define BOB_BUILDER_BUILD_PLUGIN_DEPENEDENCY_DATA_TESTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BOB_BUILDER_BUILD_PLUGIN_TYPE_DEPENEDENCY_DATA_TESTER, bobbuilderbuildpluginDepenedencyDataTester))
107+
#define BOB_BUILDER_BUILD_PLUGIN_DEPENEDENCY_DATA_TESTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BOB_BUILDER_BUILD_PLUGIN_TYPE_DEPENEDENCY_DATA_TESTER, bobbuilderbuildpluginDepenedencyDataTesterClass))
108+
#define BOB_BUILDER_BUILD_PLUGIN_IS_DEPENEDENCY_DATA_TESTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BOB_BUILDER_BUILD_PLUGIN_TYPE_DEPENEDENCY_DATA_TESTER))
109+
#define BOB_BUILDER_BUILD_PLUGIN_IS_DEPENEDENCY_DATA_TESTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BOB_BUILDER_BUILD_PLUGIN_TYPE_DEPENEDENCY_DATA_TESTER))
110+
#define BOB_BUILDER_BUILD_PLUGIN_DEPENEDENCY_DATA_TESTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), BOB_BUILDER_BUILD_PLUGIN_TYPE_DEPENEDENCY_DATA_TESTER, bobbuilderbuildpluginDepenedencyDataTesterClass))
111+
112+
typedef struct _bobbuilderbuildpluginDepenedencyDataTester bobbuilderbuildpluginDepenedencyDataTester;
113+
typedef struct _bobbuilderbuildpluginDepenedencyDataTesterClass bobbuilderbuildpluginDepenedencyDataTesterClass;
114+
typedef struct _bobbuilderbuildpluginDepenedencyDataTesterPrivate bobbuilderbuildpluginDepenedencyDataTesterPrivate;
115+
104116
struct _bobbuilderbuildpluginBuildApplicationPlugin {
105117
bobbuilderbuildpluginAbstractBobBuildPlugin parent_instance;
106118
bobbuilderbuildpluginBuildApplicationPluginPrivate * priv;
@@ -151,14 +163,12 @@ typedef enum {
151163
} bobbuilderbuildpluginCompilationError;
152164
#define BOB_BUILDER_BUILD_PLUGIN_COMPILATION_ERROR bob_builder_build_plugin_compilation_error_quark ()
153165
struct _bobbuilderbuildpluginValaCodeCompiler {
154-
GTypeInstance parent_instance;
155-
volatile int ref_count;
166+
ValaCodeVisitor parent_instance;
156167
bobbuilderbuildpluginValaCodeCompilerPrivate * priv;
157168
};
158169

159170
struct _bobbuilderbuildpluginValaCodeCompilerClass {
160-
GTypeClass parent_class;
161-
void (*finalize) (bobbuilderbuildpluginValaCodeCompiler *self);
171+
ValaCodeVisitorClass parent_class;
162172
};
163173

164174
struct _bobbuilderbuildpluginValaCodeCompilerOutcome {
@@ -194,6 +204,15 @@ struct _bobbuilderbuildpluginCCOptionsClass {
194204
void (*finalize) (bobbuilderbuildpluginCCOptions *self);
195205
};
196206

207+
struct _bobbuilderbuildpluginDepenedencyDataTester {
208+
ValaCodeVisitor parent_instance;
209+
bobbuilderbuildpluginDepenedencyDataTesterPrivate * priv;
210+
};
211+
212+
struct _bobbuilderbuildpluginDepenedencyDataTesterClass {
213+
ValaCodeVisitorClass parent_class;
214+
};
215+
197216

198217
GType bob_builder_build_plugin_build_application_plugin_get_type (void) G_GNUC_CONST;
199218
bobbuilderbuildpluginBuildApplicationPlugin* bob_builder_build_plugin_build_application_plugin_new (void);
@@ -284,12 +303,6 @@ void bob_builder_build_plugin_build_configuration_library_usage_builder_set_vapi
284303
bobbuilderrecipeprojectBobBuildProjectDependencyScope bob_builder_build_plugin_build_configuration_library_usage_builder_get_scope (bobbuilderbuildpluginBuildConfigurationLibraryUsageBuilder* self);
285304
void bob_builder_build_plugin_build_configuration_library_usage_builder_set_scope (bobbuilderbuildpluginBuildConfigurationLibraryUsageBuilder* self, bobbuilderrecipeprojectBobBuildProjectDependencyScope value);
286305
GQuark bob_builder_build_plugin_compilation_error_quark (void);
287-
gpointer bob_builder_build_plugin_vala_code_compiler_ref (gpointer instance);
288-
void bob_builder_build_plugin_vala_code_compiler_unref (gpointer instance);
289-
GParamSpec* bob_builder_build_plugin_param_spec_vala_code_compiler (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
290-
void bob_builder_build_plugin_value_set_vala_code_compiler (GValue* value, gpointer v_object);
291-
void bob_builder_build_plugin_value_take_vala_code_compiler (GValue* value, gpointer v_object);
292-
gpointer bob_builder_build_plugin_value_get_vala_code_compiler (const GValue* value);
293306
GType bob_builder_build_plugin_vala_code_compiler_get_type (void) G_GNUC_CONST;
294307
bobbuilderbuildpluginValaCodeCompiler* bob_builder_build_plugin_vala_code_compiler_new (bobbuilderbuildpluginBuildConfiguration* buildConfiguration);
295308
bobbuilderbuildpluginValaCodeCompiler* bob_builder_build_plugin_vala_code_compiler_construct (GType object_type, bobbuilderbuildpluginBuildConfiguration* buildConfiguration);
@@ -336,6 +349,10 @@ void bob_builder_build_plugin_cc_options_addCHeadersDirectoryLocation (bobbuilde
336349
void bob_builder_build_plugin_cc_options_useLibrary (bobbuilderbuildpluginCCOptions* self, const gchar* name);
337350
void bob_builder_build_plugin_cc_options_addDebugFlag (bobbuilderbuildpluginCCOptions* self);
338351
gchar** bob_builder_build_plugin_cc_options_getCcOptions (bobbuilderbuildpluginCCOptions* self, int* result_length1);
352+
GType bob_builder_build_plugin_depenedency_data_tester_get_type (void) G_GNUC_CONST;
353+
bobbuilderbuildpluginDepenedencyDataTester* bob_builder_build_plugin_depenedency_data_tester_new (const gchar* package, const gchar* vapiFilePath);
354+
bobbuilderbuildpluginDepenedencyDataTester* bob_builder_build_plugin_depenedency_data_tester_construct (GType object_type, const gchar* package, const gchar* vapiFilePath);
355+
void bob_builder_build_plugin_depenedency_data_tester_test (bobbuilderbuildpluginDepenedencyDataTester* self);
339356

340357

341358
G_END_DECLS

plugin-build/src/library/vala/bob/builder/build/plugin/BuildApplicationPlugin.vala

+3-3
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ namespace bob.builder.build.plugin {
7070
.cHeaderFileName(BobFiles.FILE_SOURCE_C_HEADER_NAME.printf(projectRecipe.shortName, projectRecipe.version))
7171
.ccOption("-fPIC")
7272
.ccOption("-shared")
73-
.ccOption("-Wl,-rpath=\$ORIGIN/%s".printf(BobDirectories.DIRECTORY_LIB))
73+
.ccOption("-Wl,-rpath=\$ORIGIN/../%s".printf(BobDirectories.DIRECTORY_LIB))
7474
.ccOption("-L%s".printf(BobDirectories.DIRECTORY_TARGET_LIB))
7575
.build();
7676
return new ValaCodeCompiler(buildConfiguration);
@@ -81,9 +81,9 @@ namespace bob.builder.build.plugin {
8181
.runtimeScope()
8282
.dependencies(projectRecipe.dependencies)
8383
.sources(projectRecipe.mainSourceFiles)
84-
.targetDirectory(BobDirectories.DIRECTORY_TARGET)
84+
.targetDirectory(BobDirectories.DIRECTORY_TARGET_BIN)
8585
.targetFileName(projectRecipe.shortName)
86-
.ccOption("-Wl,-rpath=\$ORIGIN/%s".printf(BobDirectories.DIRECTORY_LIB))
86+
.ccOption("-Wl,-rpath=\$ORIGIN/../%s".printf(BobDirectories.DIRECTORY_LIB))
8787
.ccOption("-L%s".printf(BobDirectories.DIRECTORY_TARGET_LIB));
8888

8989
if (libraryCompilationOutcome.binaryGenerated) {

plugin-build/src/library/vala/bob/builder/build/plugin/ValaCodeCompiler.vala

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace bob.builder.build.plugin {
99
PARSING_ERROR, CCOMPILATION_ERROR
1010
}
1111

12-
public class ValaCodeCompiler {
12+
public class ValaCodeCompiler : CodeVisitor {
1313

1414
private const string DEFAULT_COLORS = "error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01";
1515

plugin-build/src/library/vapi/plugin-build-0.0.1.vapi

+8-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,14 @@ namespace bob {
8080
public void useLibrary (string name);
8181
}
8282
[CCode (cheader_filename = "plugin-build-0.0.1.h")]
83-
public class ValaCodeCompiler {
83+
public class DepenedencyDataTester : Vala.CodeVisitor {
84+
public DepenedencyDataTester (string package, string vapiFilePath);
85+
public void test ();
86+
public override void visit_class (Vala.Class clazz);
87+
public override void visit_source_file (Vala.SourceFile sourceFile);
88+
}
89+
[CCode (cheader_filename = "plugin-build-0.0.1.h")]
90+
public class ValaCodeCompiler : Vala.CodeVisitor {
8491
public ValaCodeCompiler (bob.builder.build.plugin.BuildConfiguration buildConfiguration);
8592
public bob.builder.build.plugin.ValaCodeCompilerOutcome compile () throws bob.builder.build.plugin.CompilationError;
8693
}

plugin-debian/README.md

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Debian packaging plugin
2+
Given code base consists of two Valder build plugins which are capable of creating debian packages with two different forms:
3+
4+
## debian:package
5+
This particular plugin creates a .deb file with all runtime and libriaries binaries locater under target/ directory structure. It's algorithm is quite naive and follows given steps:
6+
7+
* Collect all binaries located under **target/bin** and **target/lib**,
8+
* Call 'ldd <file>' for each of them where <file> is one of collected binaries,
9+
* Call 'dpkg <library>' for each library used to get list of required dependencies,
10+
* Generate control and md5sums files,
11+
* Pack everything with 'dpkg -b'
12+
13+
## debian:package-dev
14+
As you can guess this plugin creates a debian archive with all development files necessary for further usage by other developers out there. It's algorithm is slightly more complicated and involces steps as following:
15+
16+
* Initialize CodeContext from libvala,
17+
* For each project dependency do:
18+
* Use dependency as a temporary CodeContext external package,
19+
* Do an AST traversal using CodeVisitor instance,
20+
* Collect all .vapi and .h files found by CodeContext and CodeVisitor referenced anywhere possible,
21+
* For each .h file run 'dpkg -S' and 'apt search' to find debian package that contains given file,
22+
* Generate control and md5sums files,
23+
* Pack everything with 'dpkg -b'
24+
25+
Usualy in debian control file one can define some additional metadata like package section name, mainainter address, etc. For that purpose, receipe file (**receipe.bob**) structure has been extended and now now allows to define some additional information. Please find following example:
26+
27+
```json
28+
{
29+
"project": {
30+
"name": "Some project",
31+
"shortName": "something",
32+
"version": "0.0.1",
33+
"details": {
34+
"description": "This is some project",
35+
"authors": ["Lukasz Grabski <[email protected]>", "Linus Torvalds <[email protected]>"],
36+
"section": "devel",
37+
"architecture": "all"
38+
},
39+
```
40+
41+
Both plugins take an advantage of "details" section using it's data to fill in control file. Bellow you can find all control file attributes currently used.
42+
43+
Control file attribute | Binding | Default value if not available
44+
-------------|-------------------|-----------------
45+
Package | project.shortName | 'unknown'
46+
Version | project.version | '0.0.1'
47+
Description | project.details.description | ''
48+
Section | project.details.section | 'unknown'
49+
Priority | project.details.priority | 'optional'
50+
Architecture | project.details.architecture | 'all'
51+
Depends | *Generated automatically* |
52+
Maintainer | project.details.authors[0] | ''
53+
Uploaders | project.details.authors[1..n] | ''
54+
55+
Packages will be locater under **/tmp** directory.
56+
57+
Everything is very experimental. Please send your notes or suggestions if any.

plugin-debian/build.sh

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
bob collect-sources repository:scan repository:copy-libs build

plugin-debian/recipe.bob

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"project" : {
3+
"name" : "plugin-debian",
4+
"shortName" : "plugin-debian",
5+
"version" : "0.0.1",
6+
"dependencies" : [
7+
{
8+
"dependency" : "glib",
9+
"version" : "2.0"
10+
},
11+
{
12+
"dependency" : "gobject",
13+
"version" : "2.0"
14+
},
15+
{
16+
"dependency" : "gee",
17+
"version" : "0.8"
18+
},
19+
{
20+
"dependency" : "bob",
21+
"version" : "0.0.1"
22+
},
23+
{
24+
"dependency" : "libvala",
25+
"version": "0.28"
26+
}
27+
]
28+
},
29+
"plugins": {
30+
"build": {
31+
"debug": true
32+
}
33+
}
34+
}

0 commit comments

Comments
 (0)