You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdevelop/buildtools/autotools/addtargetdlg.cpp

227 lines
6.5 KiB

/***************************************************************************
* Copyright (C) 2001 by Bernd Gehrmann *
* bernd@kdevelop.org *
* *
* 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. *
* *
***************************************************************************/
#include "addtargetdlg.h"
#include <tqcheckbox.h>
#include <tqcombobox.h>
#include <tqgroupbox.h>
#include <tqvalidator.h>
#include <klineedit.h>
#include <klocale.h>
#include <kmessagebox.h>
#include <ksqueezedtextlabel.h>
#include "autolistviewitems.h"
#include "misc.h"
#include "autodetailsview.h"
#include "autoprojectwidget.h"
AddTargetDialog::AddTargetDialog(AutoProjectWidget *widget, SubprojectItem *item,
TQWidget *tqparent, const char *name)
: AddTargetDialogBase(tqparent, name, true)
{
m_subproject = item;
m_widget = widget;
// m_detailsView = view;
primary_combo->setFocus();
primary_combo->insertItem(i18n("Program"));
primary_combo->insertItem(i18n("Library"));
primary_combo->insertItem(i18n("Libtool Library"));
primary_combo->insertItem(i18n("Script"));
primary_combo->insertItem(i18n("Header"));
primary_combo->insertItem(i18n("Data File"));
primary_combo->insertItem(i18n("Java"));
primaryChanged(); // updates prefix combo
if (widget->kdeMode())
ldflagsother_edit->setText("$(all_libraries)");
connect( filename_edit, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( slotFileNameChanged (const TQString&) ) );
setIcon ( SmallIcon ( "targetnew_kdevelop.png" ) );
canonicalLabel->setText ( TQString() );
}
AddTargetDialog::~AddTargetDialog()
{}
void AddTargetDialog::primaryChanged()
{
TQStringList list;
switch (primary_combo->currentItem()) {
case 0: // Program
list.append("bin");
list.append("sbin");
list.append("libexec");
list.append("pkglib");
list.append("noinst");
break;
case 1: // Library
case 2: // Libtool library
list.append("lib");
list.append("pkglib");
list.append("noinst");
if (m_widget->kdeMode())
list.append("kde_module");
break;
case 3: // Script
list.append("bin");
list.append("sbin");
list.append("libexec");
list.append("pkgdata");
list.append("noinst");
break;
case 4: // Header
list.append("include");
list.append("oldinclude");
list.append("pkginclude");
list.append("noinst");
break;
case 5: // Data
list.append("bin");
list.append("sbin");
list.append("noinst");
break;
case 6: // Java
list.append("java");
list.append("noinst");
break;
}
prefix_combo->clear();
prefix_combo->insertStringList(list);
TQStringList prefixes;
TQMap<TQString,TQString>::ConstIterator it;
for (it = m_subproject->prefixes.begin(); it != m_subproject->prefixes.end(); ++it)
prefix_combo->insertItem(it.key());
// Only enable ldflags stuff for libtool libraries
bool lt = primary_combo->currentItem() == 2;
bool prog = primary_combo->currentItem() == 0;
allstatic_box->setEnabled(lt);
avoidversion_box->setEnabled(lt);
module_box->setEnabled(lt);
noundefined_box->setEnabled(lt);
ldflagsother_edit->setEnabled(lt || prog);
}
void AddTargetDialog::accept()
{
TQString name = filename_edit->text().stripWhiteSpace();
TQString prefix = prefix_combo->currentText();
TQString primary;
switch (primary_combo->currentItem()) {
case 0: primary = "PROGRAMS"; break;
case 1: primary = "LIBRARIES"; break;
case 2: primary = "LTLIBRARIES"; break;
case 3: primary = "SCRIPTS"; break;
case 4: primary = "HEADERS"; break;
case 5: primary = "DATA"; break;
case 6: primary = "JAVA"; break;
default: ;
}
if (name.isEmpty()) {
KMessageBox::sorry(this, i18n("You have to give the target a name"));
return;
}
#if 0
if (primary == "LIBRARIES" && !name.startsWith("lib")) {
KMessageBox::sorry(this, i18n("Libraries must have a lib prefix."));
return;
}
if (primary == "LTLIBRARIES" && !name.startsWith("lib")) {
KMessageBox::sorry(this, i18n("Libtool libraries must have a lib prefix."));
return;
}
if (primary == "LTLIBRARIES" && name.right(3) != ".la") {
KMessageBox::sorry(this, i18n("Libtool libraries must have a .la suffix."));
return;
}
#endif
if( primary.endsWith("LIBRARIES") && !name.startsWith("lib") && !module_box->isChecked() )
name.prepend( TQString::tqfromLatin1("lib") );
if( primary == "LTLIBRARIES" && !name.endsWith(".la") )
name.append( TQString::tqfromLatin1(".la") );
if ( primary == "LIBRARIES" && !name.endsWith(".a") )
name.append ( TQString::tqfromLatin1(".a") );
TQPtrListIterator<TargetItem> it(m_subproject->targets);
for (; it.current(); ++it)
if (name == (*it)->name) {
KMessageBox::sorry(this, i18n("A target with this name already exists."));
return;
}
TQStringList flagslist;
if (primary == "LTLIBRARIES") {
if (allstatic_box->isChecked())
flagslist.append("-all-static");
if (avoidversion_box->isChecked())
flagslist.append("-avoid-version");
if (module_box->isChecked())
flagslist.append("-module");
if (noundefined_box->isChecked())
flagslist.append("-no-undefined");
}
flagslist.append(ldflagsother_edit->text());
TQString ldflags = flagslist.join( " " );
TargetItem *titem = m_widget->createTargetItem(name, prefix, primary, false);
// m_detailsView->insertItem ( titem );
m_subproject->targets.append(titem);
TQString canonname = AutoProjectTool::canonicalize(name);
TQMap<TQString,TQString> replaceMap;
if( primary == "PROGRAMS" || primary == "LIBRARIES" || primary == "LTLIBRARIES" || primary == "DATA" ){
TQString varname = prefix + "_" + primary;
m_subproject->variables[varname] += (" " + name);
replaceMap.insert(varname, m_subproject->variables[varname]);
if ( primary != "DATA" ){
replaceMap.insert(canonname + "_SOURCES", "");
}
}
if (primary == "LTLIBRARIES" || primary == "PROGRAMS")
replaceMap.insert(canonname + "_LDFLAGS", ldflags);
AutoProjectTool::addToMakefileam(m_subproject->path + "/Makefile.am", replaceMap);
TQDialog::accept();
}
void AddTargetDialog::slotFileNameChanged ( const TQString& text )
{
canonicalLabel->setText ( AutoProjectTool::canonicalize ( text ) );
}
#include "addtargetdlg.moc"