#!/usr/bin/perl -w require 5.003; use strict; use Getopt::Std; use Data::Dumper; use vars qw($VERSION); $VERSION = '0.0.0'; my %commandline_opt; my %config_vars; getopts 'hvgn:', \%commandline_opt; my $installbuilddir = "/usr/local/apr/build"; # @installbuilddir@ get_config_vars("$installbuilddir/apr_rules.mk", \%config_vars); exit show_usage() if $commandline_opt{h}; exit show_version() if $commandline_opt{v}; exit show_usage() if !$commandline_opt{g} || !$commandline_opt{n}; if ($commandline_opt{g}) { exit gen_project(\%commandline_opt, %config_vars); } show_usage(); sub gen_project { my $opt = shift; my %conf = @_; my $name = $opt->{n}; create_files($name); warn "Creating [LINK] $name/apr\n"; symlink "$config_vars{apr_builddir}", "$name/apr"; warn "Creating [LINK] $name/build/apr_common.m4\n"; symlink "$config_vars{apr_builders}/apr_common.m4", "$name/build/apr_common.m4"; warn "Creating [LINK] $name/build/find_apr.m4\n"; symlink "$config_vars{apr_builders}/find_apr.m4", "$name/build/find_apr.m4"; warn "Creating [FILE] $name/NEWS\n"; system "touch $name/NEWS"; warn "Creating [FILE] $name/README\n"; system "touch $name/README"; warn "Creating [FILE] $name/AUTHORS\n"; system "touch $name/AUTHORS"; warn "Creating [FILE] $name/ChangeLog\n"; system "touch $name/ChangeLog"; warn "Creating [FILE] $name/configure\n"; system "cd $name; ./buildconf"; return 0; } sub show_usage { print "Usage: $0 -g -n \n"; return 1; } sub show_version { print "$0 $VERSION\n"; return 1; } sub get_config_vars { my ($file, $rh_config) = @_; open IN, $file or die "cannot open $file: $!"; while (){ if (/^\s*(.*?)\s*=\s*(.*)$/) { $rh_config->{$1} = $2; } } close IN; } sub create_files { my $name = shift; my ($configure_in, $makefile_am, $app_c, $buildconf) = split_template($name); warn "Creating [DIR] $name\n"; mkdir "$name", 0755; warn "Creating [DIR] $name/build\n"; mkdir "$name/build", 0755; warn "Creating [FILE] $name/configure.in\n"; open F, "> $name/configure.in" || die; print F $configure_in; close F; warn "Creating [FILE] $name/Makefile.am\n"; open F, "> $name/Makefile.am" || die; print F $makefile_am; close F; warn "Creating [FILE] $name/$name.c\n"; open F, "> $name/$name.c" || die; print F $app_c; close F; warn "Creating [FILE] $name/buildconf\n"; open F, "> $name/buildconf" || die; print F $buildconf; close F; chmod 0755, "$name/buildconf"; } sub split_template { my $name = shift; my $data = join '', ; $data =~ s|%NAME%|$name|sg; return ($data =~ m|^(.+)-=#=-\n(.+)-=#=-\n(.+)-=#=-\n(.+)|s); } __DATA__ dnl dnl Autoconf configuration for %NAME% dnl dnl Use ./buildconf to produce a configure script dnl AC_INIT() AC_CONFIG_AUX_DIR(build) AM_INIT_AUTOMAKE(%NAME%, 0.0.0, no-define) sinclude(build/apr_common.m4) sinclude(build/find_apr.m4) echo $ac_n "${nl}Configuring Apache Portable Runtime library ...${nl}" APR_FIND_APR("$srcdir/apr", "./apr", 1) if test "$apr_found" = "reconfig"; then APR_SUBDIR_CONFIG(apr) fi AC_PROG_CC AC_PROG_LIBTOOL AC_OUTPUT(Makefile) -=#=- INCLUDES = -I$(srcdir)/apr/include SUBDIRS = apr bin_PROGRAMS = %NAME% %NAME%_SOURCE = %NAME%.c %NAME%_LDADD = apr/libapr-0.la -=#=- /* ==================================================================== * * */ /* * %NAME%: blah blah blah. * */ #include "apr_errno.h" #include "apr_general.h" #include "apr_strings.h" #include "apr_file_io.h" #include "apr_pools.h" #include #include static apr_file_t *local_stdout, *local_stdin, *local_stderr; int main(int argc, const char * const *argv) { apr_pool_t *p; apr_status_t rc; char *str; /* initialize */ apr_app_initialize(&argc, &argv, NULL); apr_pool_create(&p, NULL); apr_file_open_stdout(&local_stdout, p); apr_file_open_stdin(&local_stdin, p); apr_file_open_stderr(&local_stderr, p); str = apr_pstrcat(p, "%NAME%", ": ", "Hello World", NULL); apr_file_printf(local_stdout, "%s\n", str); return EXIT_SUCCESS; } -=#=- #!/bin/sh # ==================================================================== # # buildconf: Build the support scripts needed to compile from a # checked-out version of the source code. # aclocal libtoolize automake --add-missing autoconf rm aclocal.m4 rm -rf autom4te*.cache