Merge lp:~jonnor/smoke-gobject/856878 into lp:smoke-gobject

Proposed by Jon Nordby
Status: Merged
Merged at revision: 172
Proposed branch: lp:~jonnor/smoke-gobject/856878
Merge into: lp:smoke-gobject
Diff against target: 1008 lines (+224/-446)
27 files modified
.bzrignore (+2/-1)
CMakeLists.txt (+20/-1)
GSmokeConfig.cmake.in (+15/-0)
README (+6/-1)
gsmoke_module_gen.cmake (+56/-0)
modules/CMakeLists.txt (+15/-0)
modules/atk/CMakeLists.txt (+1/-27)
modules/cairo/CMakeLists.txt (+1/-27)
modules/clutter/CMakeLists.txt (+1/-27)
modules/cogl/CMakeLists.txt (+2/-27)
modules/gdk/CMakeLists.txt (+2/-27)
modules/gdkpixbuf/CMakeLists.txt (+2/-27)
modules/gio/CMakeLists.txt (+1/-27)
modules/gl/CMakeLists.txt (+1/-27)
modules/glib/CMakeLists.txt (+1/-27)
modules/gmodule/CMakeLists.txt (+2/-27)
modules/gobject/CMakeLists.txt (+1/-27)
modules/gtk/CMakeLists.txt (+1/-28)
modules/json/CMakeLists.txt (+1/-28)
modules/pango/CMakeLists.txt (+1/-27)
modules/tests/CMakeLists.txt (+1/-0)
modules/tests/helloworld/CMakeLists.txt (+6/-10)
src/CMakeLists.txt (+2/-13)
tests/CMakeLists.txt (+0/-1)
tools/gsmokegen/cppgenerator.cpp (+58/-32)
tools/gsmokegen/cppgenerator.h (+11/-2)
tools/gsmokegen/main.cpp (+14/-5)
To merge this branch: bzr merge lp:~jonnor/smoke-gobject/856878
Reviewer Review Type Date Requested Status
Jon Nordby Approve
Review via email: mp+76916@code.launchpad.net

Description of the change

Proposed fix for bug #856878

Note that parallel make in modules can still fail; cross-module dependencies are not tracked properly yet.

To post a comment you must log in.
Revision history for this message
Jon Nordby (jonnor) wrote :

