--- a/CMakeLists.txt Thu Jun 30 16:19:02 2011 +0300
+++ b/CMakeLists.txt Sat May 19 23:44:25 2012 +0300
@@ -32,13 +32,14 @@
pkg_check_modules(GLIB REQUIRED glib-2.0)
pkg_check_modules(GMODULE REQUIRED gmodule-2.0)
pkg_check_modules(MCABBER REQUIRED mcabber)
-find_package(Perl)
+find_program(DOCGEN_EXECUTABLE NAMES docgen.pl docgen DOC "Docgen documentation generator script (optional)")
link_directories(${GLIB_LIBRARY_DIRS}
${GMODULE_LIBRARY_DIRS}
${MCABBER_LIBRARY_DIRS})
## Define targets
add_library(lua MODULE lua.c util.c)
+get_target_property(lua_SOURCES lua SOURCES)
## Set up compiler
configure_file(config.h.in config.h ESCAPE_QUOTES)
@@ -55,9 +56,8 @@
set_target_properties(lua PROPERTIES COMPILE_FLAGS "-Wall")
## Extra targets
-if(PERL_FOUND)
- get_target_property(lua_SOURCES lua SOURCES)
- add_custom_command(OUTPUT ${lua_BINARY_DIR}/lua.html COMMAND ${PERL_EXECUTABLE} ${lua_SOURCE_DIR}/docgen.pl ${lua_SOURCES} > ${lua_BINARY_DIR}/lua.html DEPENDS ${lua_SOURCE_DIR}/docgen.pl ${lua_SOURCES} WORKING_DIRECTORY ${lua_SOURCE_DIR})
+if(DOCGEN_EXECUTABLE)
+ add_custom_command(OUTPUT ${lua_BINARY_DIR}/lua.html COMMAND ${DOCGEN_EXECUTABLE} -f html -t "Documentation for Lua module for MCabber" -o ${lua_BINARY_DIR}/lua.html -- ${lua_SOURCES} DEPENDS ${DOCGEN_EXECUTABLE} ${lua_SOURCES} WORKING_DIRECTORY ${lua_SOURCE_DIR})
add_custom_target(doc ALL DEPENDS ${lua_BINARY_DIR}/lua.html)
endif()
@@ -93,7 +93,7 @@
## Set up installer
install(TARGETS lua DESTINATION lib/mcabber)
-if(PERL_FOUND)
+if(DOCGEN_EXECUTABLE)
install(FILES ${lua_BINARY_DIR}/lua.html DESTINATION share/doc/${CPACK_PACKAGE_NAME})
endif()
install(DIRECTORY examples DESTINATION share/doc/${CPACK_PACKAGE_NAME} PATTERN "*~" EXCLUDE)
--- a/docgen.pl Thu Jun 30 16:19:02 2011 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
-#! /usr/bin/perl
-
-# Copyright 2009 Myhailo Danylenko
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-use strict;
-use warnings;
-
-my %docs;
-my @tags;
-my $inside;
-my $harvest;
-my @values;
-
-foreach my $file (@ARGV) {
- if ( not open SOURCE, '<', $file ) {
- print STDERR "Cannot open $file\n";
- next;
- }
-
- my $chunk = 0;
-
- while (<SOURCE>) {
- if ( $inside ) {
- if ( not /^\/\/\// ) {
- $inside = 0;
- $chunk++;
- } elsif ( /^\/\/\/ G:/ ) {
- $inside = 0;
- $harvest = 'V: ' . substr ( $_, 6 );
- } else {
- push @{$docs{$file}[$chunk]}, substr ( $_, 4 );
- }
- } elsif ( $harvest ) {
- if ( /\{\s*NULL.*\}/ ) {
- push @{$docs{$file}[$chunk]}, $harvest . ' ' . join ( ', ', @values );
- $harvest = undef;
- @values = ();
- $chunk++;
- } elsif ( /\{\s*"(.+)".*\}/ ) {
- push @values, $1;
- }
- } else {
- next if not /^\/\/\//;
-
- $inside = 1;
- my $tag = substr $_, 4;
- chomp $tag;
- push @{$docs{$file}[$chunk]}, $tag;
- # hack to allow twoword objects be written in text with spaces
- # now it matches "lm message" instead of "lm message node" -.-
- # and even if tag list will be reverse sorted by length,
- # it will produce nested links...
- # well, that all is now solved, but in not too impressive way..
- $tag =~ s/_/./g;
- push @tags, $tag;
- }
- }
-
- close SOURCE;
-}
-
-print <<HEADER
-<html>
-<head><title>lua-loudmouth docs</title></head>
-<body>
-HEADER
-;
-
-@tags = reverse sort { length $a <=> length $b } @tags;
-# TODO preserve original order
-foreach my $file ( sort keys %docs ) {
- print "<hr>";
- foreach my $chunk ( @{$docs{$file}} ) {
- my $head = shift @$chunk;
- my $tag = $head;
- my $list = undef;
- $tag =~ s/_/./g;
- print "<a name='$tag'></a><h2>$head</h2><p>";
- foreach ( @$chunk ) {
- s/^A: /<br\/>Arguments: /;
- s/^R: /<br\/>Return values: /;
- s/^V: /<br\/>Values: /;
- s/^\[ /<br\/><pre>/;
- s/^\]/<\/pre><br\/>/;
- if ( $list ) {
- if ( /^\* / ) {
- s/^\* /<\/li><li>/;
- } else {
- s/^/<\/li><\/ul> /;
- $list = undef;
- }
- } elsif ( /^\* / ) {
- s/^\* /<ul><li>/;
- $list = 1;
- }
- foreach my $tag ( @tags ) {
- # TODO quotemeta required, but for now
- # this bug is rather desired...
- #s/\b$tag\b/<a href="#$tag">$&<\/a>/g;
- s/(.)\b($tag)\b/ if ( $1 eq '#' or $1 eq '>' ) { "$1$2" } else { "$1<a href='#$tag'>$2<\/a>" } /ge;
- }
- print $_;
- }
- print "</li></ul>" if $list;
- print "</p>"
- }
- print "<hr>";
-}
-
-print "</body></html>"
-
-# The end