#508658 libtool: --preserve-dup-deps a no-op with convenience libs

Package:
libtool
Source:
libtool
Submitter:
Clint Adams
Date:
2024-06-22 10:09:06 UTC
Severity:
normal
Tags:
#508658#5
Date:
2008-12-13 18:24:14 UTC
From:
To:
Using --preserve-dup-deps still results in convenience libraries being deduplicated.

I found this, but little else:

http://osdir.com/ml/gnu.libtool.bugs/2006/msg00233.html

#508658#10
Date:
2008-12-13 19:53:56 UTC
From:
To:
Hi Clint,

* Clint Adams wrote on Sat, Dec 13, 2008 at 07:24:14PM CET:

Does it work with 2.2.x from experimental?  If no, please post the exact
command used to link, and all of its output, thanks.  It depends on some
details whether duplication is kept (search for "Pedantically" in the
script).

Cheers,
Ralf

#508658#15
Date:
2008-12-13 20:43:34 UTC
From:
To:
No, it does not.  If I swap out the case statement for the "right thing
to do" under "Pedantically", it seems to work.

/bin/bash ../libtool --tag=CC --preserve-dup-deps  --mode=link gcc  -Wall -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -g -O2   -o civserver civserver.o ../utility/libcivutility.la ../common/libcivcommon.la ../ai/libcivai.la ../utility/libcivutility.la ./libcivserver.la  ../utility/libcivutility.la ../common/libcivcommon.la ../ai/libcivai.la ../utility/libcivutility.la ./libcivserver.la ../utility/libcivutility.la ../common/aicore/libaicore.la ./generator/libgenerator.la ./scripting/libscripting.la ../dependencies/lua-5.1/src/liblua.a ../dependencies/toluaxx/src/lib/libtolua.a  -lreadline   -lm   -lz
libtool: link: gcc -Wall -Wpointer-arith -Wcast-align -Wmissing-prototypes -Wmissing-declarations -g -O2 -o civserver civserver.o  ../common/.libs/libcivcommon.a ../ai/.libs/libcivai.a ./.libs/libcivserver.a ../utility/.libs/libcivutility.a ../common/aicore/.libs/libaicore.a ./generator/.libs/libgenerator.a ./scripting/.libs/libscripting.a ../dependencies/lua-5.1/src/liblua.a ../dependencies/toluaxx/src/lib/libtolua.a -lreadline -lm -lz
./.libs/libcivserver.a(plrhand.o): In function `player_info_level':
/home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1110: undefined reference to `could_intel_with_player'
./.libs/libcivserver.a(plrhand.o): In function `split_player':
/home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1628: undefined reference to `ai_data_phase_init'
/home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1629: undefined reference to `assess_danger_player'
/home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1631: undefined reference to `assess_danger_player'
./.libs/libcivserver.a(plrhand.o): In function `handle_diplomacy_cancel_pact':
/home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:573: undefined reference to `ai_incident_war'
./.libs/libcivserver.a(plrhand.o): In function `make_contact':
/home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1257: undefined reference to `ai_diplomacy_first_contact'
/home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1254: undefined reference to `ai_diplomacy_first_contact'
./.libs/libcivserver.a(plrhand.o): In function `server_player_init':
/home/clint/tmp/freeciv/obj/server/../../server/plrhand.c:1146: undefined reference to `ai_data_init'
./.libs/libcivserver.a(srv_main.o): In function `server_game_free':
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:2205: undefined reference to `vision_free'
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:2214: undefined reference to `vision_free'
./.libs/libcivserver.a(srv_main.o): In function `srv_ready':
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:2148: undefined reference to `ai_data_analyze_rulesets'
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:2159: undefined reference to `ai_data_init'
./.libs/libcivserver.a(srv_main.o): In function `begin_phase':
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:707: undefined reference to `ai_data_phase_init'
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:709: undefined reference to `ai_manage_buildings'
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:728: undefined reference to `ai_diplomacy_actions'
./.libs/libcivserver.a(srv_main.o): In function `end_phase':
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:791: undefined reference to `ai_settler_init'
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:795: undefined reference to `ai_do_last_activities'
./.libs/libcivserver.a(srv_main.o): In function `ai_start_phase':
/home/clint/tmp/freeciv/obj/server/../../server/srv_main.c:588: undefined reference to `ai_do_first_activities'
./.libs/libcivserver.a(stdinhand.o): In function `debug_command':
/home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:2382: undefined reference to `TIMING_RESULTS'
/home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:2376: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:2417: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:2348: undefined reference to `CITY_LOG'
./.libs/libcivserver.a(stdinhand.o): In function `toggle_ai_player_direct':
/home/clint/tmp/freeciv/obj/server/../../server/stdinhand.c:732: undefined reference to `assess_danger_player'
./.libs/libcivserver.a(unittools.o): In function `compare_units':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2392: undefined reference to `get_defender'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2393: undefined reference to `get_defender'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2394: undefined reference to `unit_win_chance'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2395: undefined reference to `unit_win_chance'
./.libs/libcivserver.a(unittools.o): In function `server_remove_unit':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1459: undefined reference to `vision_free'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1436: undefined reference to `ai_unit_new_role'
./.libs/libcivserver.a(unittools.o): In function `do_explore':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2149: undefined reference to `ai_manage_explorer'
./.libs/libcivserver.a(unittools.o): In function `enemies_at':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1057: undefined reference to `unit_def_rating_basic_sq'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1066: undefined reference to `can_unit_attack_unit_at_tile'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1066: undefined reference to `can_unit_attack_all_at_tile'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1069: undefined reference to `unit_att_rating'
./.libs/libcivserver.a(unittools.o): In function `unit_versus_unit':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:179: undefined reference to `get_total_attack_power'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:180: undefined reference to `get_total_defense_power'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:183: undefined reference to `get_modified_firepower'
./.libs/libcivserver.a(unittools.o): In function `update_unit_activity':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:773: undefined reference to `ai_incident_pillage'
./.libs/libcivserver.a(unittools.o): In function `create_unit_full':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1398: undefined reference to `vision_new'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1410: undefined reference to `aiferry_init_ferry'
./.libs/libcivserver.a(unittools.o): In function `find_a_good_partisan_spot':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:970: undefined reference to `get_virtual_defense_power'
./.libs/libcivserver.a(unittools.o): In function `unit_survive_autoattack':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2426: undefined reference to `can_unit_attack_unit_at_tile'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2443: undefined reference to `get_defender'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2444: undefined reference to `get_defender'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2445: undefined reference to `unit_win_chance'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2446: undefined reference to `unit_win_chance'
./.libs/libcivserver.a(unittools.o): In function `move_unit':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2755: undefined reference to `vision_new'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2775: undefined reference to `vision_free'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2890: undefined reference to `vision_free'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2792: undefined reference to `vision_new'
./.libs/libcivserver.a(unittools.o): In function `do_nuclear_explosion':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:2100: undefined reference to `ai_incident_nuclear'
./.libs/libcivserver.a(unittools.o): In function `kill_unit':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1658: undefined reference to `is_stack_vulnerable'
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:1658: undefined reference to `is_stack_vulnerable'
./.libs/libcivserver.a(unittools.o): In function `player_restore_units':
/home/clint/tmp/freeciv/obj/server/../../server/unittools.c:387: undefined reference to `ai_follow_path'
./.libs/libcivserver.a(barbarian.o): In function `try_summon_barbarians':
/home/clint/tmp/freeciv/obj/server/../../server/barbarian.c:479: undefined reference to `dist_nearest_city'
./.libs/libcivserver.a(citytools.o): In function `update_dumb_city':
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1898: undefined reference to `update_vision_site_from_city'
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1873: undefined reference to `create_vision_site_from_city'
./.libs/libcivserver.a(citytools.o): In function `remove_city':
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1197: undefined reference to `could_unit_move_to_tile'
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1277: undefined reference to `vision_free'
./.libs/libcivserver.a(citytools.o): In function `transfer_city':
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:875: undefined reference to `vision_new'
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:877: undefined reference to `vision_reveal_tiles'
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:879: undefined reference to `vision_get_sight'
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:879: undefined reference to `vision_get_sight'
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:999: undefined reference to `vision_free'
./.libs/libcivserver.a(citytools.o): In function `create_city':
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1086: undefined reference to `vision_new'
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1087: undefined reference to `vision_reveal_tiles'
./.libs/libcivserver.a(citytools.o): In function `reality_check_city':
/home/clint/tmp/freeciv/obj/server/../../server/citytools.c:1927: undefined reference to `free_vision_site'
./.libs/libcivserver.a(cityturn.o): In function `advisor_choose_build':
/home/clint/tmp/freeciv/obj/server/../../server/cityturn.c:767: undefined reference to `ai_advisor_choose_building'
./.libs/libcivserver.a(cityturn.o): In function `auto_arrange_workers':
/home/clint/tmp/freeciv/obj/server/../../server/cityturn.c:240: undefined reference to `TIMING_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/cityturn.c:324: undefined reference to `TIMING_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/cityturn.c:313: undefined reference to `CITY_LOG'
./.libs/libcivserver.a(diplhand.o): In function `really_diplomacy_cancel_meeting':
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:685: undefined reference to `clear_treaty'
./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_init_meeting_req':
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:728: undefined reference to `could_meet_with_player'
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:732: undefined reference to `init_treaty'
./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_create_clause_req':
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:631: undefined reference to `add_clause'
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:654: undefined reference to `ai_treaty_evaluate'
./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_remove_clause_req':
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:594: undefined reference to `remove_clause'
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:602: undefined reference to `ai_treaty_evaluate'
./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_accept_treaty_req':
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:554: undefined reference to `clear_treaty'
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:352: undefined reference to `ai_treaty_accepted'
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:349: undefined reference to `ai_treaty_accepted'
./.libs/libcivserver.a(diplhand.o): In function `free_treaties':
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:85: undefined reference to `clear_treaty'
./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_create_clause_req':
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:657: undefined reference to `ai_treaty_evaluate'
./.libs/libcivserver.a(diplhand.o): In function `handle_diplomacy_remove_clause_req':
/home/clint/tmp/freeciv/obj/server/../../server/diplhand.c:605: undefined reference to `ai_treaty_evaluate'
./.libs/libcivserver.a(gotohand.o): In function `goto_is_sane':
/home/clint/tmp/freeciv/obj/server/../../server/gotohand.c:593: undefined reference to `ai_channel'
/home/clint/tmp/freeciv/obj/server/../../server/gotohand.c:585: undefined reference to `ai_channel'
./.libs/libcivserver.a(maphand.o): In function `change_playertile_site':
/home/clint/tmp/freeciv/obj/server/../../server/maphand.c:812: undefined reference to `free_vision_site'
./.libs/libcivserver.a(maphand.o): In function `player_map_free':
/home/clint/tmp/freeciv/obj/server/../../server/maphand.c:909: undefined reference to `free_vision_site'
./.libs/libcivserver.a(maphand.o): In function `map_claim_ownership':
/home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1567: undefined reference to `update_vision_site_from_city'
/home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1576: undefined reference to `create_vision_site_from_city'
/home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1581: undefined reference to `create_vision_site_from_base'
./.libs/libcivserver.a(maphand.o): In function `really_give_tile_info_from_player_to_player':
/home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1117: undefined reference to `create_vision_site'
/home/clint/tmp/freeciv/obj/server/../../server/maphand.c:1123: undefined reference to `copy_vision_site'
./.libs/libcivserver.a(ruleset.o): In function `load_ruleset_units':
/home/clint/tmp/freeciv/obj/server/../../server/ruleset.c:1403: undefined reference to `update_simple_ai_types'
./.libs/libcivserver.a(ruleset.o): In function `load_rulesets':
/home/clint/tmp/freeciv/obj/server/../../server/ruleset.c:3683: undefined reference to `unit_class_ai_init'
./.libs/libcivserver.a(savegame.o): In function `player_save_main':
/home/clint/tmp/freeciv/obj/server/../../server/savegame.c:3163: undefined reference to `ai_data_get'
./.libs/libcivserver.a(savegame.o): In function `player_load_units':
/home/clint/tmp/freeciv/obj/server/../../server/savegame.c:1888: undefined reference to `vision_new'
./.libs/libcivserver.a(savegame.o): In function `player_load_vision':
/home/clint/tmp/freeciv/obj/server/../../server/savegame.c:3045: undefined reference to `create_vision_site'
./.libs/libcivserver.a(savegame.o): In function `game_load_internal':
/home/clint/tmp/freeciv/obj/server/../../server/savegame.c:4751: undefined reference to `ai_manage_buildings'
./.libs/libcivserver.a(savegame.o): In function `player_load_main':
/home/clint/tmp/freeciv/obj/server/../../server/savegame.c:1944: undefined reference to `ai_data_get'
./.libs/libcivserver.a(savegame.o): In function `player_load_cities':
/home/clint/tmp/freeciv/obj/server/../../server/savegame.c:2834: undefined reference to `vision_new'
/home/clint/tmp/freeciv/obj/server/../../server/savegame.c:2835: undefined reference to `vision_reveal_tiles'
./.libs/libcivserver.a(savegame.o): In function `apply_unit_ordering':
/home/clint/tmp/freeciv/obj/server/../../server/savegame.c:3878: undefined reference to `unit_list_sort_ord_city'
/home/clint/tmp/freeciv/obj/server/../../server/savegame.c:3884: undefined reference to `unit_list_sort_ord_map'
./.libs/libcivserver.a(settlers.o): In function `contemplate_new_city':
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1320: undefined reference to `find_best_city_placement'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1323: undefined reference to `CITY_LOG'
./.libs/libcivserver.a(settlers.o): In function `evaluate_improvements':
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:850: undefined reference to `UNIT_LOG'
./.libs/libcivserver.a(settlers.o): In function `contemplate_terrain_improvements':
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1351: undefined reference to `ai_data_get'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1378: undefined reference to `CITY_LOG'
./.libs/libcivserver.a(settlers.o): In function `auto_settler_findwork':
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:946: undefined reference to `ai_data_get'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1061: undefined reference to `ai_unit_new_role'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:977: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:978: undefined reference to `ai_unit_new_role'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1015: undefined reference to `TIMING_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1018: undefined reference to `TIMING_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1086: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1118: undefined reference to `ai_follow_path'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1023: undefined reference to `TIMING_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1024: undefined reference to `find_best_city_placement'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1025: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1027: undefined reference to `TIMING_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1050: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1053: undefined reference to `ai_unit_new_role'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:984: undefined reference to `ai_gothere'
./.libs/libcivserver.a(settlers.o): In function `ai_do_build_city':
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:86: undefined reference to `ai_unit_new_role'
./.libs/libcivserver.a(settlers.o): In function `auto_settler_findwork':
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:990: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:992: undefined reference to `ai_unit_new_role'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1030: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1041: undefined reference to `ai_unit_new_role'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1055: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1056: undefined reference to `ai_unit_new_role'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1073: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1003: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1034: undefined reference to `UNIT_LOG'
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:1037: undefined reference to `print_cityresult'
./.libs/libcivserver.a(settlers.o): In function `ai_do_build_city':
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:114: undefined reference to `init_choice'
./.libs/libcivserver.a(settlers.o): In function `ai_manage_settler':
/home/clint/tmp/freeciv/obj/server/../../server/settlers.c:144: undefined reference to `ai_unit_new_role'
./.libs/libcivserver.a(unithand.o): In function `handle_unit_orders':
/home/clint/tmp/freeciv/obj/server/../../server/unithand.c:2023: undefined reference to `ai_unit_new_role'
./.libs/libcivserver.a(unithand.o): In function `unit_bombard':
/home/clint/tmp/freeciv/obj/server/../../server/unithand.c:880: undefined reference to `is_unit_reachable_by_unit'
./.libs/libcivserver.a(unithand.o): In function `unit_move_handling':
/home/clint/tmp/freeciv/obj/server/../../server/unithand.c:1286: undefined reference to `get_defender'
/home/clint/tmp/freeciv/obj/server/../../server/unithand.c:1290: undefined reference to `can_unit_attack_all_at_tile'
./.libs/libcivserver.a(unithand.o): In function `unit_attack_handling':
/home/clint/tmp/freeciv/obj/server/../../server/unithand.c:944: undefined reference to `sdi_try_defend'
./.libs/libcivserver.a(unithand.o): In function `handle_unit_change_activity':
/home/clint/tmp/freeciv/obj/server/../../server/unithand.c:685: undefined reference to `ai_unit_new_role'
./.libs/libcivserver.a(unithand.o): In function `unit_change_homecity_handling':
/home/clint/tmp/freeciv/obj/server/../../server/unithand.c:376: undefined reference to `vision_free'
/home/clint/tmp/freeciv/obj/server/../../server/unithand.c:378: undefined reference to `ai_reinit'
/home/clint/tmp/freeciv/obj/server/../../server/unithand.c:384: undefined reference to `vision_new'
./.libs/libcivserver.a(diplomats.o): In function `maybe_cause_incident':
/home/clint/tmp/freeciv/obj/server/../../server/diplomats.c:1290: undefined reference to `ai_incident_diplomat'
collect2: ld returned 1 exit status
make[3]: *** [civserver] Error 1
make[3]: Leaving directory `/home/clint/tmp/freeciv/obj/server'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/clint/tmp/freeciv/obj/server'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/clint/tmp/freeciv/obj'
make: *** [all] Error 2

#508658#20
Date:
2008-12-19 03:28:21 UTC
From:
To:
What about something like

diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh
index 2769149..447d3a2 100644
--- a/libltdl/config/ltmain.m4sh
+++ b/libltdl/config/ltmain.m4sh
@@ -145,6 +145,7 @@ extracted_serial=0

 opt_dry_run=false
 opt_duplicate_deps=false
+opt_duplicate_deps_pedantically=false
 opt_silent=false
 opt_debug=:

@@ -320,6 +321,9 @@ func_enable_tag ()
       --preserve-dup-deps)
 			opt_duplicate_deps=:				;;

+      --preserve-dup-deps-pedantically)
+			opt_duplicate_deps_pedantically=:		;;
+
       --quiet|--silent)	preserve_args="$preserve_args $opt"
 			opt_silent=:
 			opt_verbose=false
@@ -5725,16 +5729,18 @@ func_mode_link ()
 	  eval tmp_libs=\"\$$var\"
 	  new_libs=
 	  for deplib in $tmp_libs; do
+	    if $opt_preserve_dups_pedantically; then
 	    # FIXME: Pedantically, this is the right thing to do, so
 	    #        that some nasty dependency loop isn't accidentally
 	    #        broken:
-	    #new_libs="$deplib $new_libs"
+	      new_libs="$deplib $new_libs"
+	    else
 	    # Pragmatically, this seems to cause very few problems in
 	    # practice:
-	    case $deplib in
-	    -L*) new_libs="$deplib $new_libs" ;;
-	    -R*) ;;
-	    *)
+	      case $deplib in
+	      -L*) new_libs="$deplib $new_libs" ;;
+	      -R*) ;;
+	      *)
 	      # And here is the reason: when a library appears more
 	      # than once as an explicit dependence of a library, or
 	      # is implicitly linked in more than once by the
@@ -5749,17 +5755,18 @@ func_mode_link ()
 	      # such unportable linking tricks to link the library
 	      # using -Wl,-lname, so that libtool does not consider it
 	      # for duplicate removal.
-	      case " $specialdeplibs " in
-	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
-	      *)
-		case " $new_libs " in
-		*" $deplib "*) ;;
-		*) new_libs="$deplib $new_libs" ;;
-		esac
-		;;
+	        case " $specialdeplibs " in
+	        *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	        *)
+		  case " $new_libs " in
+		  *" $deplib "*) ;;
+		  *) new_libs="$deplib $new_libs" ;;
+		  esac
+		  ;;
+	        esac
+	        ;;
 	      esac
-	      ;;
-	    esac
+	    fi
 	  done
 	  tmp_libs=
 	  for deplib in $new_libs; do

#508658#25
Date:
2008-12-21 10:38:34 UTC
From:
To:
* Clint Adams wrote on Fri, Dec 19, 2008 at 04:28:21AM CET:

Well, that would reall mean that upstream should rather change the
semantics of --preserve-dup-deps, no?

What keeps you from using -Wl,-lname?

Thanks,
Ralf
[...]

#508658#30
Date:
2008-12-21 16:14:02 UTC
From:
To:
I do not know.

It requires gcc, can't be pointed at .la files, and would mean
setting a bunch of -L paths?

#508658#37
Date:
2020-11-21 08:40:58 UTC
From:
To:
Hi all,

Resurrecting an old bug dating back to 2008, still present in current
libtool 2.4.6-14.

We've recently encountered that bug with the inn2 package.  The
--preserve-dup-deps does not do what it is supposed to do because of a 
broken optimization (marked as FIXME in the libtool code).

Suggestion of patch:
--- ltmain.sh.orig 2020-11-21 08:16:10.480694237 +0100 +++ ltmain.sh 2020-11-21 08:43:00.848365987 +0100 @@ -8686,41 +8686,45 @@ eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; + if $opt_preserve_dup_deps; then + # Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken. + new_libs="$deplib $new_libs" + else + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. And if not possible for portability + # reasons, then --preserve-dup-deps should be used. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + fi done tmp_libs= for deplib in $new_libs; do Works OK witn inn2.