2010-07-20 5 views
2

J'essaie de configurer autoconf pour mon projet. J'ai tout fonctionne "correctement" sauf que les fonctions ac_set_ < ...> ne sont pas trouvées dans ./configure. Ils fonctionnent très bien dans configure.status si je l'exécute directement. En particulier, j'ai des problèmes avec as_fn_set_status et as_fn_exit.Autoconf produit configure avec des fonctions cassées (ac_fn_set_status, ac_fn_exit)

Si je modifie manuellement le fichier de configuration et déplace les deux fonctions en haut du script configure, tout fonctionne correctement.

Pour arriver à ce point I:

  1. Wrote configure.ac
  2. couru autoreconf -i
  3. couru ./configure

Les lignes résultantes sont quelque chose comme:

./configure: line 1366: as_fn_set_status: command not found 

Il y a 3-4 lignes sur lequel l'erreur se produit.

Des idées sur ce qui pourrait produire cet effet? Voici mon configure.ac:

########################################## 
# Autoconf Configuration File for RPDB # 
########################################## 

# RPDB: An Object-Oriented Wrapper for Oracle's Berkeley Database (BDB/libdb), 
# which is available at: http://www.oracle.com/technology/software/products/berkeley-db/index.html 

########################### 
# Init Autoconf >= 2.61 # 
########################### 

AC_CANONICAL_SYSTEM 

AC_PREREQ(2.61) 
AC_INIT([rpdb], [0.1.0], [[email protected]]) 

AC_CONFIG_AUX_DIR([.]) 
AC_CONFIG_MACRO_DIR([m4]) 
AC_CONFIG_FILES([Makefile]) 
AC_CONFIG_HEADERS([config.h]) 

AM_INIT_AUTOMAKE 

################################# 
# Check for Library Functions # 
################################# 

AC_FUNC_ERROR_AT_LINE 
AC_FUNC_MALLOC 
AC_CHECK_FUNCS([strdup]) 

################################ 
# Check for Working Compiler # 
################################ 

AC_PROG_CC 
AC_PROG_RANLIB 

######################### 
# Check for Libraries # 
######################### 

AC_SEARCH_LIBS([db_create], [db], [have_libdb=yes]) 

####################### 
# "Root Sourcefile" # 
####################### 

# "Root Sourcefile" is only used nominally to specify base path 

AC_CONFIG_SRCDIR([src/RPDB_Base/RPDB.h]) 

####################### 
# Check for Headers # 
####################### 

AC_HEADER_STDC 
AC_CHECK_HEADERS([stdlib.h string.h]) 

# If we found libdb then check for db.h - we need to have both or we throw an error 
if test "x${have_libdb}" = xyes; then 
    AC_CHECK_HEADERS([db.h], [], [have_libdb=no]) 
fi 
if test "x${have_libdb}" = xno; then 
    echo "------------------------------------------" 
    echo " Oracle's Berkeley Database (libdb)  " 
    echo " library and header file is required to " 
    echo " build RPDB. Stopping...     " 
    echo " Check 'config.log' for more information. " 
    echo "------------------------------------------" 
    (exit 1); exit 1; 
fi 

##################################################### 
# Check For Type-Related Compiler Characteristics # 
##################################################### 

AC_C_CONST 
AC_HEADER_STDBOOL 
AC_TYPE_INT32_T 
AC_TYPE_PID_T 
AC_TYPE_SIZE_T 
AC_TYPE_UINT32_T 
AC_TYPE_UINT64_T 
AC_TYPE_UINT8_T 

############################### 
# Generate Configure Script # 
############################### 

AC_OUTPUT 

Répondre

4

Vous ne pouvez pas invoquer les macros qui ont une extension non vide avant AC_INIT. Si vous déplacez l'appel de AC_CANONICAL_SYSTEM pour être après AC_INIT, votre problème devrait disparaître.

+0

J'ai déménagé à CMake, donc je ne peux pas facilement vérifier cela, mais c'est logique, donc je vais l'accepter. Il s'aligne avec le fait que je pourrais déplacer les macros (vraisemblablement créées par AC_INIT?) Vers le haut et elles fonctionneraient. – Asher

0

Avez-vous installé des autoconf différents? Je pense que cette fonction provient de la macro m4: m4sugar/m4sh.m4. Vous pouvez vérifier ce fichier pour voir s'il a la fonction.

Il devrait ressembler à:

[AS_REQUIRE_SHELL_FN([as_fn_set_status], 
    [AS_FUNCTION_DESCRIBE([as_fn_set_status], [STATUS], 
    [Set $? to STATUS, without forking.])], [ return $[]1])]dnl 
+0

Je n'ai pas et la fonction est réellement là - et apparaît dans la sortie finale pour configurer. Si je modifie manuellement configurer, cela fonctionne. – Asher

+0

Les commentaires dans 'm4sh.m4' mentionnent" Nous ne pouvons pas simplement utiliser "sortie N" car certains obus .... ". Peut-être que cela a quelque chose à voir avec la ligne: '(sortie 1); sortie 1, '? – SiggyF

1

J'ai eu un problème simillar qui m'a rendu fou et a finalement trouvé le problème: J'ai essayé de compiler un projet plus ancien qui a fourni ses propres macros m4. Dans les fichiers m4 inclus (dans le sous-répertoire config), des appels à AC_DEFFUN ont fourni un troisième argument. Je ne comprenais pas pourquoi cela causait ce problème, mais en enlevant le troisième argument m'a aidé.

Questions connexes