Pretty clear improvement to current situation, so I merged it.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2011-09-22 17:22:15 +0000
3+++ .bzrignore 2011-09-25 21:38:17 +0000
4@@ -11,9 +11,10 @@
5 ./tests/codegen/tst_codegen
6 ./tests/everything/tst_everything
7 ./tests/gimarshallingtests/tst_gimarshallingtests
8-./tests/helloworld/helloworld
9 ./tools/dumper/gi_dumper
10 ./tools/gsmokegen/gsmokegen
11
12+./modules/tests/helloworld/helloworld
13 ./modules/*/*.cpp
14 ./modules/*/*.h
15+
16
17=== modified file 'CMakeLists.txt'
18--- CMakeLists.txt 2011-08-14 08:33:47 +0000
19+++ CMakeLists.txt 2011-09-25 21:38:17 +0000
20@@ -4,11 +4,30 @@
21 find_package(Qt4)
22 find_package(PkgConfig)
23 pkg_check_modules(GLIB2 REQUIRED glib-2.0)
24+pkg_check_modules(GOBJECT REQUIRED gobject-2.0)
25 pkg_check_modules(GOBJECT-INTROSPECTION REQUIRED gobject-introspection-1.0)
26
27+
28 set(GSMOKE_GEN_BIN ${CMAKE_BINARY_DIR}/tools/gsmokegen/gsmokegen)
29+set(GSMOKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src)
30+set(GSMOKE_BINARY_DIR ${CMAKE_BINARY_DIR}/src)
31+
32+set(GSMOKE_INCLUDES ${GLIB2_INCLUDE_DIRS}
33+ ${GOBJECT-INTROSPECTION_INCLUDE_DIRS}
34+ ${QT_INCLUDES})
35+
36+set(GSMOKE_LIBS
37+ gio-2.0
38+ gobject-2.0
39+ gmodule-2.0
40+ ${GLIB2_LIBRARIES}
41+ ffi
42+ ${QT_QTCORE_LIBRARY}
43+ girepository-1.0)
44+
45+configure_file(GSmokeConfig.cmake.in "${CMAKE_BINARY_DIR}/GSmokeConfig.cmake" @ONLY )
46
47 add_subdirectory(src)
48 add_subdirectory(tools)
49-add_subdirectory(modules)
50 add_subdirectory(tests)
51+# modules is built separately
52
53=== added file 'GSmokeConfig.cmake.in'
54--- GSmokeConfig.cmake.in 1970-01-01 00:00:00 +0000
55+++ GSmokeConfig.cmake.in 2011-09-25 21:38:17 +0000
56@@ -0,0 +1,15 @@
57+# - Config file for the GSmoke package
58+# It defines the following variables
59+# GSMOKE_INCLUDE_DIRS - include directories for GSmoke
60+# GSMOKE_LIBRARIES - libraries to link against
61+# GSMOKE_GEN_EXECUTABLE - the module generator executable
62+#
63+# Note: currently only supports in-tree builds
64+
65+set(GSMOKE_INCLUDE_DIRS
66+ "@GSMOKE_SOURCE_DIR@"
67+ "@GSMOKE_BINARY_DIR@")
68+set(GSMOKE_LIBRARIES "@GSMOKE_LIBS@" gsmoke)
69+set(GSMOKE_GEN_EXECUTABLE "@GSMOKE_GEN_BIN@")
70+set(GSMOKE_LIBRARY_DIRS
71+ "@GSMOKE_BINARY_DIR@")
72
73=== modified file 'README'
74--- README 2011-07-14 07:57:32 +0000
75+++ README 2011-09-25 21:38:17 +0000
76@@ -25,6 +25,11 @@
77 called 'build' in the source tree, and then type 'cmake ..' from
78 there
79
80+Modules need to be built separately, after having built the toplevel.
81+ cd modules
82+ cmake .
83+ make
84+
85 Testing
86 =======
87 In build/tests/gimarshallingtests use the following command:
88@@ -49,4 +54,4 @@
89 generator.generate("Gio");
90
91 This will generate the C++ source files for the Gio namespace and all
92-the classes within it
93\ No newline at end of file
94+the classes within it
95
96=== added file 'gsmoke_module_gen.cmake'
97--- gsmoke_module_gen.cmake 1970-01-01 00:00:00 +0000
98+++ gsmoke_module_gen.cmake 2011-09-25 21:38:17 +0000
99@@ -0,0 +1,56 @@
100+MACRO(GSMOKE_MODULE_GEN LIB_NAME GI_NAME EXTRA_FILES)
101+# Macro for generating a gsmoke module
102+# Arguments -
103+# LIB_NAME - The library name. Example: gtk
104+# GI_NAME - The GObject instrospection name. Example: Gtk
105+# EXTRA_FILES - Extra files (not generated) that should be included
106+# EXCLUDE - Path to an exclude file
107+
108+# FIXME: make exclude optional
109+
110+set(EXCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/exclude.txt)
111+
112+execute_process(COMMAND ${GSMOKE_GEN_EXECUTABLE}
113+ --list-files -o ${CMAKE_CURRENT_BINARY_DIR} -e ${EXCLUDE} ${GI_NAME}
114+ OUTPUT_VARIABLE GENERATED)
115+
116+string(REPLACE \n " " GENERATED_FILES ${GENERATED})
117+
118+string(REPLACE \n " " GENERATED_FILES_TEMP ${GENERATED})
119+separate_arguments(GENERATED_FILES_TEMP)
120+
121+foreach(FILE ${GENERATED_FILES_TEMP})
122+ if (FILE MATCHES .*.cpp)
123+ list(APPEND GENERATED_FILES_CPP ${FILE})
124+ endif (FILE MATCHES .*.cpp)
125+endforeach(FILE)
126+
127+
128+set_source_files_properties(${GENERATED_FILES_CPP}
129+ PROPERTIES GENERATED true)
130+
131+SET(SOURCES
132+ ${EXTRA_FILES}
133+ ${GENERATED_FILES_CPP}
134+)
135+
136+include_directories(
137+ ${CMAKE_CURRENT_BINARY_DIR}/.. # For other modules
138+ ${CMAKE_CURRENT_SOURCE_DIR}/..
139+ ${GSMOKE_INCLUDE_DIRS}
140+)
141+
142+link_directories(${GSMOKE_LIBRARY_DIRS})
143+
144+add_custom_command(OUTPUT ${GENERATED_FILES_CPP}
145+ COMMAND ${GSMOKE_GEN_EXECUTABLE}
146+ ARGS -o ${CMAKE_CURRENT_BINARY_DIR} -e ${EXCLUDE} ${GI_NAME}
147+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
148+
149+add_library(smoke${LIB_NAME} SHARED ${SOURCES})
150+
151+target_link_libraries(smoke${LIB_NAME}
152+ ${GSMOKE_LIBRARIES}
153+)
154+
155+ENDMACRO(GSMOKE_MODULE_GEN LIB_NAME GI_NAME EXTRA_FILES)
156
157=== modified file 'modules/CMakeLists.txt'
158--- modules/CMakeLists.txt 2011-08-14 12:58:51 +0000
159+++ modules/CMakeLists.txt 2011-09-25 21:38:17 +0000
160@@ -1,3 +1,17 @@
161+
162+cmake_minimum_required(VERSION 2.6)
163+
164+find_package(Qt4)
165+find_package(PkgConfig)
166+pkg_check_modules(GOBJECT2 REQUIRED gobject-2.0)
167+pkg_check_modules(GOBJECT-INTROSPECTION REQUIRED gobject-introspection-1.0)
168+
169+SET(CMAKE_MODULE_PATH ../)
170+SET(GSmoke_DIR ../)
171+
172+find_package(GSmoke REQUIRED)
173+include(gsmoke_module_gen)
174+
175 add_subdirectory(glib)
176 add_subdirectory(cairo)
177 add_subdirectory(gobject)
178@@ -13,3 +27,4 @@
179 add_subdirectory(json)
180 add_subdirectory(clutter)
181
182+add_subdirectory(tests)
183
184=== modified file 'modules/atk/CMakeLists.txt'
185--- modules/atk/CMakeLists.txt 2011-08-15 16:23:02 +0000
186+++ modules/atk/CMakeLists.txt 2011-09-25 21:38:17 +0000
187@@ -1,28 +1,2 @@
188
189-FILE(GLOB ATK_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
190-
191-SET(smokeatk_LIB_SRCS
192- atk.cpp
193- ${ATK_CPP}
194-)
195-
196-include_directories(
197- ${CMAKE_SOURCE_DIR}/src
198- ${CMAKE_BINARY_DIR}/modules
199- ${QT_INCLUDES}
200-)
201-
202-add_custom_command(OUTPUT atk.cpp
203- COMMAND gsmokegen
204- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
205- Atk
206- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
207-
208-add_library(smokeatk SHARED ${smokeatk_LIB_SRCS})
209-
210-target_link_libraries(smokeatk
211- ${QT_QTCORE_LIBRARY}
212- gobject-2.0
213- glib-2.0
214- gsmoke
215-)
216+GSMOKE_MODULE_GEN(atk Atk "")
217
218=== modified file 'modules/cairo/CMakeLists.txt'
219--- modules/cairo/CMakeLists.txt 2011-08-15 16:23:02 +0000
220+++ modules/cairo/CMakeLists.txt 2011-09-25 21:38:17 +0000
221@@ -1,28 +1,2 @@
222
223-FILE(GLOB CAIRO_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
224-
225-SET(smokecairo_LIB_SRCS
226- cairo.cpp
227- ${CAIRO_CPP}
228-)
229-
230-include_directories(
231- ${CMAKE_SOURCE_DIR}/src
232- ${CMAKE_BINARY_DIR}/modules
233- ${QT_INCLUDES}
234-)
235-
236-add_custom_command(OUTPUT cairo.cpp
237- COMMAND gsmokegen
238- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
239- cairo
240- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
241-
242-add_library(smokecairo SHARED ${smokecairo_LIB_SRCS})
243-
244-target_link_libraries(smokecairo
245- ${QT_QTCORE_LIBRARY}
246- gobject-2.0
247- glib-2.0
248- gsmoke
249-)
250+GSMOKE_MODULE_GEN(cairo cairo "")
251
252=== modified file 'modules/clutter/CMakeLists.txt'
253--- modules/clutter/CMakeLists.txt 2011-08-15 16:23:02 +0000
254+++ modules/clutter/CMakeLists.txt 2011-09-25 21:38:17 +0000
255@@ -1,28 +1,2 @@
256
257-FILE(GLOB CLUTTER_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
258-
259-SET(smokeclutter_LIB_SRCS
260- clutter.cpp
261- ${CLUTTER_CPP}
262-)
263-
264-include_directories(
265- ${CMAKE_SOURCE_DIR}/src
266- ${CMAKE_BINARY_DIR}/modules
267- ${QT_INCLUDES}
268-)
269-
270-add_custom_command(OUTPUT clutter.cpp
271- COMMAND gsmokegen
272- ARGS -o ${CMAKE_CURRENT_BINARY_DIR} -e ${CMAKE_CURRENT_SOURCE_DIR}/exclude.txt
273- Clutter
274- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
275-
276-add_library(smokeclutter SHARED ${smokeclutter_LIB_SRCS})
277-
278-target_link_libraries(smokeclutter
279- ${QT_QTCORE_LIBRARY}
280- gobject-2.0
281- glib-2.0
282- gsmoke
283-)
284+GSMOKE_MODULE_GEN(clutter Clutter "")
285
286=== modified file 'modules/cogl/CMakeLists.txt'
287--- modules/cogl/CMakeLists.txt 2011-08-15 16:23:02 +0000
288+++ modules/cogl/CMakeLists.txt 2011-09-25 21:38:17 +0000
289@@ -1,28 +1,3 @@
290
291-FILE(GLOB COGL_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
292-
293-SET(smokecogl_LIB_SRCS
294- cogl.cpp
295- ${COGL_CPP}
296-)
297-
298-include_directories(
299- ${CMAKE_SOURCE_DIR}/src
300- ${CMAKE_BINARY_DIR}/modules
301- ${QT_INCLUDES}
302-)
303-
304-add_custom_command(OUTPUT cogl.cpp
305- COMMAND gsmokegen
306- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
307- Cogl
308- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
309-
310-add_library(smokecogl SHARED ${smokecogl_LIB_SRCS})
311-
312-target_link_libraries(smokecogl
313- ${QT_QTCORE_LIBRARY}
314- gobject-2.0
315- glib-2.0
316- gsmoke
317-)
318+GSMOKE_MODULE_GEN(cogl Cogl "")
319+
320
321=== modified file 'modules/gdk/CMakeLists.txt'
322--- modules/gdk/CMakeLists.txt 2011-09-22 14:41:13 +0000
323+++ modules/gdk/CMakeLists.txt 2011-09-25 21:38:17 +0000
324@@ -1,28 +1,3 @@
325
326-FILE(GLOB GDK_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
327-
328-SET(smokegdk_LIB_SRCS
329- gdk.cpp
330- ${GDK_CPP}
331-)
332-
333-include_directories(
334- ${CMAKE_SOURCE_DIR}/src
335- ${CMAKE_BINARY_DIR}/modules
336- ${QT_INCLUDES}
337-)
338-
339-add_custom_command(OUTPUT gdk.cpp
340- COMMAND gsmokegen
341- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
342- Gdk
343- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
344-
345-add_library(smokegdk SHARED ${smokegdk_LIB_SRCS})
346-
347-target_link_libraries(smokegdk
348- ${QT_QTCORE_LIBRARY}
349- gobject-2.0
350- glib-2.0
351- gsmoke
352-)
353+GSMOKE_MODULE_GEN(gdk Gdk "")
354+
355
356=== modified file 'modules/gdkpixbuf/CMakeLists.txt'
357--- modules/gdkpixbuf/CMakeLists.txt 2011-08-15 16:23:02 +0000
358+++ modules/gdkpixbuf/CMakeLists.txt 2011-09-25 21:38:17 +0000
359@@ -1,28 +1,3 @@
360
361-FILE(GLOB GDKPIXBUF_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
362-
363-SET(smokegdkpixbuf_LIB_SRCS
364- gdkpixbuf.cpp
365- ${GDKPIXBUF_CPP}
366-)
367-
368-include_directories(
369- ${CMAKE_SOURCE_DIR}/src
370- ${CMAKE_BINARY_DIR}/modules
371- ${QT_INCLUDES}
372-)
373-
374-add_custom_command(OUTPUT gdkpixbuf.cpp
375- COMMAND gsmokegen
376- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
377- GdkPixbuf
378- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
379-
380-add_library(smokegdkpixbuf SHARED ${smokegdkpixbuf_LIB_SRCS})
381-
382-target_link_libraries(smokegdkpixbuf
383- ${QT_QTCORE_LIBRARY}
384- gobject-2.0
385- glib-2.0
386- gsmoke
387-)
388+GSMOKE_MODULE_GEN(gdkpixbuf GdkPixbuf "")
389+
390
391=== modified file 'modules/gio/CMakeLists.txt'
392--- modules/gio/CMakeLists.txt 2011-08-15 16:23:02 +0000
393+++ modules/gio/CMakeLists.txt 2011-09-25 21:38:17 +0000
394@@ -1,28 +1,2 @@
395
396-FILE(GLOB GIO_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
397-
398-SET(smokegio_LIB_SRCS
399- gio.cpp
400- ${GIO_CPP}
401-)
402-
403-include_directories(
404- ${CMAKE_SOURCE_DIR}/src
405- ${CMAKE_BINARY_DIR}/modules
406- ${QT_INCLUDES}
407-)
408-
409-add_custom_command(OUTPUT gio.cpp
410- COMMAND gsmokegen
411- ARGS -o ${CMAKE_CURRENT_BINARY_DIR} -e ${CMAKE_CURRENT_SOURCE_DIR}/exclude.txt
412- Gio
413- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
414-
415-add_library(smokegio SHARED ${smokegio_LIB_SRCS})
416-
417-target_link_libraries(smokegio
418- ${QT_QTCORE_LIBRARY}
419- gobject-2.0
420- glib-2.0
421- gsmoke
422-)
423+GSMOKE_MODULE_GEN(gio Gio "")
424
425=== modified file 'modules/gl/CMakeLists.txt'
426--- modules/gl/CMakeLists.txt 2011-08-15 16:23:02 +0000
427+++ modules/gl/CMakeLists.txt 2011-09-25 21:38:17 +0000
428@@ -1,28 +1,2 @@
429
430-FILE(GLOB GL_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
431-
432-SET(smokegl_LIB_SRCS
433- gl.cpp
434- ${GL_CPP}
435-)
436-
437-include_directories(
438- ${CMAKE_SOURCE_DIR}/src
439- ${CMAKE_BINARY_DIR}/modules
440- ${QT_INCLUDES}
441-)
442-
443-add_custom_command(OUTPUT gl.cpp
444- COMMAND gsmokegen
445- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
446- GL
447- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
448-
449-add_library(smokegl SHARED ${smokegl_LIB_SRCS})
450-
451-target_link_libraries(smokegl
452- ${QT_QTCORE_LIBRARY}
453- gobject-2.0
454- glib-2.0
455- gsmoke
456-)
457+GSMOKE_MODULE_GEN(gl GL "")
458
459=== modified file 'modules/glib/CMakeLists.txt'
460--- modules/glib/CMakeLists.txt 2011-09-22 14:41:13 +0000
461+++ modules/glib/CMakeLists.txt 2011-09-25 21:38:17 +0000
462@@ -1,28 +1,2 @@
463
464-FILE(GLOB GLIB_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
465-
466-SET(smokeglib_LIB_SRCS
467- glib.cpp
468- ${GLIB_CPP}
469-)
470-
471-include_directories(
472- ${CMAKE_SOURCE_DIR}/src
473- ${CMAKE_BINARY_DIR}/modules
474- ${QT_INCLUDES}
475-)
476-
477-add_custom_command(OUTPUT glib.cpp
478- COMMAND gsmokegen
479- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
480- GLib
481- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
482-
483-add_library(smokeglib SHARED ${smokeglib_LIB_SRCS})
484-
485-target_link_libraries(smokeglib
486- ${QT_QTCORE_LIBRARY}
487- gobject-2.0
488- glib-2.0
489- gsmoke
490-)
491+GSMOKE_MODULE_GEN(glib GLib "")
492
493=== modified file 'modules/gmodule/CMakeLists.txt'
494--- modules/gmodule/CMakeLists.txt 2011-08-15 16:23:02 +0000
495+++ modules/gmodule/CMakeLists.txt 2011-09-25 21:38:17 +0000
496@@ -1,28 +1,3 @@
497
498-FILE(GLOB GMODULE_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
499-
500-SET(smokegmodule_LIB_SRCS
501- gmodule.cpp
502- ${GMODULE_CPP}
503-)
504-
505-include_directories(
506- ${CMAKE_SOURCE_DIR}/src
507- ${CMAKE_BINARY_DIR}/modules
508- ${QT_INCLUDES}
509-)
510-
511-add_custom_command(OUTPUT gmodule.cpp
512- COMMAND gsmokegen
513- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
514- GModule
515- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
516-
517-add_library(smokegmodule SHARED ${smokegmodule_LIB_SRCS})
518-
519-target_link_libraries(smokegmodule
520- ${QT_QTCORE_LIBRARY}
521- gobject-2.0
522- glib-2.0
523- gsmoke
524-)
525\ No newline at end of file
526+
527+GSMOKE_MODULE_GEN(gmodule GModule "")
528
529=== modified file 'modules/gobject/CMakeLists.txt'
530--- modules/gobject/CMakeLists.txt 2011-08-15 16:23:02 +0000
531+++ modules/gobject/CMakeLists.txt 2011-09-25 21:38:17 +0000
532@@ -1,28 +1,2 @@
533
534-FILE(GLOB GOBJECT_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
535-
536-SET(smokegobject_LIB_SRCS
537- gobject.cpp
538- ${GOBJECT_CPP}
539-)
540-
541-include_directories(
542- ${CMAKE_SOURCE_DIR}/src
543- ${CMAKE_BINARY_DIR}/modules
544- ${QT_INCLUDES}
545-)
546-
547-add_custom_command(OUTPUT gobject.cpp
548- COMMAND gsmokegen
549- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
550- GObject
551- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
552-
553-add_library(smokegobject SHARED ${smokegobject_LIB_SRCS})
554-
555-target_link_libraries(smokegobject
556- ${QT_QTCORE_LIBRARY}
557- gobject-2.0
558- glib-2.0
559- gsmoke
560-)
561+GSMOKE_MODULE_GEN(gobject GObject "")
562
563=== modified file 'modules/gtk/CMakeLists.txt'
564--- modules/gtk/CMakeLists.txt 2011-08-15 16:23:02 +0000
565+++ modules/gtk/CMakeLists.txt 2011-09-25 21:38:17 +0000
566@@ -1,29 +1,2 @@
567
568-FILE(GLOB GTK_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
569-
570-SET(smokegtk_LIB_SRCS
571- gtk.cpp
572- gtkinit.cpp
573- ${GTK_CPP}
574-)
575-
576-include_directories(
577- ${CMAKE_SOURCE_DIR}/src
578- ${CMAKE_BINARY_DIR}/modules
579- ${QT_INCLUDES}
580-)
581-
582-add_custom_command(OUTPUT gtk.cpp
583- COMMAND gsmokegen
584- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
585- Gtk
586- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
587-
588-add_library(smokegtk SHARED ${smokegtk_LIB_SRCS})
589-
590-target_link_libraries(smokegtk
591- ${QT_QTCORE_LIBRARY}
592- gobject-2.0
593- glib-2.0
594- gsmoke
595-)
596\ No newline at end of file
597+GSMOKE_MODULE_GEN(gtk Gtk gtkinit.cpp)
598
599=== modified file 'modules/json/CMakeLists.txt'
600--- modules/json/CMakeLists.txt 2011-08-15 16:23:02 +0000
601+++ modules/json/CMakeLists.txt 2011-09-25 21:38:17 +0000
602@@ -1,28 +1,1 @@
603-
604-FILE(GLOB JSON_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
605-
606-SET(smokejson_LIB_SRCS
607- json.cpp
608- ${JSON_CPP}
609-)
610-
611-include_directories(
612- ${CMAKE_SOURCE_DIR}/src
613- ${CMAKE_BINARY_DIR}/modules
614- ${QT_INCLUDES}
615-)
616-
617-add_custom_command(OUTPUT json.cpp
618- COMMAND gsmokegen
619- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
620- Json
621- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
622-
623-add_library(smokejson SHARED ${smokejson_LIB_SRCS})
624-
625-target_link_libraries(smokejson
626- ${QT_QTCORE_LIBRARY}
627- gobject-2.0
628- glib-2.0
629- gsmoke
630-)
631+GSMOKE_MODULE_GEN(json Json "")
632
633=== modified file 'modules/pango/CMakeLists.txt'
634--- modules/pango/CMakeLists.txt 2011-08-15 16:23:02 +0000
635+++ modules/pango/CMakeLists.txt 2011-09-25 21:38:17 +0000
636@@ -1,28 +1,2 @@
637
638-FILE(GLOB PANGO_CPP "${CMAKE_CURRENT_BINARY_DIR}/*.cpp")
639-
640-SET(smokepango_LIB_SRCS
641- pango.cpp
642- ${PANGO_CPP}
643-)
644-
645-include_directories(
646- ${CMAKE_SOURCE_DIR}/src
647- ${CMAKE_BINARY_DIR}/modules
648- ${QT_INCLUDES}
649-)
650-
651-add_custom_command(OUTPUT pango.cpp
652- COMMAND gsmokegen
653- ARGS -o ${CMAKE_CURRENT_BINARY_DIR}
654- Pango
655- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
656-
657-add_library(smokepango SHARED ${smokepango_LIB_SRCS})
658-
659-target_link_libraries(smokepango
660- ${QT_QTCORE_LIBRARY}
661- gobject-2.0
662- glib-2.0
663- gsmoke
664-)
665\ No newline at end of file
666+GSMOKE_MODULE_GEN(pango Pango "")
667
668=== added directory 'modules/tests'
669=== added file 'modules/tests/CMakeLists.txt'
670--- modules/tests/CMakeLists.txt 1970-01-01 00:00:00 +0000
671+++ modules/tests/CMakeLists.txt 2011-09-25 21:38:17 +0000
672@@ -0,0 +1,1 @@
673+add_subdirectory(helloworld)
674
675=== renamed directory 'tests/helloworld' => 'modules/tests/helloworld'
676=== modified file 'modules/tests/helloworld/CMakeLists.txt'
677--- tests/helloworld/CMakeLists.txt 2011-08-15 15:29:10 +0000
678+++ modules/tests/helloworld/CMakeLists.txt 2011-09-25 21:38:17 +0000
679@@ -14,14 +14,13 @@
680 myobject.cpp
681 )
682
683+link_directories(${GSMOKE_LIBRARY_DIRS})
684+
685 include_directories(
686- # ${GLIB2_INCLUDE_DIRS}
687 ${QT_INCLUDES}
688- # ${GOBJECT-INTROSPECTION_INCLUDE_DIRS}
689- ${CMAKE_SOURCE_DIR}/src
690- ${CMAKE_SOURCE_DIR}/tests/helloworld
691- ${CMAKE_BINARY_DIR}/modules
692- ${CMAKE_SOURCE_DIR}/modules
693+ ${CMAKE_BINARY_DIR}
694+ ${CMAKE_SOURCE_DIR}
695+ ${GSMOKE_INCLUDE_DIRS}
696 )
697
698 #qt4_automoc(${helloworld_SRCS})
699@@ -31,10 +30,7 @@
700
701 target_link_libraries( helloworld
702 ${QT_QTCORE_LIBRARY}
703- gobject-2.0
704- glib-2.0
705-# gtk-2.0
706- gsmoke
707+ ${GSMOKE_LIBRARIES}
708 smokeatk
709 smokecairo
710 smokegdkpixbuf
711
712=== modified file 'src/CMakeLists.txt'
713--- src/CMakeLists.txt 2011-08-13 15:52:51 +0000
714+++ src/CMakeLists.txt 2011-09-25 21:38:17 +0000
715@@ -15,22 +15,11 @@
716 utils.cpp
717 )
718
719-include_directories( ${GLIB2_INCLUDE_DIRS}
720- ${GOBJECT-INTROSPECTION_INCLUDE_DIRS}
721- ${QT_INCLUDES}
722- )
723+include_directories(${GSMOKE_INCLUDES})
724
725 add_library(gsmoke SHARED ${gsmoke_SRCS})
726
727-target_link_libraries( gsmoke
728- gio-2.0
729- gobject-2.0
730- gmodule-2.0
731- ${GLIB2_LIBRARIES}
732- ffi
733- ${QT_QTCORE_LIBRARY}
734- girepository-1.0
735- )
736+target_link_libraries(gsmoke ${GSMOKE_LIBS})
737
738 # A bit early to install yet..
739 # INSTALL(TARGETS gsmoke DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
740
741=== modified file 'tests/CMakeLists.txt'
742--- tests/CMakeLists.txt 2011-08-13 09:44:01 +0000
743+++ tests/CMakeLists.txt 2011-09-25 21:38:17 +0000
744@@ -1,5 +1,4 @@
745 add_subdirectory(libs)
746 add_subdirectory(codegen)
747-add_subdirectory(helloworld)
748 add_subdirectory(everything)
749 add_subdirectory(gimarshallingtests)
750
751=== modified file 'tools/gsmokegen/cppgenerator.cpp'
752--- tools/gsmokegen/cppgenerator.cpp 2011-08-15 14:37:24 +0000
753+++ tools/gsmokegen/cppgenerator.cpp 2011-09-25 21:38:17 +0000
754@@ -648,7 +648,26 @@
755 header() << " };" << endl << endl;
756 }
757
758-void CppGenerator::generateClass(const QByteArray& classPath, int classId)
759+void CppGenerator::generateClass(const QByteArray& classPath, int classId, GenerationMode mode)
760+{
761+ QByteArray headerFilename(classPath + ".h");
762+ headerFilename.replace("::", "_");
763+ headerFilename = headerFilename.toLower();
764+ QFile headerFile(m_directory.absolutePath() + QDir::separator() + QString::fromUtf8(headerFilename));
765+
766+ QByteArray cppFilename(classPath + ".cpp");
767+ cppFilename.replace("::", "_");
768+ cppFilename = cppFilename.toLower();
769+ QFile cppFile(m_directory.absolutePath() + QDir::separator() + QString::fromUtf8(cppFilename));
770+
771+ m_generatedFiles << headerFile.fileName() << cppFile.fileName();
772+
773+ if (mode == GenerateCode) {
774+ generateClassCode(classPath, classId, headerFile, cppFile);
775+ }
776+}
777+
778+void CppGenerator::generateClassCode(const QByteArray& classPath, int classId, QFile& headerFile, QFile& cppFile)
779 {
780 const QMetaObject *meta = Smoke::GObjectNamespace::findMetaObject(classPath);
781 if (meta == 0) {
782@@ -658,25 +677,15 @@
783
784 QByteArray className = classPath.mid(classPath.lastIndexOf(":") + 1);
785
786- QByteArray headerFilename(classPath + ".h");
787- headerFilename.replace("::", "_");
788- headerFilename = headerFilename.toLower();
789- QFile headerFile(m_directory.absolutePath() + QDir::separator() + QString::fromUtf8(headerFilename));
790-
791 if (!headerFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
792- qWarning() << Q_FUNC_INFO << "File open failed:" << headerFilename;
793+ qWarning() << Q_FUNC_INFO << "File open failed:" << headerFile.fileName();
794 return;
795 }
796
797 m_header = new QTextStream(&headerFile);
798
799- QByteArray cppFilename(classPath + ".cpp");
800- cppFilename.replace("::", "_");
801- cppFilename = cppFilename.toLower();
802- QFile cppFile(m_directory.absolutePath() + QDir::separator() + QString::fromUtf8(cppFilename));
803-
804 if (!cppFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
805- qWarning() << Q_FUNC_INFO << "File open failed:" << cppFilename;
806+ qWarning() << Q_FUNC_INFO << "File open failed:" << cppFile.fileName();
807 return;
808 }
809
810@@ -704,7 +713,7 @@
811 header() << "#include <" << superclassHeader << ">" << endl << endl;
812 }
813
814- cpp() << "#include <" << module + "/" + headerFilename << ">" << endl << endl;
815+ cpp() << "#include <" << module + "/" + QFileInfo(headerFile).fileName() << ">" << endl << endl;
816
817 generateClassForwardDeclarations(className);
818
819@@ -960,7 +969,7 @@
820 cppFile.close();
821 }
822
823-void CppGenerator::generate(const QByteArray& name, const QString &outputDirectory)
824+void CppGenerator::generate(const QByteArray& name, const QString &outputDirectory, GenerationMode mode)
825 {
826 m_directory = QDir(outputDirectory);
827 nameSpace = name;
828@@ -970,31 +979,52 @@
829 return;
830 }
831
832+ QByteArray headerFilename(nameSpace + ".h");
833+ headerFilename.replace("::", "_");
834+ headerFilename = headerFilename.toLower();
835+ QFile headerFile(m_directory.absolutePath() + QDir::separator() + QString::fromUtf8(headerFilename));
836+
837+ QByteArray cppFilename(nameSpace + ".cpp");
838+ cppFilename.replace("::", "_");
839+ cppFilename = cppFilename.toLower();
840+ QFile cppFile(m_directory.absolutePath() + QDir::separator() + QString::fromUtf8(cppFilename));
841+
842+ m_generatedFiles << headerFile.fileName() << cppFile.fileName();
843+
844+ if (mode == GenerateCode) {
845+ generateCode(name, headerFile, cppFile);
846+ }
847+
848+ for (int classId = 0; classId < ns->classNames.size(); ++classId) {
849+ generateClass(ns->classNames[classId], classId, mode);
850+ }
851+
852+ if (mode == GenerateFileList ) {
853+ QFile f;
854+ f.open(stdout, QIODevice::WriteOnly);
855+ QTextStream stream(&f);
856+ stream << m_generatedFiles.join("\n") << "\n";
857+ f.close();
858+ }
859+}
860+
861+void CppGenerator::generateCode(const QByteArray& name, QFile& headerFile, QFile& cppFile)
862+{
863 const QMetaObject *meta = Smoke::GObjectNamespace::findMetaObject(nameSpace);
864 if (meta == 0) {
865 qWarning() << Q_FUNC_INFO << "QMetaObject not found:" << nameSpace;
866 return;
867 }
868
869- QByteArray headerFilename(nameSpace + ".h");
870- headerFilename.replace("::", "_");
871- headerFilename = headerFilename.toLower();
872- QFile headerFile(m_directory.absolutePath() + QDir::separator() + QString::fromUtf8(headerFilename));
873-
874 if (!headerFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
875- qWarning() << Q_FUNC_INFO << "File open failed:" << headerFilename;
876+ qWarning() << Q_FUNC_INFO << "File open failed:" << headerFile.fileName();
877 return;
878 }
879
880 m_header = new QTextStream(&headerFile);
881
882- QByteArray cppFilename(nameSpace + ".cpp");
883- cppFilename.replace("::", "_");
884- cppFilename = cppFilename.toLower();
885- QFile cppFile(m_directory.absolutePath() + QDir::separator() + QString::fromUtf8(cppFilename));
886-
887 if (!cppFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
888- qWarning() << Q_FUNC_INFO << "File open failed:" << cppFilename;
889+ qWarning() << Q_FUNC_INFO << "File open failed:" << cppFile.fileName();
890 return;
891 }
892
893@@ -1018,7 +1048,7 @@
894 header() << "#include \"" << superclassHeader << "\"" << endl << endl;
895 }
896
897- cpp() << "#include \"" << headerFilename << "\"" << endl << endl;
898+ cpp() << "#include \"" << QFileInfo(headerFile).fileName() << "\"" << endl << endl;
899
900 generateForwardDeclarations();
901
902@@ -1180,10 +1210,6 @@
903
904 headerFile.close();
905 cppFile.close();
906-
907- for (int classId = 0; classId < ns->classNames.size(); ++classId) {
908- generateClass(ns->classNames[classId], classId);
909- }
910 }
911
912 }
913
914=== modified file 'tools/gsmokegen/cppgenerator.h'
915--- tools/gsmokegen/cppgenerator.h 2011-08-15 14:24:53 +0000
916+++ tools/gsmokegen/cppgenerator.h 2011-09-25 21:38:17 +0000
917@@ -34,6 +34,11 @@
918
919 class CppGenerator {
920 public:
921+ enum GenerationMode {
922+ GenerateCode,
923+ GenerateFileList
924+ };
925+
926 CppGenerator(const QList<QRegExp>& excludeSignatures = QList<QRegExp>());
927 QTextStream &header() { return *m_header; }
928 QTextStream &cpp() { return *m_cpp; }
929@@ -54,8 +59,11 @@
930 void generateStructs();
931 QByteArray generateMethodSignature(GIFunctionInfo * function, QByteArray& signature);
932 void generateInterface(GIInterfaceInfo* interface);
933- void generateClass(const QByteArray& classPath, int classId);
934- void generate(const QByteArray& nameSpace, const QString &outputDirectory = QString());
935+ void generateClass(const QByteArray& classPath, int classId, GenerationMode mode = GenerateCode);
936+ void generateClassCode(const QByteArray& classPath, int classId, QFile& headerFile, QFile& cppFile);
937+ void generate(const QByteArray& nameSpace, const QString &outputDirectory = QString(), GenerationMode mode = GenerateCode);
938+ void generateCode(const QByteArray& name, QFile& headerFile, QFile& cppFile);
939+
940 private:
941 QByteArray nameSpace;
942 GObjectNamespace *ns;
943@@ -63,6 +71,7 @@
944 QTextStream *m_cpp;
945 QDir m_directory;
946 QList<QRegExp> m_excludeSignatures;
947+ QStringList m_generatedFiles;
948 };
949
950 }
951
952=== modified file 'tools/gsmokegen/main.cpp'
953--- tools/gsmokegen/main.cpp 2011-08-15 12:54:01 +0000
954+++ tools/gsmokegen/main.cpp 2011-09-25 21:38:17 +0000
955@@ -25,24 +25,30 @@
956 static QStringList modules;
957
958
959-#define PRINT_USAGE() \
960- qDebug() << "Usage:" << argv[0] << "[-o <output directory>] [-e <exclude file>] module.."
961+void print_usage(const char *programName)
962+{
963+ qDebug() << "Usage:" << programName <<
964+ "[-o <output directory>] [-e <exclude file>] [-l] module.." << "\n\n" <<
965+ "If -l or --list-files is passed, a list of the files generated will be \n"
966+ "printed to stdout without actually generating the files.";
967+}
968
969 int main(int argc, char** argv)
970 {
971 QCoreApplication app(argc, argv);
972 QStringList arguments = app.arguments();
973 QList<QRegExp> excludeSignatures;
974+ Smoke::CppGenerator::GenerationMode generationMode = Smoke::CppGenerator::GenerateCode;
975
976 if (argc == 1) {
977- PRINT_USAGE();
978+ print_usage(argv[0]);
979 return 0;
980 }
981
982 int i = 1;
983 while (i < arguments.length()) {
984 if (arguments[i] == QLatin1String("-h") || arguments[i] == QLatin1String("--help")) {
985- PRINT_USAGE();
986+ print_usage(argv[0]);
987 return 0;
988 } else if (arguments[i] == QLatin1String("-o") || arguments[i] == QLatin1String("--output")) {
989 i++;
990@@ -50,6 +56,9 @@
991 outputDirectory = arguments[i].toUtf8();
992 }
993 i++;
994+ } else if (arguments[i] == QLatin1String("-l") || arguments[i] == QLatin1String("--list-files")) {
995+ generationMode = Smoke::CppGenerator::GenerateFileList;
996+ i++;
997 } else if (arguments[i] == QLatin1String("-e") || arguments[i] == QLatin1String("--excludes")) {
998 i++;
999 if (i < arguments.length()) {
1000@@ -78,7 +87,7 @@
1001
1002 foreach (QString module, modules) {
1003 Smoke::GObjectNamespace *ns = new Smoke::GObjectNamespace(module.toLatin1());
1004- generator.generate(module.toLatin1(), outputDirectory);
1005+ generator.generate(module.toLatin1(), outputDirectory, generationMode);
1006 }
1007
1008 return 0;

Subscribers

People subscribed via source and target branches